Ir ao conteúdo
  • Cadastre-se

Jogo Resta Um em Pascal


Posts recomendados

Galera estou tentando fazer esse jogo em Pascal e estou tendo problemas na  hora de rodar o código, na hora de rodar recebo um erro de que a posição -1 está fora dos limites do vetor. Alguém pode me ajudar?
 

Program Resta1 ;uses crt;Vardirecao,c,i,j,l,resposta,a,podejogar,lista,col:integer;M:array[1..5,1..5] of integer;res: boolean;resp: char;Procedure inicio ;   Begin    writeln ('Para jogar novamente digite "s"') ;    readln (resp) ;     if (resp = 's') then      res:= True else res:= False ;     if res then      inicio ;   end; Begin podejogar:=0; for i:=1 to 5 do     for j:=1 to 5 do         Begin             if ((((i=1) or (i=5)) and (j<>3)) or (((i=2) or (i=4)) and ((j=1) or (j=5))))then                M[i,j]:=0            else if (((i=4) or (i=5)) and (j=3))then                M[i,j]:=2            else                M[i,j]:=1;        end;    for a:=1 to 11 do        Begin            writeln('                            Observe o Resta1 abaixo:');            writeln;            podejogar:=0;            for i:=1 to 5 do                Begin                    writeln;                    write('                             ');                    for j:=1 to 5 do                        Begin                            if(M[i,j]=1)then                                write('  O ')                            else if(M[i,j]=0)then                                write('  - ')                            else                                write('    ');                        end;                      writeln;                end;            writeln;            writeln;                                    writeln('                        Digite a linha da peca desejada');            write('                                        ');            read(l);            writeln;            writeln('                        Digite a coluna da peca desejada');            write('                                        ');            read(c);            if(M[l][c]=1)then                Begin                     writeln;                    writeln(' Digite a direcao do movimento');                    writeln(' 1. Para cima');                    writeln(' 2. Para direita');                    writeln(' 3. Para baixo');                    writeln(' 4. Para esquerda');                    write(' ');                    readln(direcao);                        if((direcao=1) and (M[l-1,c]=1) and (M[l-2,c]=2))then                            Begin                                M[l-2,c]:=1;                                M[l,c]:=2;                                M[l-1,c]:=2;                            end                        else if((direcao=2) and (M[l][c+1]=1) and (M[l][c+2]=2))then                            Begin                                M[l,c+2]:=1;                                M[l,c]:=2;                                M[l+1,c]:=2;                            end                        else if((direcao=3) and (M[l+1][c]=1) and (M[l+2][c]=2))then                            Begin                                M[l+2,c]:=1;                                M[l,c]:=2;                                M[l+1,c]:=2;                            end                        else if((direcao=4) and (M[l][c-1]=1) and (M[l][c-2]=2))then                            Begin                                M[l,c-2]:=1;                                M[l,c]:=2;                                M[l,c-1]:=2;                            end                        else                            writeln('Movimento indisponivel');                end                                       else                   writeln('Coluna e peca invalidas!');     for lista:=1 to 5 do        Begin            for col:=1 to 5 do                Begin                    if((M[lista,col]=1) and (((M[lista+2,col]=2) and (M[lista+1,col]=1))                    or((M[lista-2,col]=2) and (M[lista-1,col]=1))                    or((M[lista,col+2]=2) and (M[lista,col+1]=1))                    or((M[lista,col-2]=2) and (M[lista,col-1]=1))))then                    podejogar:=podejogar+1;                end;            end;    if(podejogar=0)then        Begin            writeln('Sabe de nada, inocente... Game Over');            writeln('voce deseja jogar novamente? Digite 1 para sim e 2 para nao!');            readln(resposta);            if(resposta=1)then                inicio            else                 readkey;                exit;        end;                                               if(a=10)then                Begin                    writeln('Parabens, voce terminou o jogo!');                    writeln('Deseja jogar novamente?');                    writeln('Digite 1 para sim ou 2 para nao');                    readln(resposta);                    if(resposta=1)then                        inicio;                end;        end;             End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá restaum.

Não sei se ainda precisa de ajudar, mas vai ai algumas dicas:

 

1) nunca use read, somente readln

Existe algumas diferenças entre o read e o readln. Não vem ao caso explicar agora... mas de um modo geral, sempre* deve ser usado o readln, pois em alguns casos, o read pode dar problemas!!!

 

Ex.:

read(l);

Mude para:

readln(l);

2) em relação ao erro de posição

No seu array, está estipulado de que as cordenadas vão de 1 a 5, se você acessar um valor que não está nela, pode dar erro mesmo... veja por exemplo esse trecho:

if ((direcao=1) and (M[l-1,c]=1) and (M[l-2,c]=2))then

Você está usando um l-1 e pior, um l-2, ou seja, se l for menor ou igual a 2, vai dar erro mesmo!!! (já que l-2 = 2-2 = 0, e 0 não é uma coordenada válida).

 

Daí, você precisa ou ajustar a lógica, ou "proteger" antes de verificar (ou modificar) essas coordenadas... algo do tipo:

if  not (l<=2) then

e/ou

if (l=1) then

e/ou

if (i=2) the

O mesmo deve ser verificado caso tenha algo para valores após as coordenadas...

 

***

 

Por ai vai...

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...