GithubHelp home page GithubHelp logo

rastros-game-in-c's Introduction

@file

Rastros Game

Rastros

Rastros game built in C

Projeto desenvolvido no âmbito da unidade curricular Laboratórios de Informática II do curso de Engenharia Informática da Universidade do Minho.

Instruções de utilização

Na raiz do projeto, bastará correr o comando make em sistemas Unix. Este comando irá criar 2 executáveis:

  • rastros.exe (root)
    • Programa principal para entrar no jogo
  • li2pl06g05_bot (./bot/)
    • Programa extra para utilizar o bot no torneio

Por forma a apagar os ficheiros objeto e os executáveis, executar make clean.

rastros.exe

Comandos disponíveis:

  • jogar :: Permite entrar no modo de jogo.
  • gr nome_do_ficheiro :: gravar o estado atual do jogo num ficheiro.
  • ler nome_do_ficheiro :: ler o estado de um jogo a partir de um ficheiro.
  • movs :: imprimir a lista de movimentos do jogo atual.
  • jog :: pedir ajuda ao bot para escolher a jogada atual.
  • pos numero_da_jogada :: visualizar uma posição anterior através do seu número.
  • novo :: iniciar um novo jogo. Perde o estado do jogo atual!
  • bot NIVEL :: ativar jogo contra o bot
  • ajuda :: mostra este menú.
  • autores :: ver autores.
  • Q :: sair do jogo.

Etapas de desenvolvimento:

  • Guião 1
  • Guião 2
  • Guião 3
  • Guião 4
  • Guião 5

Relatório Guião 5

Tendo por base as orientações definidas pelos docentes, a realização do guião 5 consistiu nas seguintes fases:

1. Estrutura do projeto

  • Camada de dados;
    • Declarou-se o tipo enum CASA que serve para atribuir o estado { Vazio, Branca ou Preta } a cada CASA do tabuleiro.
    • struct COORDENADA que contém a linha e coluna (representada numa matriz);
    • struct JOGADA contem duas COORDENADAs. Representando o jogador1 e jogador2;
    • struct ESTADO que contém:
      • o tabuleiro do jogo (array bidimensional de CASA);
      • COORDENADA última jogada;
      • JOGADAS array de JOGADA - é-lhe atribuido o histório de jogadas;
      • int número de jogadas efetuadas até ao momento;
      • int jogador que irá efetuar a jogada;
      • BOT dados do tipo enum { NO, YES } BOT permite definir se está a jogar contra um BOT;
      • int nível do jogo no caso de se encontrar a jogar contra BOT.
  • Lógica do programa;
    • Nesta camada, pode-se encontrar as funções que são utilizadas pelo interpretador:
      • int jogar (ESTADO *state, COORDENADA c)
        • Efetua uma jogada: atualiza o estado do programa utilizando a coordenada indicada.
        • Comando: coordenada ##
      • int gravarJogo (ESTADO *state, char *nomeFicheiro)
        • Grava o estado do jogo num determinado ficheiro nomeFicheiro.
        • Comando: gr nome_do_ficheiro
      • int lerJogo (ESTADO *e, char *nomeFicheiro)
        • Lê o estado de um jogo a partir de um ficheiro nomeFicheiro.
        • Comando: ler nome_do_ficheiro
      • int lerMovimentos (ESTADO *e)
        • Apresenta os movimentos do jogo.
        • Comando: movs
      • void mostraPos(ESTADO *state, char *pos)
        • Imprime o tabuleiro numa determinada altura pos do jogo.
        • Comando: pos posicao_desejada
  • Camada de interface.
    • Interpretador
      • Módulo que permite ao utilizador interagir com o programa através de comandos pré-definidos.
      • Os comandos possíveis encontram-se descritos no ponto anterior.

2. Desenvolvimento

Por forma a otimizar a relação do programador com o programa, começou-se por definir alguns macros. Para tal, criou-se um módulo designado globals. Posteriormente, criou-se uma pasta modules. Dentro desta, pode-se encontrar os módulos que trazem funcionalidade ao programa. Estes estão em conformidade com a estrutura do projeto apresentada, sendo os seguintes:

  • Interface;
  • Lógica;
  • Interpretador.

A maior dificuldade ocorreu durante esta fase inicial do projeto, em que se procurou definir a melhor hierarquia de ficheiros possível que permitisse criar módulos facilmente reutilizáveis e fácil de efetuar debugging. Para tal, utilizou-se conhecimento adquirido em artigos sobre esta temática.
Quanto ao desenvolvimento do código, utilizando as orientações da equipa docente e o conhecimento adquirido nas aulas teóricas de Programação Imperativa, foi relativamente simples.
Por forma a facilitar a impressão do tabuleiro e a deteção de fim de jogo, optou-se por alterar a tipo de dados CASA, acrescentando JOGADOR1, JOGADOR2. Através desta alteração, foi possível definir uma função que imprime o tabuleiro com o mínimo de código e fácil leitura humana - novamente com o objetivo de facilitar o debugging.
Em relação à impressão do tabuleiro, optou-se por desenvolver uma componente gráfica que melhora a utilização do programa.

  • Guião 6
  • Guião 7
  • Guião 8
  • Guião 9
  • Guião 10

Informação sobre os autores

Turno Prático

PL6 - Grupo 5

Autores:

  • 62608 Marco António Gonçalves de Sousa
  • 93271 José Alberto Ferreira Malheiro
  • 93198 Mariana Rocha Marques

rastros-game-in-c's People

Contributors

smarqito avatar josefam avatar marianarmarques avatar

Stargazers

 avatar docente_la1li2 avatar  avatar

Watchers

 avatar

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.