Ir ao conteúdo
  • Cadastre-se
restaum

Jogo Resta Um em Pascal

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×