Decisões Implementação do Sobe e Desce Implementação do Sobe e Desce Estruturas de Dados

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}


Nuno Pereira, 9 Junho 2004

Decisões Implementação do Sobe e Desce Implementação do Sobe e Desce Estruturas de Dados