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

Sign in to follow this  
HIT_Braga

Trabalho prático LEI 1º ANO

Recommended Posts

HIT_Braga

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


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
mpalhas

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

Share this post


Link to post
Share on other sites
HIT_Braga

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  😡 com as diagonais

Obrigados desde já pelo tempo dispendido


" Elogios não me elevam, ofensas não me rebaixam, sou o que sou e não o que acham! "

Share this post


Link to post
Share on other sites
mpalhas

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)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.