Este é um jogo de Paciência na versão Klondike, desenvolvido em C. O objetivo do jogo é mover todas as cartas para as fundações (piles) com base em suas cores e valores, começando do Ás até o Rei.
Este código foi desenvolvido como trabalho final da disciplina de Estrutura de Dados e tem como objetivo exercitar os conceitos como filas e pilhas. Essas estruturas são fundamentais para a lógica do jogo, especialmente no gerenciamento das cartas no monte, colunas e fundações.
- Modo Clássico: Jogue a versão clássica do Klondike com todas as regras tradicionais.
- Interface de Texto: O jogo é jogado através de uma interface de linha de comando usando a biblioteca ncurses.
- Inicie o jogo: Execute o arquivo executável gerado pelo código C.
- Movimente as cartas: Utilize comandos de teclado para mover as cartas entre as colunas, para as fundações ou para o estoque.
- Objetivo: Complete as fundações de cada naipe, movendo todas as cartas do Ás ao Rei.
- Compra de carta:
c - Movimentação:
m+ [ORIGEM]:'m'(para monte) ou'c<i>'(para coluna) + [DESTINO]:'f<j>'(para fundação) ou'c<k>'(para coluna)
- Movimentação em massa (entre colunas):
'm'+ [NUM CARTAS]:'<n>'+ [ORIGEM]:'c<i>'(para coluna) + [DESTINO]:'c<k>'(para coluna)
- Iniciar o jogo: Digite
"start" - Sair do jogo: Digite
"exit"
- Compilador C (GCC ou equivalente)
- Sistema operacional Unix-like (Linux, macOS) ou Windows com suporte ao compilador C
- ncurses: A biblioteca ncurses deve estar instalada no sistema
- Clone este repositório:
git clone https://github.com/robert-kau/patience-game
- Navegue até o diretório do projeto:
cd patience-game - Compile o código utilizando o Makefile:
make
- Execute o jogo:
./patience_game
├── README.md # Documentação do projeto
├── makefile # Arquivo para automação da compilação
├── src/ # Código fonte do jogo
│ ├── main.c
│ ├── interface.c
│ ├── baralho.c
│ ├── fila_enc.c
│ ├── pilha_enc.c
│ └── paciencia.c
├── include/ # Arquivos de cabeçalho
│ ├── baralho.h
│ ├── fila_enc.h
│ ├── interface.h
│ ├── paciencia.h
│ └── pilha_enc.h
├── build/ # Arquivos compiladosKlondike é um jogo de paciência (ou solitário) que utiliza um baralho padrão de 52 cartas. O objetivo do jogo é construir quatro fundações, uma para cada naipe, do Ás ao Rei.
- Monte: Um monte de cartas viradas para baixo, com uma carta virada para cima.
- Colunas: Sete colunas de cartas, com a primeira coluna contendo uma carta virada para cima, a segunda coluna contendo uma carta virada para cima seguida de uma carta virada para baixo, e assim por diante até a sétima coluna.
- Fundações: Quatro espaços vazios onde as cartas serão movidas para construir os naipes completos de Ás a Rei.
-
Movendo Cartas:
- Cartas podem ser movidas entre colunas, para as fundações ou do monte para uma coluna ou fundação.
- Apenas o Rei pode ser movido para uma coluna vazia.
- Uma carta ou sequência de cartas pode ser movida para uma coluna se a carta no topo da sequência for de valor imediatamente inferior e de naipe oposto (vermelho sobre preto, preto sobre vermelho).
-
Construindo as Fundações:
- As fundações são construídas em ordem crescente, começando com o Ás e terminando com o Rei, todas do mesmo naipe.
-
Comprando Cartas:
- Você pode comprar cartas do monte para tentar jogá-las em uma das colunas ou fundações. Se não houver mais jogadas possíveis com as cartas no monte, ele pode ser revirado para continuar o jogo.
-
Objetivo:
- O jogo é ganho quando todas as cartas foram movidas para as fundações, organizadas por naipe do Ás ao Rei.
Essas são as regras básicas do Klondike Solitaire. O jogo pode exigir tanto habilidade quanto sorte, e o desafio está em planejar os movimentos para descobrir as cartas escondidas e construir as fundações com sucesso.
O jogo utiliza várias estruturas de dados para gerenciar as cartas e a lógica do jogo. As principais estruturas são:
typedef struct
{
PilhaEnc *faceDown;
FilaEnc *faceUp;
int numCartasfaceDown;
int numCartasfaceUp;
} Coluna;
typedef struct
{
PilhaEnc *cartas;
char naipe;
int numCartas;
} Fundacao;
typedef struct
{
Baralho *oculto;
Baralho *visualizado;
Carta cartaVisivel;
int numCartas;
} MonteCompra;
typedef struct
{
char naipe;
int valor;
} Carta;-
Coluna: Representa uma coluna no jogo, onde as cartas podem estar viradas para baixo (
faceDown) ou para cima (faceUp). Cada coluna tem um número específico de cartas viradas para baixo e para cima. -
Fundacao: Representa uma das quatro fundações onde as cartas serão organizadas por naipe do Ás ao Rei. Cada fundação possui um naipe associado e o número de cartas nela.
-
MonteCompra: Representa o monte de compra, que contém cartas ainda não jogadas (ocultas) e cartas já visualizadas. A estrutura mantém um controle da carta atualmente visível e o número total de cartas no monte.
-
Carta: Representa uma única carta no jogo, com seu respectivo naipe e valor.
Essas estruturas são fundamentais para o funcionamento do jogo, permitindo que ele manipule as cartas de acordo com as regras do Klondike Solitaire.