Skip to content

MatMB115/minesweeper_mvc_patterns_com221

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub language count Repository size GitHub last commit License Stargazers

MineSweep-logo

RepiMe-Flutter

Minesweeper com designs pattern MVC e Strategy

Campo minado guiado pelos padrões de projeto MVC e Strategy. O jogo foi desenvolvido com Python 3 e a interface gráfica utiliza a biblioteca Qt5 da linguagem.


Sobre

Conforme os conceitos abordados na disciplina de Programação Orientada Objetos II da Universidade Federal de Itajubá ministrada pelo professor Phyllipe, a equipe desenvolveu um campo minado com a interface gráfica Qt5 aplicando os padrões de projeto MVC e Strategy. Acesse o vídeo Minewsweeper para uma explicação mais detalhada do processo de desenvolvimento deste projeto.

As orientações estão divididas nos seguintes tópicos:


Funcionalidades ⚙️

  • Easy mode com MVC;
  • Mid mode com MVC;
  • Hard mode com MVC;
  • Random mode (usuário insere as dimensões) com MVC;
  • Implantar um timer básico;
  • Timer utilizando os assets;
  • Strategy para saves;
  • Exportar save para JSON;
  • Exportar save para CSV;
  • Exportar save para TXT.

MVC 💣

O núcleo da aplicação foi construída nas classes Model, View, Controller e Cell. O MVC funciona como um padrão de arquitetura de software que melhora a conexão entre as camadas de dados, lógica de negócio e interação com usuário. Através da sua divisão em três componentes, o processo de programação se torna algo mais simples e dinâmico. Como na aplicação do projeto utilizou-se uma interface gráfica, basear-se em um código monolítico juntaria todas as funções em um arquivo somente, o que tornaria a manutenção mais complicada. A fim de revolver este problema, separou-se em model, view e controller onde a criação da interface, a parte estética e sua configuração seriam referenciadas na view, enquanto toda a lógica do programa referenciaria-se na model.

  • Cell: classe de suma importância, compõe as células que geram um campo minado (matriz) e armazena os atributos e funções essenciais para validar a lógica do jogo;

  • Model: classe que implementa a lógica do jogo, define a estrutura e as funcionalidades, desde a definição do que tem no jogo até as dificuldades, formas de salvar, implementação de regras e tudo o que for necessário para o funcionamento do jogo;

  • Controller: A controller funciona como uma ponte entre a View e a Model, seria mais um nível de abstração, fazendo com que a View utilize das funções da Model sem conhecê-las. No caso desse projeto a controller faz a chamada das funções da model quando um evento ocorre na view, por exemplo, se um jogador clica em uma determinada dificuldade na interface da view, ela chama a função da controller que cria um novo jogo nessa dificuldade, todavia, essa função da controller não implementa a criação desse novo jogo na nova dificuldade, ela apenas chama as funções da model necessárias para realizar tal tarefa passando os parâmetros da view, como a nova dificuldade;

  • View: A View é a parte estética do projeto, implementa a interface gráfica e processa os eventos e interações do usuário chamando a controller, que por sua vez chama as funções que estão implementadas na Model, no nosso projeto toda a implementação da interface gráfica com PyQT está nessa classe;

MVCMinesweep


Strategy 🤔

Conforme o UML acima, foi necessário criar uma classe de contexto SaveGame, uma vez que python não reserva uma palavra chave para interfaces. Essa classe fica incumbida de conectar a model com a implementação do strategy pela classe (interface) TypeFile, permitindo que o usuário troque a implementação concreta do atributo TypeFile na model em tempo de execução.

O jogo permite que o usuário exporte o histórico de vitórias com o tempo de jogo para os arquivos do tipo: JSON, CSV e TXT.

Export do save como JSON:

export_json


Pré-requisitos e configuração 🛠️

No geral, para executar a aplicação é recomendado que o sistema já possua:

Vale ressaltar que um executável para Windows será disponilibizado na path Windows.

O campo minado foi testado nos seguintes sistemas operacionais (ambientes de desenvolvimento):

  • Windows 10;
  • Windows 11;
  • Manjaro KDE;
  • Ubuntu 18.04 LTS.

PyQt5

Para instalar a biblioteca em ambos os ambientes supracitados será necessário abrir um terminal (tanto o bash no Visual Studio Code quanto PowerShell no Windows Terminal servirão). Execute o comando abaixo para instalar a biblioteca:

pip install pyqt5

Para iniciar o jogo pelo terminal deve-se seguir as instruções abaixo.

# Clone este repositório com
$ git clone https://github.com/MatMB115/minesweeper_mvc_patterns_com221
# ou
$ git clone git@github.com:MatMB115/minesweeper_mvc_patterns_com221.git

# Acesse a pasta do projeto no seu terminal/cmd
$ cd minesweeper_mvc_patterns_com221

# Acesse a pasta do jogo
$ cd minesweeper

# Chame o interpretador do python 3 com o main.py

# Para linux
$ python3 main.py

# Para Windows
$ py main.py

# O jogo será iniciado corretamente

Layout 🎨

O jogo conta com uma tela principal que possui o campo minado usando assets inspirados no grandioso Minesweeper do Windows 95, um contador de bombas, um botão de status/start e um timer. Há também três botões na menubar para mudar o modo de jogo, exportar o histórico e sair da aplicação.

RepiMe RepiMe RepiMe RepiMe RepiMe RepiMe

RepiMe RepiMe


Tecnologias 🧑‍💻

O ponto de início deste projeto foi um ambiente virtual python, as dependências utilizadas estão presentes abaixo.

Aplicação:

-> Python 3.10.8
- pyQt5
- pip
- pyInstaller
- Virtual environment
- csv
- json

Utilitários:

-> Dev
- Visual Studio Code 1.73
- PyCharm 2022.3

Contribuidores


Matheus Martins

🧑‍💻

Breno Oliveira

🧑‍💻

Thais Souza

🧑‍💻

Matheus Luz

🧑‍💻

Repositório dedicado para o versionamento do campo minado desenvolvido usando os design patterns.

About

Repositório dedicado para o versionamento do campo minado desenvolvido usando os design patterns.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages