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

Azoto

Snake em pascal zim

27 mensagens neste tópico

Boas pessoal. Eu para este periodo na escola tenhu de fazer a snake em PascalZim. Eu ate sou razuavel a programar mas não estou mesmo a ver como a fasso. se alguem me puder ajudar agradecia obrigado................e gostaria e agradecia uma resposta breve. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Azoto, assim ninguém ajuda-te sem mais nem menos, dá a entender que queiras que façam por ti. Sugiro que tentes começar analisar o problema apresentar quais os "entraves" e pedir ajuda nessas dificuldades específicas.

Cumprimentos,

André Freitas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens de detalhar tudo o que precisas, as regras do jogo etc, depois pensas o que precisaras para o fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vala pessoal por favor ajudem me la eu ja tentei de todas as formas mas não deu. Eu presiso mesmo da vossa ajuda por favor  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Lá estás com a mesma conversa xD. Tu achas que alguém ficará disponível só para ti mais do que uma hora a fazer tudo por ti?

Desculpa lá mas apelo ao senso comum.

Cumprimentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vala pessoal por favor ajudem me la eu ja tentei de todas as formas mas não deu. Eu presiso mesmo da vossa ajuda por favor  :dontgetit:

Continuar a pedir só vai fazer com que o pessoal te ignore...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Encontrei esta source, estuda-a

program snake; (* email address: nerkiator@hotmail.com *)

uses crt,graph;

const passo=19;

var coor:array[1..800,1..2]of integer;
    n:array[1..9]of char;
    
cont,driver,mode,i,j,x,y,xc,yc,totale,ultx,ulty,punteggio,primato,vel:integer;
    a,direzione,risp,tasto:char;
    oldscore,score,s:string;
    occupato,infrociamento,mangia:boolean;

procedure logo;
begin
detectgraph(driver,mode);initgraph(driver,mode,'c:\tp\bgi');
rectangle(0,0,639,479);
settextstyle(0,0,11);
outtextxy(100,3,'Snake');
settextstyle(0,0,0);
outtextxy(300,100,'v1.0');
outtextxy(275,115,'programming:');
rectangle(190,180,430,340);
bar(212,202,312,214);bar(212,202,224,272);bar(300,202,312,240);
bar(300,228,360,240);
circle(218,300,5);
outtextxy(300,370,'Keys:');
outtextxy(280,390,'Numpad 8-up');
outtextxy(280,400,'Numpad 2-down');
outtextxy(280,410,'Numpad 4-left');
outtextxy(280,420,'Numpad 6-right');
outtextxy(290,465,'Hit Enter');
(**)
n[1]:='N';
n[2]:='e';
n[3]:='r';
n[4]:='k';
n[5]:='i';
n[6]:='a';
n[7]:='t';
n[8]:='o';
n[9]:='r';
s:='Nerkiator';
repeat
if not keypressed then

for i:=1 to 9 do
begin
for x:=637 downto 265+i*8  do
begin
if not keypressed then
outtextxy(x,140,n[i]);delay(4);setcolor(black);outtextxy(x,140,n[i]);
setcolor(red)
end;
if not keypressed then
outtextxy(265+i*8,140,n[i])
end; if not keypressed then delay(1500);
if not keypressed then
for j:=273 downto 2 do
begin
if not keypressed then
outtextxy(j,140,s);setcolor(black);outtextxy(j,140,s);setcolor(red)
end
until keypressed;
(**)
setcolor(white);
end;

procedure campo;
begin
rectangle(8,8,(passo*30)-8,(passo*24)-8);
outtextxy(580,80,'Score:')
end;

procedure segmento(x,y:integer);
begin
setcolor(black);
rectangle(x-9,y-9,x+9,y+9);
setfillstyle(12,white);
bar(x-8,y-8,x+8,y+8);
setcolor(white)
end;

procedure cancsegm(x,y:integer);
begin
setfillstyle(1,black);
bar(x-9,y-9,x+9,y+9);
setfillstyle(1,white)
end;

procedure cibo(x,y:integer);
begin
x:=x*passo;
y:=y*passo;
circle(x,y,9)
end;

procedure suono;
var i:integer;
begin
for i:=1 to 30000 do
sound(100);
nosound
end;

procedure gnam;
var i:integer;
begin
for i:=1 to 5000 do
sound(1100);
nosound
end;

function punti(x:integer):string;
var
  s:string[10];
begin
  str(x,s);
  punti:=s;
end;


procedure gioco;
begin
cleardevice;
campo;
punteggio:=0;
oldscore:=punti(punteggio);
score:=oldscore;
x:=passo*15;y:=passo*23;
direzione:='6';
tasto:='6';
totale:=8;
infrociamento:=false;
mangia:=false;
coor[1,1]:=x;coor[1,2]:=y;
occupato:=false;
for i:=2 to totale do
begin
coor[i,1]:=coor[i-1,1]-passo;coor[i,2]:=y
end;
xc:=15;yc:=12;
cibo(xc,yc);
repeat
setcolor(black);
outtextxy(580,100,oldscore);
setcolor(white);
outtextxy(580,100,score);
for i:=1 to totale do
segmento(coor[i,1],coor[i,2]);
delay(270);
cancsegm(coor[totale,1],coor[totale,2]);
delay(270);
if (x=xc*passo) and (y=yc*passo) then mangia:=true;
if mangia then
begin
punteggio:=punteggio+9;
score:=punti(punteggio);
oldscore:=punti(punteggio-9);
totale:=totale+1;
coor[totale,1]:=ultx;coor[totale,2]:=ulty;
gnam;
repeat
occupato:=false;
xc:=random(29)+1;yc:=random(23)+1;
for i:=1 to totale do
if(coor[i,1]=xc*passo)and(coor[i,2]=yc*passo)then occupato:=true
until not occupato;
cibo(xc,yc);
mangia:=false
end;
if keypressed then tasto:=readkey;
case tasto of
'8':if direzione<>'5' then direzione:='8';
'2':if direzione<>'8' then direzione:='5';
'6':if direzione<>'4' then direzione:='6';
'4':if direzione<>'6' then direzione:='4'
end;
case direzione of
'8': y:=y-passo;
'5': y:=y+passo;
'6': x:=x+passo;
'4': x:=x-passo
end;
ultx:=coor[totale,1];ulty:=coor[totale,2];
for i:=totale downto 2 do
begin
coor[i,1]:=coor[i-1,1];
coor[i,2]:=coor[i-1,2]
end;
coor[1,1]:=x;coor[1,2]:=y;
for i:=2 to totale do
begin
if (coor[i,1]=x) and (coor[i,2]=y) then infrociamento:=true
end
until (x-passo<0) or (y-passo<0) or (x+passo=passo*31) or (y+passo=passo*25) 
or infrociamento;
suono
end;

procedure programma;
begin
logo;
textcolor(black);
repeat
gioco;
cleardevice;
outtextxy(280,240,'Score: ');outtextxy(330,240,punti(punteggio));
readln;
outtextxy(265,270,'New game?(Y/N)');risp:=readkey
until (risp='n') or (risp='N')
end;

begin (*p.p.*)
programma
end.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tambem ja tinha encontrado isso mas isso não é pascalzim. Isso e o pascal normal e como eu n sei os comandos desse pascal e muito dificil para mim perceber esse programa. eu ja vi ke n me vao ajudar assim por isso eu vou tentar perceber o ke kada comando faz e depois digovos alguma coisa. Até mais logo  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tambem ja tinha encontrado isso mas isso não é pascalzim. Isso e o pascal normal e como eu n sei os comandos desse pascal e muito dificil para mim perceber esse programa. eu ja vi ke n me vao ajudar assim por isso eu vou tentar perceber o ke kada comando faz e depois digovos alguma coisa. Até mais logo  :(

Ja viste que não te vão ajudar ou não te vão fazer o trabalho? Tens cá uma lata pa... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lata? omg eu so kero e tentar perceber o ke cada comando faz e ke eu não pesco nada disto meu...... So pascal zim porque e o ke tou a dar na escola. Axo ke não custa nada ajudar o pessoal mas ok. Eu n kero ke fassam o trabalho por mim eu no inicio pedi pois pensava ke ja tinham feito algum ou assim e entao ajudavam-me. mas eu vi agoera akele programa mas como não percebo os comandos não posso fazer em pascal zim percebes? :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal eu não consuigo perceber esse codigo................ Eu ja tive a ver e nao percebi xP ja tive a tentar umas coisinhas e ate agora so consuegui meter a cobra a andar com as teclas mais nd................

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

agora mete a fruta para a cobra comer, e sempre que a cobra passar por la, ele desaparece, adiciona outro ponto aleatorio, e da bonus

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal não estou a consueguir vala n mne podem ajudar???????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Porque não começas por meter aqui o código que já tens e de seguida Dizeres o que tas a tentar fazer e onde te esta a dar erro?????? Axo o melhor a fazer

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, eu já fiz um jogo desses e não tem nada de dificil, não te vou dar o código (para não te tirar o prazer da descoberta  B)) mas lembra-te do uso de GotoXY's com arrays bidimensionais do tipo byte

Espero que chegue para chegares la  ;)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguém me pode dizer como se mete as letras a andar como as que estão no programa da snake?

As que estão a rodar dizem "Nerkiator".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ALGUEM ME PODE DIZER COMO SE METE AS LETRAS A ANDAR COMO AS QUE ESTAO NO PROGRAMA DA SNAKE ??????????

AS QUE ESTAO A RODAR DIZEM "Nerkiator"!!!!!!!

È URGENTE!

Mas que raio...?

Em primeiro lugar, o uso de maiúsculas numa frase indica gritos, e aqui apreciamos a boa educação.

Mais, não vale a pena usares negritos e cores garridas.

De seguida, não há dúvidas mais ou menos urgentes - daí não necessitares deste espalhafato, só estás a afastar o pessoal.

Se tens dúvidas, coloca-as como deve ser.

Editado por thoga31
1

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ALGUEM ME PODE DIZER COMO SE METE AS LETRAS A ANDAR COMO AS QUE ESTAO NO PROGRAMA DA SNAKE ??????????

AS QUE ESTAO A RODAR DIZEM "Nerkiator"!!!!!!!

È URGENTE!

O QUÊ? - FALA MAIS ALTO QUE EU NÃO TE OUÇO.... É A M€RD@ DO DJ, TEM A MANIA DE PÔR A MUSICA EM ALTOS BERROS!!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

code or didn't happen :cheesygrin:

(explica a tua duvida como deve ser, e mete o codigo que ja tens, num topico criado para a tua duvida, ou seja, cria um novo ;) )

Editado por I-NOZex
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já emendei peço desculpa....

Não queria causar problemas a ninguém....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já emendei peço desculpa....

Não queria causar problemas a ninguém....

Bem, agora que já cá estamos fora da discoteca, vamos lá falar....

Alguém me pode dizer como se mete as letras a andar como as que estão no programa da snake?

As que estão a rodar dizem "Nerkiator".

Bem, aquilo é o ex-líbris do Pascal.... é o modo gráfico do pascal! Adeus modo texto, olá modo gráfico!

Aqui, alguns exemplos de programas feitos em modo gráfico: http://www.portugal-a-programar.pt/topic/54702-quantas-cores-tem-o-modo-grafico-em-pascal/page__st__60

1º Sabes alguma coisa sobre trabalhar com o modo gráfico do Pascal?

2º Não sei se nestes novos pascais (Free Pascal, Pascal Zim) isto funciona

3º Do Windows Vista para cima, esquece, que os SO's lembraram-se de tomar o controlo das aplicações da linha de comandos.

Portanto já são muitos pontos a jogar contra este tipo de programação que era um espetáculo, no entanto se ainda quizeres ajuda, chuta aí as tuas dúvidas em concreto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O Free Pascal trabalha bem com o modo gráfico, mas não tem o suporte ou as funcionalidade que tinha nos anos 80 e 90. Perderam-se imensas coisas pois a actual unit graph não é a implementação antiga, e há coisas que estão apenas instanciadas por motivos de retrocompatibilidade.

Editado por thoga31
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso rodou no PascalZim (pelo menos na versão 5.2.4). =)

Se vira para explicar o código ao teu professor, no mínimo você vai ter que estudar isso um pouco.

Qualquer dúvida...

(não) me pergunte. :thumbsup:

Program Jogo_Snake;

 Uses Crt;

 Const
POSICAO_HORIZONTAL = 16;
POSICAO_VERTICAL = 5;
DIMENSAO_HORIZONTAL = 50;
DIMENSAO_VERTICAL = 15;
AREA_ESPACO = DIMENSAO_HORIZONTAL * DIMENSAO_VERTICAL;

COR_AREA = BLUE;
COR_SNAKE = YELLOW;
COR_OBSTACULO = LIGHTRED;

CARACTERE_SNAKE = #219;
CARACTERE_OBSTACULO = #219;
CARACTERE_PADRAO = #32;

TAXA_CRESCIMENTO = 4;

 Type
T_Posicao = record
			  horizontal : integer;
			  vertical : integer;
			end;
 Var
snake : record
		  segmento : array[1..AREA_ESPACO] of T_Posicao;
		  quantSegmento : integer;
		  dimensao : integer;
		  direcao : char;
		  atraso : integer;
		end;

movimentoLegal : boolean;
posicaoComida : T_Posicao;

 Procedure DesenhaCaractere (caractere : char;
						  posH, posV,
						  cor: integer);
 Begin
gotoxy(POSICAO_HORIZONTAL + posH - 1,
	   POSICAO_VERTICAL + posV - 1);
textcolor(cor);
textbackground(COR_AREA);
write(caractere);
 End;

 Function CoincideCorpo (refHorizontal,
					  refVertical : integer) : Boolean;
Var
  cont : integer;
 Begin
for cont := 1 to snake.quantSegmento do
begin
  if (snake.segmento[cont].horizontal = refHorizontal) and
	 (snake.segmento[cont].vertical = refVertical) then
  begin
	CoincideCorpo := true;
	Exit;
  end;
end;
CoincideCorpo := false;
 End;

 Function CriaComida : T_Posicao;
Var
  posicaoLivre : array[1..AREA_ESPACO] of T_Posicao;
  quantidadePosicaoLivre : integer;
  contH, contV : integer;
  posicaoSorteada : integer;
 Begin
quantidadePosicaoLivre := 0;
for contH := 1 to DIMENSAO_HORIZONTAL do
begin
  for contV := 2 to DIMENSAO_VERTICAL do
  begin

	if not(CoincideCorpo(contH, contV)) then
	begin
	  inc(quantidadePosicaoLivre);
	  posicaoLivre[quantidadePosicaoLivre].horizontal := contH;
	  posicaoLivre[quantidadePosicaoLivre].vertical := contV;
	end;

  end;
end;
randomize;
posicaoSorteada := random(quantidadePosicaoLivre + 1);
DesenhaCaractere(CARACTERE_SNAKE,
				 posicaoLivre[posicaoSorteada].horizontal,
				 posicaoLivre[posicaoSorteada].vertical,
				 COR_SNAKE);
CriaComida := posicaoLivre[posicaoSorteada];
 End;

 Function MoveSnake : Boolean;
Var
  cont : integer;
  posicaoCandidata : T_Posicao;

Function Colisao(refHorizontal,
				 refVertical : integer) : Boolean;
Begin

  if (refHorizontal = 0) or
	 (refHorizontal > DIMENSAO_HORIZONTAL) or
	 (refVertical = 0) or
	 (refVertical > DIMENSAO_VERTICAL) or
	 CoincideCorpo(refHorizontal, refVertical) then
  begin
	Colisao := true;
  end else
  begin
	Colisao := false;
  end;
End;

 Begin

posicaoCandidata := snake.segmento[1];

case snake.direcao of
  'N' : dec(posicaoCandidata.vertical);
  'S' : inc(posicaoCandidata.vertical);
  'L' : inc(posicaoCandidata.horizontal);
  'O' : dec(posicaoCandidata.horizontal);
end;

if not(Colisao(posicaoCandidata.horizontal,
			   posicaoCandidata.vertical)) then
begin

  if snake.quantSegmento < snake.dimensao then
  begin
	inc(snake.quantSegmento);
  end else
  begin
	DesenhaCaractere(CARACTERE_PADRAO,
					 snake.segmento[snake.quantSegmento].horizontal,
					 snake.segmento[snake.quantSegmento].vertical,
					 COR_AREA);
  end;

  DesenhaCaractere(CARACTERE_SNAKE,
				   posicaoCandidata.horizontal,
				   posicaoCandidata.vertical,
				   COR_SNAKE);

  for cont := snake.quantSegmento downto 1 + 1 do
  begin
	snake.segmento[cont] := snake.segmento[cont - 1];
  end;

  snake.segmento[1] := posicaoCandidata;

  if (snake.segmento[1].horizontal = posicaoComida.horizontal) and
	 (snake.segmento[1].vertical = posicaoComida.vertical) and
	 not(snake.quantSegmento = AREA_ESPACO) then
  begin
	posicaoComida := CriaComida;
	snake.dimensao := snake.dimensao + TAXA_CRESCIMENTO;
  end;

  MoveSnake := true;
end else
begin
  MoveSnake := false;
end;

 End;

 Procedure IniciaRodada;
Var
  posInicialH, posInicialV : integer;
  cont : integer;
 Begin

textbackground(COR_AREA);
clrscr;

{DESENHA AS PAREDES}
for cont := 1 to DIMENSAO_HORIZONTAL + 2 do
begin
  textcolor(COR_OBSTACULO);
  textbackground(COR_AREA);
  gotoxy(POSICAO_HORIZONTAL - 2 + cont, POSICAO_VERTICAL - 1);
  write(CARACTERE_OBSTACULO);
  gotoxy(POSICAO_HORIZONTAL - 2 + cont, POSICAO_VERTICAL + DIMENSAO_VERTICAL);
  write(CARACTERE_OBSTACULO);
end;
for cont := 1 to DIMENSAO_VERTICAL + 2 do
begin
  textcolor(COR_OBSTACULO);
  textbackground(COR_AREA);
  gotoxy(POSICAO_HORIZONTAL - 1, POSICAO_VERTICAL - 2 + cont);
  write(CARACTERE_OBSTACULO);
  gotoxy(POSICAO_HORIZONTAL + DIMENSAO_HORIZONTAL, POSICAO_VERTICAL - 2 + cont);
  write(CARACTERE_OBSTACULO);
end;

posInicialH := DIMENSAO_HORIZONTAL div 2;
posInicialV := DIMENSAO_VERTICAL div 2;

snake.quantSegmento := 1;
snake.dimensao := TAXA_CRESCIMENTO;

snake.direcao := 'L';

snake.segmento[1].horizontal := posInicialH;
snake.segmento[1].vertical := posInicialV;

DesenhaCaractere(CARACTERE_SNAKE,
				 snake.segmento[1].horizontal,
				 snake.segmento[1].vertical,
				 COR_SNAKE);

movimentoLegal := true;

posicaoComida := CriaComida;

gotoxy(1,1);
 End;

Begin
 IniciaRodada;
 snake.atraso := 60;
 CursorOff;
 repeat
delay(snake.atraso);

if (keypressed) then
begin
  case upcase(readkey) of
	 #0: begin
		   case upcase(readkey) of
			 #75: if snake.direcao <> 'L' then snake.direcao := 'O'; //ESQUERDA
			 #77: if snake.direcao <> 'O' then snake.direcao := 'L'; //DIREITA
			 #80: if snake.direcao <> 'N' then snake.direcao := 'S'; //BAIXO
			 #72: if snake.direcao <> 'S' then snake.direcao := 'N'; //CIMA
		   end;
		 end;
	#27: begin
		   Exit;
		 end;
	'R': begin
		   IniciaRodada;
		 end;
	#13: begin
		   readkey;
		 end;
  end;
end;

movimentoLegal := MoveSnake;
textcolor(WHITE); textbackground(COR_AREA);
gotoxy(POSICAO_HORIZONTAL, POSICAO_VERTICAL - 2);
write((100 * snake.quantSegmento) div AREA_ESPACO, '%');

if snake.quantSegmento = AREA_ESPACO then
begin
  textcolor(WHITE); textbackground(COR_AREA);
  gotoxy(POSICAO_HORIZONTAL, POSICAO_VERTICAL + DIMENSAO_VERTICAL + 1);
  write('JOGO ZERADO ');
  readkey;
  IniciaRodada;
end else
begin
  if not (movimentoLegal) then
  begin
	delay(1500);
	IniciaRodada;
  end;
end;

 until (false);

End.

Editado por GRSa
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@GRSa, tens noção que no P@P não se dão trabalhos feitos, mas ajuda-se os membros a encontrar a solução das suas dúvidas. Ou não tens?

Não vens cá há séculos, e agora que voltaste foi para dar um trabalho feito? Nem no Natal nós oferecemos trabalho feito.

Cumprimentos.

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