Ir ao conteúdo
  • Cadastre-se

Problemas com SNAKE no Pascalzim


Posts recomendados

Ola! Sou um intermediario no pascal, e necssito muito da ajuda de alguém no snake do pascal..

Não estou pedindo codigo nenhuma, por que ja tenho ele quase pronto, o meu problema é que não consigo fazer com que quando a cobra bata na comida, ela va para a parte de tras do corpo dela, ao contrario disso ela vai para o lado...

 

Vou disponibilizar o codigo caso queiram compilar para testar! Agradeço desde já..

Program Cobra;const emcima = 2; embaixo = 24; direita = 74; esquerda = 6; varx,y,vidas,x2,y2,pontos,CorpoX,CorpoY,i,contador :integer;dir,esq,baixo,cima:boolean;cobra,corpo:string;                      procedure paredes;var p,p2:integer;begin for p := 25 to 55  do begin    gotoxy (p,1) ; Write (#1) ;    end ;gotoxy (6,2);writeln('*********************************************************************');for p := 3 to 24 dobegingotoxy(6,p);writeln('*');end;for p2 := 3 to 24 dobegingotoxy(74,p2);writeln('*') ;gotoxy (6,24);writeln('*********************************************************************');end;end ;Beginrandomize;x:=40;y:=13;vidas := 3;pontos := 0;x2 := random(73);y2 := random(23);cobra := #1;corpo := '*';CorpoX := 41;CorpoY := 13;repeatgotoxy(15,1);writeln('Vidas: ',vidas);gotoxy(60,1);writeln('Pontos: ',pontos);paredes;if (keypressed) thenbeginbaixo := false;cima := false;esq := false;dir := false;end;while keypressed do // Enquanto uma tecla for pressionada façacase readkey of // Caso uma tecla tal seja...#72: cima := true; // cima#77: dir := true; // direita#75: esq := true; // esquerda#80: baixo := true; // baixoend;if (cima = true) thenbeginbaixo := false;dir := false;esq := false;y := y -1;CorpoY := y + 1;CorpoX := X;         end;if (dir = true) thenbeginbaixo := false;cima := false;esq := false;x := x +1;CorpoX := X -1;CorpoY := y ;     end;if (esq = true) thenbegincima := false;baixo := false;dir := false;x := x -1;CorpoX := X +1;CorpoY := y ;      end;if (baixo = true) thenbeginesq := false;dir := false;cima := false;y := y +1;CorpoY := y-1;CorpoX := X;  end;if (x = x2) and (y = y2) then // Se colidir com a comida  begin    pontos := pontos +1;   x2 := random(73);   y2 := random(23);      insert ('*',corpo,corpoX+1) ;   end ; if (x2 <= esquerda) or (x2 >= direita) or (y2 <= emcima) or (y2 >= embaixo) then // Quando a comida é randomizada fora da tela ela é randomizada de novobeginx2 := random(73);y2 := random(23);end;if (x = direita) or (x = esquerda) or (y = emcima) or (y = embaixo) then // Se colidir com a parede  begin   vidas := vidas -1;   x := 40;   y := 13;   end;   gotoxy(x2,y2); //Comida   writeln(#9);                           gotoxy(x,y);   write(cobra);   gotoxy(CorpoX,CorpoY);   write(corpo);   delay(100);            clrscr;      until (vidas = 0);      End.

 

 

Deixo em anxo uma foto do problema :D

post-717330-0-05031000-1394977112_thumb.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
  • Membro VIP

Olá.

 

Antes de qualquer coisa, já queria dizer que o joguinho está bem legal... parabéns pelo belo trabalho.. :)

 

Vamos lá.. vou tentar resumir como entendo o funcionamento.

 

Pelo que entendi e conheço do jogo, o rabo da cobra não se trata de algo fixo (no sentido de desenhado), mas sim de algo relacionado ao tamanho, ou seja, baseado em QUANTIDADE (valor)... Cada vez que a cobra come um alimento, aumenta "um quadrado" (na quantidade)...

 

EM RELAÇÂO A ANDAR

Veja, analisando aqui com meus botões, imaginei que poderia usar, para o corpo, uma "lista de posições"... À medida que ia andando, as coordenadas da cabeça seria inserida no início da lista (será a primeira posição), e ao mesmo tempo, já removia a última posição desta lista (a penúltima passa a ser a última).

 

EM RELAÇÃO A COMER

Simplesmente inserirá a nova posição da cabeça no topo da lista (como se tivesse andando), mas NÃO IRÁ REMOVER A ÚLTIMA POSIÇÃO, desta forma, o corpo crescerá em um...

 

DESENHAR A COBRA

Basta inserir a cabeça na coordenada que tem na primeira posição da lista, e a as restantes inserir o símbolo que representa o corpo...

 

***

 

Obs.: Veja, com esse “mapa de posições”, você já ponde incluir a “colisão com o próprio corpo”... mas deixa isso para depois.

Obs. 2:  Um problema secundário seria justamente gerenciar essa lista, pois é preciso "inserir no início" e "remover o último" e creio que isso por si só não é uma tarefa trivial... (caso não queria ou não consiga fazer, existem "listas" prontas na net).

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...
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...