XFreecell
Este é foi meu primeiro projeto
em que utilizei das bibliotecas
GTK+ e GLib, para o sistema XWindow de janelas do Linux. O meu objetivo
quando comecei a fazer esse jogo era didático, um exercício-programa
pedido por um professor. Aproveitei-me disso para aprender um pouco de
C++. O programa se utiliza dos mais avançados algoritmos de tratamento
de várias pilhas simultaneamente, para economizar o máximo
de memória e processamento possível. Esses algoritmos podem
ser encontrados no livro do Knuth, vol. I, páginas 245 e 246.
No início o jogo se utilizava
de chamadas diretas para as bibliotecas do X (uma coisa não muito
agadável de se programar). Mas depois que descobri as bibliotecas
GTK e GDK, comecei a alterá-lo, mesmo depois de já tê-lo
entregue como exercício. Eu queria um jogo de freecell para Linux
(pois não existia nenhum jogo descente pra essa plataforma), e então
comecei a implementar vários recursos, até chegar ao que
é hoje.
Você pode encontrá-lo
para download aqui.
Como fazer
funcinar:
-
Primeiro faça o download do pacote
com o fonte do programa. Você precisará da versão 1.1
ou superior do GTK+/GDK para conseguir compilar e executar o programa de
maneira confiável.
-
Após isso, digite: make
strip
-
Agora é só rodar o programa:
freecell
Como utilizar:
Ao rodar o programa, você
encontrará um menu com várias opções. Você
pode começar um novo jogo, recomeçar um jogo em andamento
ou encerrar o programa.
Como jogar:
-
O jogo é jogado com um baralho
(52 cartas). O objetivo do jogo é mover todas as cartas das pilhas
de jogo para as pilhas de saída usando quatro posições
auxiliares (freecells) para guardar temporariamente uma carta.
-
Existem quatro pilhas de saída,
uma para cada naipe. As cartas nas pilhas de saída devem estar em
ordem (ás, dois, três, etc).
-
Acredita-se, embora nunca tenha sido provado,
que todo jogo pode ser vencido. A área de jogo do FreeCell consiste
de quatro pilhas de saída, quatro posições auxiliares
e o baralho, que é distribuído em oito pilhas de jogo no
início do jogo, com todas as cartas abertas.
-
As cartas podem ser movidas para três
lugares:
-
Para uma posição auxiliar
desocupada: qualquer carta do topo de uma pilha de jogo.
-
Para uma das pilhas de saída: qualquer
carta de uma posição auxiliar ou do topo de uma pilha de
jogo. Movimentos para uma pilha de saída devem ser feitos em ordem
do menor para o maior, mesmo naipe. Áses sempre podem ser movidos
para uma pilha de saída vazia.
-
Para o topo de uma pilha de jogo: qualquer
carta de uma das posições auxiliares ou do topo de uma outra
pilha de jogo. Movimentos para uma pilha de jogo devem ser feitos em ordem
do maior para o menor, alternando a cor do naipe.
-
O jogo termina ou quando todas as cartas
foram movidas para as pilhas de saída ou quando não há
movimento que permita mais alguma carta ser movida para uma das pilhas
de saída.
Abaixo sequem as características
do Freecell:
v1.1 (14/07/1999
- stable):
-
Mesmas características da versão
anterior, somadas com:
-
Agora uma caixa de diálogo é
exibida caso o jogador tente mover simultaneamente mais cartas do que é
possível.
-
Uma caixa de diálogo mais elaborada
é mostrada quando o jogador perde ou ganha um jogo, permitindo-o
começar jogo novo, reiniciar ou encerrar o programa.
-
A janela principal agora é "travada"
quando alguma mensagem está sendo exibida, obrigando o jogador a
tomar alguma atitude (clicar em algum botão). Somente depois dessa
atitude ela é "liberada".
-
O binário do jogo agora é
stand-alone, isto é, não depende dos arquivos de figuras
xpm.
v1.0 (31/01/1999):
-
Utiliza as bibliotecas GTK+/GDK, evitando
ter que usar o XLib diretamente no código fonte.
-
O botão direito do mouse mostra
a carta que está escondida atrás de outra numa pilha de jogo.
-
Permite mover várias cartas ao
mesmo tempo.
-
Agora guarda corretamente as cartas desnecessárias.
-
O ponteiro do mouse muda, indicando se
um movimento é permitido ou não, mesmo para movimento de
múltiplas cartas.
-
Carinha do Rei colocada entre as posições
de freecell e de saída, que fica olhando para onde o mouse for na
janela (para agradar aqueles que estão acostumados com o rWindows
:-)).
-
Mostra animação do movimento
das cartas (experimente mover várias cartas simultaneamente ;-)).
v0.01 (02/09/1998):
Utiliza as bibliotecas XLib diretamente
no código fonte.
Utiliza o algoritmo de tratamento de múltiplas
pilhas do livro do Knuth, vol. I, páginas 245 e 246.
Manda as cartas desnecessárias,
para o jogador, para as pilhas de saída.
Verifica se não existem mais jogadas
possíveis, e verifica também se o jogador venceu.
Permite inicializar um novo jogo, ou recomeçar
um jogo em andamento.