![]() |
![]() |
![]() |
Estruturas de Dados |
Existe informação que está sempre a ser utilizada pelo jogo. Esses valores têm de estar guardados em alguma estrutura de dados que tanto pode permanecer constantes como serem modificadas com o decorrer do jogo. São exemplo o número de vasas que cada um dos jogadores ganhou uma rodada, os seus nomes ou as cores que devem ser utilizadas nas janelas da interface.
Para armazenar e aceder a essa informação, têm de ser escolhidas as estruturas de dados convenientes, tendo em atenção a rapidez, eficiência e facilidade de implementação. É a estas escolhas que se dedica esta secção.
Vamos começar por descrever como serão tratados os
utensílios do jogo,
as cartas.
Cada naipe ou valor tem um caracter que o identifica e cada
carta é representada pelo conjunto naipe valor. Por exemplo, o
símbolo
c3 identifica o terno de copas e o símbolo pk
o rei de paus.
O conjunto dos naipes e dos valores é armazenado numa lista. As listas são usadas no Tcl para lidar com sequências de informações, neste caso os caracteres dos naipes ou dos valores. Na sua forma mais simples é uma cadeia de caracteres contendo elementos separados por espaços. Com esta estrutura conseguimos agrupar os dados e aceder a eles de forma sequencial.
# Valores dos NAIPES
set NAIPES {c o p e}
set VALORES {2 3 4 5 6 j q k 7 a}
Para representar o baralho usou-se uma lista de listas, com as
cartas
agrupadas por naipes. A lista BARALHO será
constituída por
quatro elementos, cada um deles contendo a lista das cartas de um
naipe.
Para criar um baralho percorrem-se as duas listas anteriores e todas
as combinações Naipe Valor são
adicionadas a variável naipe que se encontrava
vazia no inicio. No final
de cada naipe, adiciona-se essa lista à variável
BARALHO. Será necessário ter um outro
baralho
em que estas cartas sejam misturadas, o qual vai ser guardado na lista
com o nome Listacartas.
# Criar Baralho
foreach index $NAIPES {
set naipe {}
foreach index2 $VALORES {
set naipe [linsert $naipe 0 "$index$index2"]
}
lappend BARALHO $naipe
}
Depois de termos as cartas começamos a distribuí-las aos jogadores e para armazenar a mão de um jogador é usada também uma lista. O conjunto das quatro mãos é guardado numa outra estrutura de dados do Tcl, as tabelas (ou "arrays"). Uma tabela representa um conjunto de elementos cada um dos quais é acessivel através de um índice, que é um nome. Neste caso os elementos são as listas que representam as mãos e os índices os números dos jogadores.
# Iniciar array das mãos dos Jogadores
array set Jogadores {
0 {} 1 {} 2 {} 3 {}
}
Para colocar as cartas na mão de um
jogador, usa-se o comando set
com a lista das cartas.
set Jogadores($i) {ca o4 p7}
Esta estrutura é mais indicada para dados que necessitem
ser acedidos
mais vezes, de um modo não sequencial. Ganha-se na facilidade de
acesso e em termos de organização pelo facto de todas as
mãos estarem
agrupadas na mesma variável. Acede-se a cada uma das mãos
através do
respectivo número do jogador, por exemplo,
$Jogadores(0).
As tabelas são também usadas para guardar os nomes dos
jogadores, o
conjunto das cartas em jogo, algumas opções do interface,
as
pontuações, as vasas ganhas entre outros dados. Estes
dados têm todos
em comum o facto de com o decorrer do jogo estarem sempre a ser
consultados e modificados.
# Total de pontos para cada um dos jogadores
array set Pontos_Totais { 0 0 1 0 2 0 3 0}
![]() |
![]() |
![]() |
Estruturas de Dados |