Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

Documentação

Alisson Nunes edited this page May 14, 2017 · 6 revisions

Conteúdo

  1. O Jogo
  2. Estrutura de Dados: Pilha
  3. Arquitetura
  4. Lógica do Jogo
  5. Conclusões

O Jogo

Arquitetura

Para a implementação do jogo, foi utilizado a linguagem de programação C++, juntamente com a biblioteca gráfica SDL (Simple DirectMedia Layer). Com isso pudemos usufruir da estrutura de dados Pilha e atrás do método "Pilha Inteligente" para manipular os demais Tipos Abstratos de Dados (TADs), como a seguir:

//Tabela da arquitetura da "PilhaInteligente"

FreeCell
Aplicação
--
Pilha

TADs usados

Para o jogo, foi criado as seguintes TADs:

  • Carta: nesta TAD é armazenado o número e naipe da carta, como também sua textura e demais métodos de inserir e obter tais dados;
  • Pilhas:
    • Pilha: TAD base para as demais pilhas, utilizando nós para referenciar os dados;
    • PilhaInteligente: herda publicamente da Pilha e adiciona métodos referentes à interface gráfica;
    • PilhaAuxiliar: herda publicamente da PilhaInteligente, porém sobrescreve a verificação de inserção;
    • PilhaDefinitiva: herda publicamente da PilhaInteligente, porém sobrescreve a forma de disposição das cartas e a verificação de inserção e remoção;
    • PilhaIntermediaria: herda publicamente da PilhaInteligente, porém sobrescreve a verificação de inserção e remoção;
  • Baralho: responsável por gerar todos os tipos de cartas e embaralhá-las;
  • EventManager: responsável por fazer as principais interações entre a interface e os dados;
  • TADs da interface gráfica: demais estruturas de dados provenientes da interface gráfica, utilizadas para fazer as interações gerais do jogo.

Estrutura de Dados: Pilha

Para a base das demais Pilhas, implementamos a seguinte estrutura como "Pilha burra":

template<class T>
class Node {
    public:
        T value;
        Node* right;
        Node* left;
        Node();
        Node(const T);
};

template<class T>
class Stack {
    protected:
        Node<T> header;
        int size;

    public:
        Stack();
        ~Stack();
        bool isEmpty() const;

        void push(const T, bool&);
        bool pop(T&);
        void clear();
        int getSize() const;
        Node<T>* peek() const;
};

Com a pilha base definida, partimos para a implementação de pilhas mais especializadas para que não caiba à aplicação verificar demais operações. Pra começar foi implementado uma PilhaInteligente como uma herança pública de Stack<Carta> e possuindo, em sua essência, métodos de posicionamento, texturas, renderização, entre outros. Porém, como diferentes pilhas possuem métodos diferentes para verificar os TADs, houve a necessidade da criação de demais classes de Pilha, herdando publicamente de PilhaInteligente. São estas: PilhaIntermediaria, PilhaAuxiliar e PilhaDefinitiva.

Lógica de implementação

Conclusões