Ir para o conteúdo
Azoto

Snake em pascal zim

Mensagens Recomendadas

Azoto    0
Azoto

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_4ndr3    0
_4ndr3

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_4ndr3    0
_4ndr3

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

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...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bsntuga    0
bsntuga

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Azoto    0
Azoto

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  :(

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

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... :)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Azoto    0
Azoto

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Azoto    0
Azoto

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................

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Gooden    0
Gooden

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GoncaloMendes    0
GoncaloMendes

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
celsoreis    1
celsoreis

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".

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passarito    56
passarito

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!!!!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
I-NOZex    147
I-NOZex

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
passarito    56
passarito

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
GRSa    3
GRSa

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
thoga31    611
thoga31

@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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade