Skip to content

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

Stars

5 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages