Senin, 07 Juni 2010

CODING GAME PADA PASCAL

Code:

uses crt;
type
rec=record
x,y : byte;
end;


var
ular : array[1..100] of rec;
makan : array[1..5] of rec;
i,ekor : byte;
mati : boolean;
key : char;
dx,dy : integer;
hadap : string;

procedure animasigerak;
begin
{geser posisi ekor ular dengan posisi ekor yang di depannya}
for i:=ekor downto 2 do
begin
ular[i].x := ular[i-1].x;
ular[i].y := ular[i-1].y;
end;
{ubah posisi kepala ular}
if (hadap='atas') or (hadap='bawah') then ular[1].y:=ular[1].y + dy
else if (hadap='kiri') or (hadap='kanan') then ular[1].x:=ular[1].x + dx;
end;

procedure gambarbingkai;
begin
{menggambar bagian tepi paling atas dan paling bawah}
for i:=1 to 80 do
begin
gotoxy(i,1);
write('+');
gotoxy(i,25);
write('+');
end;
{mebng}
for i:=1 to 25 do
begin
gotoxy(1,i);
write('+');
gotoxy(80,i);
write('+');
end;
end;

procedure gambarular;
begin
for i:=1 to ekor do
begin
gotoxy(ular[i].x , ular[i].y);
write('#');
end;
end;

procedure gambarmakanan;
begin
for i:=1 to 5 do
begin
gotoxy(makan[i].x , makan[i].y);
write('*');
end;
end;

procedure cekmakan;
begin
for i:=1 to 5 do
begin
if (ular[1].x = makan[i].x) and (ular[1].y = makan[i].y) then
begin
{menambahkan ekor di paling belakang}
ekor := ekor + 1;
ular[ekor].x := ular[ekor-1].x +1;
ular[ekor].y := ular[ekor-1].y;
{random ulang makanan}
makan[i].x := random(60)+10;
makan[i].y := random(20)+ 3;
end;
end;
end;

procedure cekmati;
begin
{pengecekan jika kepala ular menabrak ekornya sendiri}
for i:=2 to ekor do
begin
if (ular[1].x = ular[i].x) and (ular[1].y = ular[i].y) then
begin
mati := true;
end;
end;
{pengecekan dengan batas layar 80x25;cukup dicek kepalanya saja}
if (ular[1].x <= 1) or (ular[1].x >= 80) or
(ular[1].y <= 1) or (ular[1].y >= 25) then
begin
mati := true;
end;
end;

begin
clrscr;
write('TEKAN SEMBARANG TOMBOL UNTUK MEMULAI PERMAINAN!');
readkey;
{posisikan ular di tengah layar}
hadap := 'atas'; {arah ular mula-mula}
dy := -1;
dx := 0;
ekor := 5; {jumlah badan ular mula-mula 5 satuan}
ular[1].x := 40;
ular[1].y := 12;
{penggambaran ekor}
for i:=2 to ekor do
begin
ular[i].y := ular[i-1].y+1;
ular[i].x := ular[1].x;
end;
{buat random makanan}
for i:=1 to 5 do
begin
makan[i].x := random(60)+10;
makan[i].y := random(20)+ 3;
end;
{
permainan berjalan hingga snake tertabrak batas layar, atau sampai
ditekan tombol escape
}
mati := false;
key := #0;

repeat
{membersihkan layar}
clrscr; {jika tidak mau blink, jangan gunakan clrscr, tapi hapus per karakter seperti contoh di bawah ini}
(* UNTUK MENGURANGI BLINK, PAKAI INI SEBAGAI PENGGANTI CLRSCR (hapus remarknya) *)
{
textcolor(0);

for i:=1 to 5 do
begin
gotoxy(makan[i].x , makan[i].y);
write(' ');
end;

for i:=1 to ekor do
begin
gotoxy(ular[i].x , ular[i].y);
write(' ');
end;

textcolor(7);
}

{menggambar bingkai batas layar}
gambarbingkai;

(* PENGECEKAN TOMBOL DAN PERGERAKKAN *)
{pengecekan penekanan tombol}
if keypressed then
begin
key := readkey;
if key=#0 then key := readkey;

case key of
#72 : {tombol atas}
begin
{sebelumnya dicek dahulu, apakah tidak menekan tombol dengan arah
yang berlawanan dengan saat ini, agar tidak bisa berjalan mundur/kembali}
if hadap <> 'bawah' then
begin
dy := -1;
hadap := 'atas';
end;
end;
#75 : {tombol kiri}
begin
{sebelumnya dicek dahulu, apakah tidak menekan tombol dengan arah
yang berlawanan dengan saat ini, agar tidak bisa berjalan mundur/kembali}
if hadap <> 'kanan' then
begin
dx := -1;
hadap := 'kiri';
end;
end;
#77 : {tombol kanan}
begin
{sebelumnya dicek dahulu, apakah tidak menekan tombol dengan arah
yang berlawanan dengan saat ini, agar tidak bisa berjalan mundur/kembali}
if hadap <> 'kiri' then
begin
dx := 1;
hadap := 'kanan';
end;
end;
#80 : {tombol bawah}
begin
{sebelumnya dicek dahulu, apakah tidak menekan tombol dengan arah
yang berlawanan dengan saat ini, agar tidak bisa berjalan mundur/kembali}
if hadap <> 'atas' then
begin
dy := 1;
hadap := 'bawah';
end;
end;
end;
end;
{pengecekan jika ular memakan makanan}
cekmakan;
{jika menabrak tepi layar (batas layar 80x25) atau menabrak ekornya, maka mati}
cekmati;

(* ANIMASI DAN PENGGAMBARAN *)
{menggambar makanan}
gambarmakanan;
{untuk menggerakkan ular ketika tidak terjadi penekanan tombol}
animasigerak;
{menggambar ular beserta pergerakan ekornya}
gambarular;
{memberikan tenggang waktu agar perubahan bisa dilihat dengan mata kita}
delay(200);

until (key=#27) or (mati=true);
end.
SUMBER :http://forum.elins.org/programming/ask-souce-code-game-snake-dl-bahasa-pascaldelphi/?action=printpage

Tidak ada komentar:

Posting Komentar