Code Monkey home page Code Monkey logo

minesweeper_mvc_patterns_com221's Introduction

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 [email protected]: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.

minesweeper_mvc_patterns_com221's People

Contributors

matmb115 avatar odbreno avatar thais-souza311 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

omateusluz

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.