• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

HIT_Braga

Trabalho prático LEI 1º ANO

4 mensagens neste tópico

Boas pessoal.

Anda por aqui muita gente a trabalhar no assunto :P

Alguém me sugere como fazer a pontuação das diagonais ??? de forma a que se aumentar o tabuleiro funcione sempre, porque para um tabuleiro fixo n é mto dificil.

o meu tabuleiro é uma lista de listas.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a maneira que eu utilizei talvez não seja a melhor, mas funciona (e agora também não estou para pensar mais nessa parte)

fazes uma função que te aceda ao tabuleiro como se fosse uma matriz. por exemplo: acederTab tabuleiro 2 2, deve dar-te o valor da 2ª linha, 2ª coluna

com isto fazes uma que percorra o tabuleiro na diagona. começa no canto inferior esquerdo, e a cada iteração, vai para o campo abaixo e à direita do anterior. assim que ultrapassar os limites do tabuleiro, vai para a diagonal seguinte. a cada passagem o que faz é: se o valor da casa actual for o valor pretendido, então soma uma unidade ao segmento anterior, se não acrescenta um zero à lista

não sei se me fiz explicar bem (nunca foi grande explicador), mas isto a mim dá como resultado uma lista do tipo: [1,0,0,1,0,3] isto significa que o tabuleiro tem 2 segmentos de 1 e 1 segmento de 3. depois é usar isto para calcular a pontuação final

ah! e falta depois calcular também as diagonais no outro sentido, e isso pode ser feito de forma idêntica a esta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mpalhas desde já obrigado por responderes.

Percebi a ideia mas não sei muito bem como implementar. Podias mostrar um pouco do teu código para tirar umas ideias.

Tenho uma lista de listas.

Cada lista é uma coluna.

Consigo transformar em linhas (lista de listas que são linhas)

Conta pontos na horizontal e vertical.Só falta mesmo diagonais.E como queria que o jogo desse para crescer tem se ser de forma automática.

tou cheio de :wallbash: e já ando a ficar  :rant_01: com as diagonais

Obrigados desde já pelo tempo dispendido

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por exemplo para as horizontais:

calculaHor :: Tabuleiro -> Int -> Int -> Int -> [int]
calculaHor tab jogador x y | x > altura_do_tabuleiro = [0] -- se passou da ultima linha, entao ja chegou ao fim. nao pode devolver lista vazia porque isso nao servia para o padrao (cabeca:cauda)

                                    | y > largura_do_tabuleiro = 0: (calculaHor tab 1 (y+1)) -- se passou o fim da linha, vai para o inicio da linha seguinte, e acrescenta um zero à cabeça para dizer que o segmento acaba ali

                                    | pos == jogador = (1+cabeca):cauda -- se a casa actual for igual ao valor que se procura, soma 1 a cabeca da lista (por isso é que se tem que acrescentar os zeros)

                                    | otherwise = 0:cabeca:cauda -- qualquer outro caso acrescenta apenas um zero à lista

               where pos = acederTabuleiro x y
                        (cabeca:cauda) = calculaHor tab jogador (x+1) y -- recursivamente vai para a casa seguinte. como se quer saber as horizontais, essa é a casa á direita

nas guardas eu usei largura_do_tabuleiro, e altura_do_tabuleiro, que não estão definidas, mas acho que dá para perceber o que significam  ;)

também provavelmente isto não compila porque foi escrito agora mesmo e sem testar, por isso não deve funcionar, mas dá para ter uma ideia

Ah! aquela funcao acederTabuleiro não defini mas terá que dar o valor que o tabuleiro tem na posicao (x, y)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora