Ir ao conteúdo
  • Cadastre-se

ajuda em pascal borda


Alpha Fenix

Posts recomendados

gente tem como você me ajudarem eu to tentando fazer um joguinho bem paia em pascal mas eu to tendo uns erros, pois não consigo que o personagem não saia das bordas eu ate dei meio que um jeito mas não ta funcionando bem o codigo que eu tenho e esse aqui:


uses crt;
var
tc :char;
a,b,c,d:integer;
bx, by :integer;
{================================================================================================================
=============================================bordas==============================================================
=================================================================================================================}
procedure borda;
begin
textcolor(lightred);
{cima e baixo}
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;
{direita e esquerda}
repeat
by:=by+1;
gotoxy(1,by);
write(#177);
gotoxy(80,by);
write(#177);

until by=25;
end;
{=================bordaVF==================}
Function bordavf :boolean ;
Begin
if (a <=2) or (a >= 79) or (b <=2) or (b >= 24) then
bordavf := true
else
bordavf := false ;
End;
{=============================================================================================
=============procedimentos para desenhar e redesnehar o objeto================================
==============================================================================================}

procedure UP;
begin
gotoxy(a,B);
write(' ');
if not bordavf then
dec(b)else inc(B);
gotoxy(a,B);
writeln(#219);

end;
procedure left;
begin
gotoxy(a,B);
write(' ');
if not bordavf then
dec(a) else inc(a);
gotoxy(a,B);
writeln(#219);
end;
procedure down;
begin
gotoxy(a,B);
write(' ');
if not bordavf then
inc(B) else dec(B);
gotoxy(a,B);
writeln(#219);

end;
procedure right;
begin
gotoxy(a,B);
write(' ');
if not bordavf then
inc(a) else dec(a);
gotoxy(a,B);
writeln(#219);
end;
{====================================================================================================================
=============================================inicio do programa======================================================
=====================================================================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
begin
begin
a:=3;
b:=3;
end;
{++++++++++limpa e escreve as bordas+++++++++++++++}
clrscr;
borda;
{++++++++++++++++detecta as teclas++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72: up;
75: left;
80: down;
77: right;
end;
end;
end.
Program testando;

desde ja eu agradeço a todos!

Link para o comentário
Compartilhar em outros sites

Escolha um dos códigos que seguem:

1º) Estando na borda e apertando em direção à "parede", volta.


uses crt;
var
tc :char;
a,b,c,d:integer;
bx, by :integer;
{================================================================================================================
=============================================bordas==============================================================
=================================================================================================================}
procedure borda;
begin
textcolor(lightred);
{cima e baixo}
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;
{direita e esquerda}
repeat
by:=by+1;
gotoxy(1,by);
write(#177);
gotoxy(80,by);
write(#177);
until by=25;
gotoxy(1,1)
end;
{=================bordas==================}
Function bordaUP :boolean ;
Begin
if b = 02 then
bordaUP := true
else
bordaUP := false ;
End;

Function bordaDOWN :boolean ;
Begin
if b = 24 then
bordaDOWN := true
else
bordaDOWN := false ;
End;

Function bordaLEFT :boolean ;
Begin
if a = 2 then
bordaLEFT := true
else
bordaLEFT := false ;
End;

Function bordaRIGHT :boolean ;
Begin
if a = 79 then
bordaRIGHT := true
else
bordaRIGHT := false ;
End;
{=============================================================================================
=============procedimentos para desenhar e redesnehar o objeto================================
==============================================================================================}

procedure UP;
begin
gotoxy(a,B);
write(' ');
if not bordaUP then
dec(B) else inc(B);
gotoxy(a,B);
writeln(#219);

end;
procedure left;
begin
gotoxy(a,B);
write(' ');
if not bordaLEFT then
dec(a) else inc(a);
gotoxy(a,B);
writeln(#219);
end;
procedure down;
begin
gotoxy(a,B);
write(' ');
if not bordaDOWN then
inc(B) else dec(B);
gotoxy(a,B);
writeln(#219);

end;
procedure right;
begin
gotoxy(a,B);
write(' ');
if not bordaRIGHT then
inc(a) else dec(a);
gotoxy(a,B);
writeln(#219);
end;
{====================================================================================================================
=============================================inicio do programa======================================================
=====================================================================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
begin
begin
a:=3;
b:=3;
end;
{++++++++++limpa e escreve as bordas+++++++++++++++}
clrscr;
borda;
{++++++++++++++++detecta as teclas++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72: up;
75: left;
80: down;
77: right;
end;
end;
end.
Program testando;

2º) Estando na borda e apertando em direção à "parede", ignora.


uses crt;
var
tc :char;
a,b,c,d:integer;
bx, by :integer;
{================================================================================================================
=============================================bordas==============================================================
=================================================================================================================}
procedure borda;
begin
textcolor(lightred);
{cima e baixo}
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;
{direita e esquerda}
repeat
by:=by+1;
gotoxy(1,by);
write(#177);
gotoxy(80,by);
write(#177);
until by=25;
gotoxy(1,1)
end;
{=================bordas==================}
Function bordaUP :boolean ;
Begin
if b = 02 then
bordaUP := true
else
bordaUP := false ;
End;

Function bordaDOWN :boolean ;
Begin
if b = 24 then
bordaDOWN := true
else
bordaDOWN := false ;
End;

Function bordaLEFT :boolean ;
Begin
if a = 2 then
bordaLEFT := true
else
bordaLEFT := false ;
End;

Function bordaRIGHT :boolean ;
Begin
if a = 79 then
bordaRIGHT := true
else
bordaRIGHT := false ;
End;
{=============================================================================================
=============procedimentos para desenhar e redesnehar o objeto================================
==============================================================================================}

procedure UP;
begin
gotoxy(a,B);
write(' ');
if not bordaUP then
dec(B){ else inc(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure left;
begin
gotoxy(a,B);
write(' ');
if not bordaLEFT then
dec(a){ else inc(a)};
gotoxy(a,B);
writeln(#219);
end;
procedure down;
begin
gotoxy(a,B);
write(' ');
if not bordaDOWN then
inc(B){ else dec(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure right;
begin
gotoxy(a,B);
write(' ');
if not bordaRIGHT then
inc(a){ else dec(a)};
gotoxy(a,B);
writeln(#219);
end;
{====================================================================================================================
=============================================inicio do programa======================================================
=====================================================================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
begin
begin
a:=3;
b:=3;
end;
{++++++++++limpa e escreve as bordas+++++++++++++++}
clrscr;
borda;
{++++++++++++++++detecta as teclas++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72: up;
75: left;
80: down;
77: right;
end;
end;
end.
Program testando;

Sugestão: faça com que o programa funcione pelo teclado numérico.

Troque o trecho


case ord(tc) of
72: up;
75: left;
80: down;
77: right;
end;

por


case ord(tc) of
72,56: up;
75,52: left;
80,50: down;
77,54: right;
55: begin up; left; end;
57: begin up; right; end;
49: begin down; left; end;
51: begin down; right; end;
end;

(Funciona nas diagonais!)

Serve para qualquer código acima.

Aguardando resposta...

Link para o comentário
Compartilhar em outros sites

Cara valeu

muito obrigado isso mesmo qui eu tava querendo fazer

:D valeu

Mensagens unidas pela moderação. Não poste mensagens seguidas em menos de 24h. Utilize o botão Editar da mensagem anterior.

eu dei uma alterada no codigo e de errado di novo so qui foi em outra coisa(na comida que eu coloquei).

ele ta parecido com o jogo da cobrinha mas não vida, pontos esse tipo de coisa so a comida mas ta dando errado porque depois que ele "come" a primeira não aparece outra.


uses crt;
var
tc :char;
a, b :integer;
bx, by :integer;
cx, cy :integer;
{================================================================================================================
=============================================bordas==============================================================
=================================================================================================================}
procedure borda;
begin
textcolor(blue + yellow);
{cima e baixo}
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;
{direita e esquerda}
repeat
by:=by+1;
gotoxy(1,by);
write(#177);
gotoxy(80,by);
write(#177);
until by=25;
gotoxy(1,1)
end;
{=================bordas==================}
Function bordaUP :boolean ;
Begin
if b = 02 then
bordaUP := true
else
bordaUP := false ;
End;

Function bordaDOWN :boolean ;
Begin
if b = 24 then
bordaDOWN := true
else
bordaDOWN := false ;
End;

Function bordaLEFT :boolean ;
Begin
if a = 2 then
bordaLEFT := true
else
bordaLEFT := false ;
End;

Function bordaRIGHT :boolean ;
Begin
if a = 79 then
bordaRIGHT := true
else
bordaRIGHT := false ;
End;
{=============================================================================================
=============procedimentos para desenhar e redesnehar o objeto================================
==============================================================================================}

procedure UP;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaUP then
dec(B){ else inc(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure left;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaLEFT then
dec(a){ else inc(a)};
gotoxy(a,B);
writeln(#219);
end;
procedure down;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaDOWN then
inc(B){ else dec(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure right;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaRIGHT then
inc(a){ else dec(a)};
gotoxy(a,B);
writeln(#219);
end;
{++++++++++++++++++comida_NOVA+++++++++++++++++++++++++++++++++}
function comida_nova:boolean;
begin
textcolor(lightblue);
if (cx=a)and(cy=B) then
comida_nova:=true
else
comida_nova:=false;
end;
procedure comida;
begin
begin
while comida_nova do
begin
cx:=random(75);
cy:=random(20);
gotoxy(cx+2,cy+2);
write(#15);
end;
end;
begin
cx:=random(75);
cy:=random(20);
gotoxy(cx+2,cy+2);
write(#15);
end;
end;

{====================================================================================================================
=============================================inicio do programa======================================================
=====================================================================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
begin
begin
a:=2;
b:=2;
end;
{++++++++++limpa e executa os procedimentos+++++++++++++++}
clrscr;
borda;
comida;
{+++++++++++++++++++++++++++detecta as teclas+++++++++++++++++++++++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72,56: up;
75,52: left;
80,50: down;
77,54: right;
55: begin up; left; end;
57: begin up; right; end;
49: begin down; left; end;
51: begin down; right; end;
end;
end;

end.[/SPOILER]

Program testando;

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Cara valeu

muito obrigado isso mesmo qui eu tava querendo fazer

:D valeu

Mensagens unidas pela moderação. Não poste mensagens seguidas em menos de 24h. Utilize o botão Editar da mensagem anterior.

eu dei uma alterada no codigo e de errado di novo so qui foi em outra coisa(na comida que eu coloquei).

ele ta parecido com o jogo da cobrinha mas não vida, pontos esse tipo de coisa so a comida mas ta dando errado porque depois que ele "come" a primeira não aparece outra.


uses crt;
var
tc :char;
a, b :integer;
bx, by :integer;
cx, cy :integer;
{================================================================================================================
=============================================bordas==============================================================
=================================================================================================================}
procedure borda;
begin
textcolor(blue + yellow);
{cima e baixo}
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;
{direita e esquerda}
repeat
by:=by+1;
gotoxy(1,by);
write(#177);
gotoxy(80,by);
write(#177);
until by=25;
gotoxy(1,1)
end;
{=================bordas==================}
Function bordaUP :boolean ;
Begin
if b = 02 then
bordaUP := true
else
bordaUP := false ;
End;

Function bordaDOWN :boolean ;
Begin
if b = 24 then
bordaDOWN := true
else
bordaDOWN := false ;
End;

Function bordaLEFT :boolean ;
Begin
if a = 2 then
bordaLEFT := true
else
bordaLEFT := false ;
End;

Function bordaRIGHT :boolean ;
Begin
if a = 79 then
bordaRIGHT := true
else
bordaRIGHT := false ;
End;
{=============================================================================================
=============procedimentos para desenhar e redesnehar o objeto================================
==============================================================================================}

procedure UP;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaUP then
dec(B){ else inc(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure left;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaLEFT then
dec(a){ else inc(a)};
gotoxy(a,B);
writeln(#219);
end;
procedure down;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaDOWN then
inc(B){ else dec(B)};
gotoxy(a,B);
writeln(#219);

end;
procedure right;
begin
textcolor(lightred);
gotoxy(a,B);
write(' ');
if not bordaRIGHT then
inc(a){ else dec(a)};
gotoxy(a,B);
writeln(#219);
end;
{++++++++++++++++++comida_NOVA+++++++++++++++++++++++++++++++++}
function comida_nova:boolean;
begin
textcolor(lightblue);
if (cx=a)and(cy=B) then
comida_nova:=true
else
comida_nova:=false;
end;
procedure comida;
begin
begin
while comida_nova do
begin
cx:=random(75);
cy:=random(20);
gotoxy(cx+2,cy+2);
write(#15);
end;
end;
begin
cx:=random(75);
cy:=random(20);
gotoxy(cx+2,cy+2);
write(#15);
end;
end;

{====================================================================================================================
=============================================inicio do programa======================================================
=====================================================================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
begin
begin
a:=2;
b:=2;
end;
{++++++++++limpa e executa os procedimentos+++++++++++++++}
clrscr;
borda;
comida;
{+++++++++++++++++++++++++++detecta as teclas+++++++++++++++++++++++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72,56: up;
75,52: left;
80,50: down;
77,54: right;
55: begin up; left; end;
57: begin up; right; end;
49: begin down; left; end;
51: begin down; right; end;
end;
end;

end.[/SPOILER]

Program testando;

Olá,

Tentei dá uma arrumadinha no seu código. Veja como ficou.

1) Tentei modularizar o máximo possível deixando os procedimentos independentes... ou seja, ou tendo suas próprias variáveis ou as recebendo por parâmetro.

2) Reduzir alguns comandos, por exemplo convertendo alguns repeat em for, minimizando alguns ifs.

3) Implementei para o programa criar uma comida nova quando a atual for comida. (só fiz criar uma nova comida, mas não sabia o que fazer depois, tipo aumentar o tamanho da cobra.. ou contabilizar pontos... etc)

4) Coloquei para fechar o programa caso pressione ESC...

Etc.

Program testando;

uses crt;

(*
var
tc :char;
a, b :integer;
bx, by :integer;
cx, cy :integer;

//RECOMENDO COLOCAR LOGO ACIMA DO BEGIN PRINCIPAL PARA
FACILITAR A MODULAIZAÇÃO [SimonViegas]
*)

{=============================================================================
================================BORDAS========================================
=============================================================================}
procedure borda;
var
cb :byte; {coordenada X ou Y da borda}
begin
TextColor(red); {textcolor(blue + yellow);}

(*
repeat
bx:=bx+1;
gotoxy(bx,1);
write(#177);
gotoxy(bx,25);
write(#177);
until bx=80;

//Está mais propício para FOR (quantidade fixa de loops)
*)

{cima e baixo}
for cb:=1 to 80 do
begin
gotoxy(cb,01); write(#177);
gotoxy(cb,24); write(#177);
end;

{direita e esquerda}
{for cb:=1 to 80 do}
for cb:=2 to 24 do
begin
gotoxy(1,cb); write(#177);
gotoxy(80,cb); write(#177);
end;
gotoxy(2,2);
end;


{=================bordas==================}
function bordaUP (b:byte):boolean;
begin
(*
if b = 02 then
bordaUP := true
else
bordaUP := false ;

//Dah pra resumi!!!
*)
bordaUP:=(b <= 02);
end;

function bordaDOWN (b:byte):boolean;
begin
bordaDOWN:= (b >= 23);
end;

function bordaLEFT (a:byte):boolean;
begin
bordaLEFT:=(a <= 2);
end;

function bordaRIGHT (a:byte):boolean ;
begin
bordaRIGHT:=(a >= 79);
end;

{=============================================================================
============procedimentos para desenhar e redesnehar o objeto=================
=============================================================================}

(*
procedure UP;
begin
textcolor(lightred);
gotoxy(a,;
write(' ');
if not bordaUP then
dec({ else inc(};
gotoxy(a,;
writeln(#219);

end;

//assim está reimprimindo sem necessidade, basta ignorar!!!
*)

procedure UP (var a,b:byte);
begin
if not bordaUP( then
begin
textcolor(lightred);
gotoxy(a,; write(' '); {apaga o desenho}
dec(; {sobe uma linha}
gotoxy(a,; writeln(#219);
gotoXY(a,; {fazer o cursor ficar em cima da cobra (sumir)}
end;
end;

procedure LEFT (var a,b:byte);
begin
if not bordaLEFT(a) then
begin
textcolor(lightred);
gotoxy(a,; write(' ');
dec(a);
gotoxy(a,; writeln(#219);
gotoXY(a,;
end;
end;

procedure DOWN (var a,b:byte);
begin
if not bordaDOWN( then
begin
textcolor(lightred);
gotoxy(a,; write(' ');
inc(;
gotoxy(a,; writeln(#219);
gotoXY(a,; {fazer o cursor ficar em cima da cobra (sumir)}
end;
end;

procedure RIGHT (var a,b:byte);
begin
if not bordaRIGHT(a) then
begin
textcolor(lightred);
gotoxy(a,; write(' ');
inc(a);
gotoxy(a,; writeln(#219);
gotoXY(a,; {fazer o cursor ficar em cima da cobra (sumir)}
end;
end;

function posicaoLivre (a,b:byte; var cx,cy:byte):boolean;
begin
Randomize; {inicializa o Random para não se repetir}
{gera a posição da comida}
cx:=random(75)+2;
cy:=random(20)+2;
{verifica se a posição é válida}
if (cx=a) and (cy= then {não nascer embaixo da cobra}
posicaoLivre:=false
else
posicaoLivre:=true;
end;

procedure comida_nova (a,b:byte; var cx,cy:byte);
var
ok :boolean;
begin
repeat
until posicaoLivre(a,b,cx,cy);
textcolor(lightBlue);
gotoxy(cx,cy);
write(#15);
textcolor(lightred);
gotoXY(a,; {posiciona o curso na cobra}
end;

procedure verificaComida (a,b:byte; var cx,cy:byte);
begin
if (a=cx) and (b=cy) then
comida_nova(a,b,cx,cy); {cria uma comida nova}
end;
var
tc :char;
a, b :byte; {coordenadas da cobra}
cx, cy :byte; {coordenadas da comida}

{=============================================================================
=============================inicio do programa===============================
=============================================================================}
{+++++++++++inicia variavais do obj++++++++++++++++}
BEGIN
a:=2;
b:=2;

{++++++++++limpa e executa os procedimentos+++++++++++++++}
clrscr;
borda;
comida_nova(a,b,cx,cy);

{+++++++++++++++++++++++++++detecta as teclas+++++++++++++++++++++++++++++++++++++}
while true do begin
tc:=readkey;
case ord(tc) of
72,56: up(a,;
75,52: left(a,;
80,50: down(a,;
77,54: right(a,;
55: begin up(a,; left(a,; end;
57: begin up(a,; right(a,; end;
49: begin down(a,; left(a,; end;
51: begin down(a,; right(a,; end;
27:halt;
end; {case}
verificaComida(a,b,cx,cy);
end;
end.

No aguardo

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!