Loading repository data…
Loading repository data…
MatMB115 / repository
Repositório dedicado para o versionamento do campo minado desenvolvido usando os design patterns.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
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.
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:
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;
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:
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):
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
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.
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
Repositório dedicado para o versionamento do campo minado desenvolvido usando os design patterns.