Tin học Game Snake Pascal

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Lâu rồi mình không dùng lại cái này, làm lại kẻo quên.:p
Game Snake huyền thoại này là lúc mới học mình copy code về chơi rồi giờ làm lại thử được không:p, thấy nó dài hơn thì phải. Mà kệ đi, Share cho ae Copy về chơi nè.:D
Max đẹp mà không cần đồ họa nhé.;)
Mã:
 Program Game_Snake;
 Uses crt;
 const
      Max_X = 60;
      Max_Y = 25;
      Min_X = 1;
      Min_Y = 1;
      Than =#219;
      Dau = #219;
 Var
    dai,foodx,foody,foodcl,rancl,speed, score, MaxScore: integer;
    ranx,rany: array[1..100] of integer;
    dir_food,time,t: integer;
    f: text;
    ReGame: char;

 Procedure Draw_Range;
 var i: integer;
 Begin
      TextColor(Green);
      for i:= Min_X to Max_X do
      begin
           Gotoxy(i,Min_Y);
           Write(#178);
           Gotoxy(i,Max_Y);
           Write(#178);
      end;

      for i:= Min_Y to Max_Y do
      begin
           Gotoxy(Min_X,i);
           Write(#178);
           Gotoxy(Max_X,i);
           Write(#178);
      end;
 End;

 Procedure Write_Snake;
 var i: integer;
 Begin
       Gotoxy(ranx[dai],rany[dai]);Write(#32);
       for i := dai downto 2 do
       begin
            ranx[i] := ranx[i-1];
            rany[i] := rany[i-1];
            TextColor(rancl);
            gotoxy(ranx[i],rany[i]);
            write(than);
       end;
       TextColor(White);
       gotoxy(ranx[1],rany[1]);
       write(dau);

      {Draw Food}
      Textcolor(foodcl);
      Gotoxy(foodx,foody);Write(#220);
 End;

 Procedure Create_Food;
 Begin
      Randomize;
      repeat
      foodx := Random(Max_X - 1);
      foody := Random(Max_Y - 1);
      foodcl := random(10);
      Until (foodx > 1) and (foody > 1) and (foodcl > 1);
      Textcolor(foodcl);
      Gotoxy(foodx,foody);Write(#220);
 End;

 Function Die: Boolean;
 var x,y,i: integer;
 Begin
      Die := False;
      x := ranx[1];
      y := rany[1];
      if (x > Min_X) and (x < Max_X) and (y > Min_Y) and (y < Max_Y) then
      begin
      for i := dai downto 4 do
      if (x = ranx[i]) and (y = rany[i]) then
      begin
           Die := True;
           break;
      end;
      end
      else Die := True;
 End;

 Procedure Set_Dir_Food;
 Begin
      repeat
      time := 5 + random(5);
      dir_food := random(5);
      until (time > 0) and (dir_food > 0);
      t:= 0;
 End;

 Procedure Move_Food;
 Begin
      t := t+1;
      if t mod 3 = 0 then
      case dir_food of
      1: if foody > Min_Y + 1 then begin
                                        gotoxy(foodx,foody);Write(#32);
                                        foody := foody - 1;
                                   end;
      2: if foodx > Min_X + 1 then begin
                                        gotoxy(foodx,foody);Write(#32);
                                        foodx := foodx - 1;
                                   end;
      3: if foody < Max_Y - 1 then begin
                                        gotoxy(foodx,foody);Write(#32);
                                        foody := foody + 1;
                                   end;
      4: if foodx < Max_X - 1 then begin
                                        gotoxy(foodx,foody);Write(#32);
                                        foodx := foodx + 1;
                                   end;
      end;
      if t = time then Set_Dir_Food;
 End;

 Procedure Move;
 var k,lk: char;
 Begin
      Set_Dir_Food;
      k := lk;
      repeat until Keypressed;
      repeat
      Move_Food;
      if Keypressed then begin lk:= k;k := ReadKey;end;
      case k of
      #72: rany[1] := rany[1] - 1;
      #75: ranx[1] := ranx[1] - 1;
      #77: ranx[1] := ranx[1] + 1;
      #80: rany[1] := rany[1] + 1;
      'p':
      begin
           TextColor(Red);
           repeat
                 gotoxy(63,10);
                 Write('Bam p de tiep tuc!');
           until readkey = 'p';
                 Gotoxy(63,10);
                 Write('                  ');
      end;
      end;
      if k = 'p' then k := lk;
      if (ranx[1] = foodx) and (rany[1] = foody) then
      Begin
           dai := dai + 1;
           score := score + 1;
           rancl := Foodcl;
           Create_Food;
           TextColor(Cyan);
           Gotoxy(63,3);
           Write('Diem: ',score);
      End;
      Write_Snake;
      Delay(Speed);
      Until (k = #27) or Die;
      if k = #27 then ReGame := #27;
 End;

 Procedure Choose_Level;
 var level: integer;
 Begin
      TextColor(White);
      Writeln('Chon che do: ');
      Writeln('1. Kho');
      Writeln('2. Vua');
      Writeln('3. De');
      repeat readln(level); until (level >=1) and (level <= 3);
      speed := level*50;
      clrscr;
      TextColor(Cyan);
      Gotoxy(63,7);
      Write('Muc do: ');
      case level of
      1: Write('Kho');
      2: Write('Vua');
      3: Write('De');
      end;
 End;

 Procedure OpenFile;
 Begin
      reset(f);
      read(f,MaxScore);
      close(f);
 End;
 Procedure ReWriteFile;
 Begin
      if Score > MaxScore then
      begin
           ReWrite(f);
           Write(f,Score);
           Close(f);
      end;
 End;

 Procedure Main;
 var i: integer;
 Begin
       Repeat
       clrscr;
       Assign(f,'MaxScore.txt');
       OpenFile;
       Choose_Level;
       dai := 5;
       rancl := Blue;
       score := 0;
       TextColor(Cyan);
       Gotoxy(63,3);
       Write('Diem: ',score);
       Gotoxy(63,5);
       Write('Diem cao nhat:',MaxScore);
       for i := 1 to dai do
       begin
            ranx[i] := i+3;
            rany[i] := 5;
            TextColor(rancl);
            gotoxy(ranx[i],rany[i]);
            write(than);
       end;
       TextColor(White);
       gotoXy(ranx[1],rany[1]);Write(dau);
       rancl := Blue;
       Draw_Range;
       Create_Food;
       Move;
       ReWriteFile;
       if ReGame <> #27 then
       begin
            readln;
            clrscr;
            TextColor(White);
            Write('Ban co muon choi lai khong. Bam "y" neu co.');
            repeat until keypressed;
            ReGame := readkey;
       end;
       Until ReGame <> 'y';
 End;

 BEGIN
      clrscr;
      Main;
      Gotoxy(20,12);
      Write('Bam Enter de thoat...');
      readln;
 END.
 
Last edited:

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
  • Like
Reactions: son_gohan

son_gohan

Học sinh
Thành viên
1 Tháng tư 2017
69
55
36
Nếu không được thì bạn cứ vào file BIN của Dosbox tạo một file mới có tên là MaxScore.txt là được. Mình cũng không biết nó bị gì nữa.
Được rồi bạn, rắn chạy không mượt lắm nhưng mình rất thích. Hồi đó cũng muốn viết chương trình rắn như vậy mà không viết được :)))
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Được rồi bạn, rắn chạy không mượt lắm nhưng mình rất thích. Hồi đó cũng muốn viết chương trình rắn như vậy mà không viết được :)))
Bạn Cap màn hình mình xem thử được không. Mình thấy nó mượt lắm mà.
Nhân tiện Share luôn cái Game giúp mình
 

Attachments

  • upload_2018-4-28_22-8-39.png
    upload_2018-4-28_22-8-39.png
    221.6 KB · Đọc: 258

ka1412

Học sinh chăm học
Thành viên
24 Tháng mười một 2017
874
730
121
Hà Nội
CNN | Life
Bấm enter game tự dừng hả bạn?
 

Bùi Thành Công

Học sinh
Thành viên
23 Tháng bảy 2018
87
58
31
19
Nam Định
Thcs Giao Thủy
Mình cũng làm dc cái code này,các bạn chơi thử xem:

uses crt;
type mang=array[1..10000] of byte;
mang1=array[1..10000] of string[50];
var move,key,k,level:char;
x,y,score:mang;
i,n,a,b,c,w,g,j,k1:byte;
fence:boolean;
name:mang1;
z:string[50];
procedure readdata1(name:mang1;score:mang);
var fi,fo:text;
j,k,k1,w,h:byte;
z,y:string;
begin
assign(fi,'game2.inp');reset(fi); j:=1;g:=0;

while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
if g<score[j] then begin g:=score[j];z:=name[j];w:=j; end;
j:=j+1;
end;
write(z);gotoxy(50,2);write(g);writeln;
close(fi);
assign(fo,'game2.inp');rewrite(fo);writeln(fo,z);writeln(fo,g);
for k:=2 to 5 do
begin h:=0;
for k1:=1 to j do
if (h<score[k1]) and (score[k1]<g) then begin h:=score[k1];y:=name[k1]; end;
write(y);gotoxy(50,k);write(h);writeln;
writeln(fo,y);writeln(fo,h);
g:=h;
end;
close(fo);
end;
procedure readdata2(name:mang1;score:mang;j:byte);
var fi:text;
begin
assign(fi,'game2.inp');reset(fi); j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
j:=j+1;
end;
close(fi);
end;
procedure writemenu;
begin clrscr;
writeln(' [1]:Bat dau');
writeln(' [2]:Cai dat');
writeln(' [3]:Muc do');
writeln(' [4]:Bang xep hang');
writeln(' [5]:Huong dan');
writeln(' [6]:Thoat');
write('Chon:');
end;
procedure sleep(level:char);
begin
case level of
'1':begin delay(150); end;
'2':begin delay(100); end;
'3':begin delay(50); end;
else begin delay(150); end;
end;
end;
procedure menu(k,move,key,level:char;x,y:mang;i,n,a,b,c,w:byte;fence:boolean);
var j,k1,g:byte;
z:string;
score:mang;
name:mang1;
fo:text;
begin
move:='d';x[1]:=10;y[1]:=15;x[2]:=9;y[2]:=15;x[3]:=8;y[3]:=15;n:=3;w:=0;
a:=random(71)+1;b:=random(21)+1;
writemenu;
key:=readkey;

if key='1' then begin
{ko hang rao}
if not(fence) then while w<>6 do
begin
case level of
'1':c:=1;
'2':c:=2;
'3':c:=4;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write(#9);
end;
{cap nhat dau}
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(72)+3;b:=random(20)+2;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(1000); end;
if x[1]=1 then x[1]:=74;
if x[1]=75 then x[1]:=2;
if y[1]=1 then y[1]:=21;
if y[1]=22 then y[1]:=2;
for i:=1 to 75 do begin gotoxy(i,22);write('#'); end;
gotoxy(3,23);write('Diem:',trunc((n-3)*c));
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end
{co hang rao}
else begin a:=random(19)+10;b:=random(9)+10;
while w<>6 do
begin
case level of
'1':c:=2;
'2':c:=4;
'3':c:=8;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write(#9);
end;
{cap nhat dau}
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(18)+11;b:=random(8)+11;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(4000); end;
if (x[1]<=10)or(x[1]>=30)or(y[1]<=10)or(y[1]>=20) then begin w:=6;delay(4000); end;
{hangrao}
for i:=10 to 30 do begin gotoxy(i,10);write('#'); end;
for i:=10 to 30 do begin gotoxy(i,20);write('#'); end;
for i:=10 to 20 do begin gotoxy(10,i);write('#'); end;
for i:=10 to 20 do begin gotoxy(30,i);write('#'); end;
gotoxy(3,26);write('Diem:',trunc((n-3)*c));
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end;
end;
readdata2(name,score,j);
score[6]:=trunc((n-3)*c);
for k1:=1 to 6 do if score[6]>score[j] then
begin
write('Nhap ten cua ban:');
read(name[6]); g:=score[6];z:=name[6];
assign(fo,'game2.inp');append(fo);
writeln(fo,name[6]);
writeln(fo,score[6]);
close(fo);
break;
end;
end;

if key='2' then
begin clrscr;
writeln('Che do hang rao:');
writeln(' [1]:Bat');
writeln(' [2]:Tat');
write('Chon:');
k:=readkey;
if k='1' then fence:=true;
if k='2' then fence:=false;
end;

if key='3' then
begin
clrscr;
writeln('Ban chon muc do nao');
writeln(' [1]:De');
writeln(' [2]:Trung binh');
writeln(' [3]:Kho');
write('Chon:');
level:=readkey;
end;

if key='4' then
begin clrscr;
writeln('name score');
readdata1(name,score);
readln;
end;

if key='5' then
begin clrscr;
writeln('a:trai');
writeln('d:phai');
writeln('w:len');
writeln('s:xuong');
readln;
end;

if key='6' then halt;

menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
end;
BEGIN randomize;
menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
END.
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Mình cũng làm dc cái code này,các bạn chơi thử xem:

uses crt;
type mang=array[1..10000] of byte;
mang1=array[1..10000] of string[50];
var move,key,k,level:char;
x,y,score:mang;
i,n,a,b,c,w,g,j,k1:byte;
fence:boolean;
name:mang1;
z:string[50];
procedure readdata1(name:mang1;score:mang);
var fi,fo:text;
j,k,k1,w,h:byte;
z,y:string;
begin
assign(fi,'game2.inp');reset(fi); j:=1;g:=0;

while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
if g<score[j] then begin g:=score[j];z:=name[j];w:=j; end;
j:=j+1;
end;
write(z);gotoxy(50,2);write(g);writeln;
close(fi);
assign(fo,'game2.inp');rewrite(fo);writeln(fo,z);writeln(fo,g);
for k:=2 to 5 do
begin h:=0;
for k1:=1 to j do
if (h<score[k1]) and (score[k1]<g) then begin h:=score[k1];y:=name[k1]; end;
write(y);gotoxy(50,k);write(h);writeln;
writeln(fo,y);writeln(fo,h);
g:=h;
end;
close(fo);
end;
procedure readdata2(name:mang1;score:mang;j:byte);
var fi:text;
begin
assign(fi,'game2.inp');reset(fi); j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
j:=j+1;
end;
close(fi);
end;
procedure writemenu;
begin clrscr;
writeln(' [1]:Bat dau');
writeln(' [2]:Cai dat');
writeln(' [3]:Muc do');
writeln(' [4]:Bang xep hang');
writeln(' [5]:Huong dan');
writeln(' [6]:Thoat');
write('Chon:');
end;
procedure sleep(level:char);
begin
case level of
'1':begin delay(150); end;
'2':begin delay(100); end;
'3':begin delay(50); end;
else begin delay(150); end;
end;
end;
procedure menu(k,move,key,level:char;x,y:mang;i,n,a,b,c,w:byte;fence:boolean);
var j,k1,g:byte;
z:string;
score:mang;
name:mang1;
fo:text;
begin
move:='d';x[1]:=10;y[1]:=15;x[2]:=9;y[2]:=15;x[3]:=8;y[3]:=15;n:=3;w:=0;
a:=random(71)+1;b:=random(21)+1;
writemenu;
key:=readkey;

if key='1' then begin
{ko hang rao}
if not(fence) then while w<>6 do
begin
case level of
'1':c:=1;
'2':c:=2;
'3':c:=4;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write(#9);
end;
{cap nhat dau}
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(72)+3;b:=random(20)+2;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(1000); end;
if x[1]=1 then x[1]:=74;
if x[1]=75 then x[1]:=2;
if y[1]=1 then y[1]:=21;
if y[1]=22 then y[1]:=2;
for i:=1 to 75 do begin gotoxy(i,22);write('#'); end;
gotoxy(3,23);write('Diem:',trunc((n-3)*c));
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end
{co hang rao}
else begin a:=random(19)+10;b:=random(9)+10;
while w<>6 do
begin
case level of
'1':c:=2;
'2':c:=4;
'3':c:=8;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write(#9);
end;
{cap nhat dau}
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(18)+11;b:=random(8)+11;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(4000); end;
if (x[1]<=10)or(x[1]>=30)or(y[1]<=10)or(y[1]>=20) then begin w:=6;delay(4000); end;
{hangrao}
for i:=10 to 30 do begin gotoxy(i,10);write('#'); end;
for i:=10 to 30 do begin gotoxy(i,20);write('#'); end;
for i:=10 to 20 do begin gotoxy(10,i);write('#'); end;
for i:=10 to 20 do begin gotoxy(30,i);write('#'); end;
gotoxy(3,26);write('Diem:',trunc((n-3)*c));
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end;
end;
readdata2(name,score,j);
score[6]:=trunc((n-3)*c);
for k1:=1 to 6 do if score[6]>score[j] then
begin
write('Nhap ten cua ban:');
read(name[6]); g:=score[6];z:=name[6];
assign(fo,'game2.inp');append(fo);
writeln(fo,name[6]);
writeln(fo,score[6]);
close(fo);
break;
end;
end;

if key='2' then
begin clrscr;
writeln('Che do hang rao:');
writeln(' [1]:Bat');
writeln(' [2]:Tat');
write('Chon:');
k:=readkey;
if k='1' then fence:=true;
if k='2' then fence:=false;
end;

if key='3' then
begin
clrscr;
writeln('Ban chon muc do nao');
writeln(' [1]:De');
writeln(' [2]:Trung binh');
writeln(' [3]:Kho');
write('Chon:');
level:=readkey;
end;

if key='4' then
begin clrscr;
writeln('name score');
readdata1(name,score);
readln;
end;

if key='5' then
begin clrscr;
writeln('a:trai');
writeln('d:phai');
writeln('w:len');
writeln('s:xuong');
readln;
end;

if key='6' then halt;

menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
end;
BEGIN randomize;
menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
END.
Vừa bật lên chạy thì nó đã báo lỗi quá bộ nhớ, khi mình giảm bộ nhớ lại thì một đống lỗi khác lại ra.
Bạn viết game này bằng gì vậy, FP hay TP
 

Bùi Thành Công

Học sinh
Thành viên
23 Tháng bảy 2018
87
58
31
19
Nam Định
Thcs Giao Thủy
Mình sửa lại rồi đây , bạn thử lại xem:

uses crt;
type mang=array[1..10000] of word;
mang1=array[1..10000] of string[50];
var move,key,k,level:char;
x,y,score:mang;
i,n,a,b,c,w,g,j,k1:word;
fence:boolean;
name:mang1;
z:string[50];
procedure readdata1(name:mang1;score:mang);
var fi,fo:text;
j,k,k1,w,h,g:word;
z,y:string[255];
begin
assign(fi,'game2.inp');reset(fi);g:=0;j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
j:=j+1;
end;
close(fi);
assign(fo,'game2.inp');rewrite(fo);
for k1:=1 to j do if g<score[k1] then begin g:=score[k1];z:=name[k1]; end;
writeln(fo,z);writeln(fo,g);write(z);gotoxy(50,2);write(g);writeln;
for k:=2 to 5 do
begin h:=0;
for k1:=1 to j do
if (score[k1]>h)and(score[k1]<g) then begin h:=score[k1];y:=name[k1]; end;
writeln(fo,y);writeln(fo,h);write(y);gotoxy(50,k+1);write(h);writeln;
g:=h;
end;
close(fo);
end;
procedure readdata2(name:mang1;score:mang);
var fi:text;
j:longint;
begin
assign(fi,'game2.inp');reset(fi); j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
inc(j);
end;
close(fi);
end;
procedure writemenu;
begin clrscr;
writeln(' [1]:Bat dau');
writeln(' [2]:Cai dat');
writeln(' [3]:Muc do');
writeln(' [4]:Bang xep hang');
writeln(' [5]:Huong dan');
writeln(' [6]:Thoat');
write('Chon:');
end;
procedure sleep(level:char);
begin
case level of
'1':begin delay(150); end;
'2':begin delay(100); end;
'3':begin delay(50); end;
else begin delay(150); end;
end;
end;
procedure menu(k,move,key,level:char;x,y:mang;i,n,a,b,c,w:word;fence:boolean);
var j,k1,g:word;
z:string;
score:mang;
name:mang1;
fo:text;
begin
move:='d';x[1]:=10;y[1]:=15;x[2]:=9;y[2]:=15;x[3]:=8;y[3]:=15;n:=3;w:=0;
a:=random(72)+3;b:=random(20)+2;
writemenu;
key:=readkey;

if key='1' then begin
{ko hang rao}
if not(fence) then while w<>6 do
begin
case level of
'1':c:=1;
'2':c:=2;
'3':c:=4;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write('*');
end;
{cap nhat dau}
k:=move;
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
'p':begin
move:=k;write('An Enter de tiep tuc');readln;
case k of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
end;
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(72)+3;b:=random(20)+2;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(1000); end;
if x[1]=1 then x[1]:=74;
if x[1]=75 then x[1]:=2;
if y[1]=1 then y[1]:=21;
if y[1]=22 then y[1]:=2;
for i:=1 to 75 do begin gotoxy(i,22);write('#'); end;
gotoxy(3,23);write('Diem:',trunc((n-3)*c),' ','An phim p de tam dung');
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end
{co hang rao}
else begin a:=random(19)+10;b:=random(9)+10;
while w<>6 do
begin
case level of
'1':c:=2;
'2':c:=4;
'3':c:=8;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write('*');
end;
{cap nhat dau}
k:=move;
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
'p':begin
move:=k;write('An Enter de tiep tuc');readln;
case k of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
end;
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(18)+11;b:=random(8)+11;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(4000); end;
if (x[1]<=10)or(x[1]>=30)or(y[1]<=10)or(y[1]>=20) then begin w:=6;delay(4000); end;
{hangrao}
for i:=10 to 30 do begin gotoxy(i,10);write('#'); end;
for i:=10 to 30 do begin gotoxy(i,20);write('#'); end;
for i:=10 to 20 do begin gotoxy(10,i);write('#'); end;
for i:=10 to 20 do begin gotoxy(30,i);write('#'); end;
gotoxy(3,26);write('Diem:',trunc((n-3)*c),' ','An phim p de tam dung');
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end;
end;
{luu diem vao file}
score[6]:=trunc((n-3)*c);
write('Nhap ten cua ban:');
read(name[6]); g:=score[6];z:=name[6];
assign(fo,'game2.inp');append(fo);
writeln(fo,name[6]);
writeln(fo,score[6]);
close(fo);
end;

if key='2' then
begin clrscr;
writeln('Che do hang rao:');
writeln(' [1]:Bat');
writeln(' [2]:Tat');
write('Chon:');
k:=readkey;
if k='1' then fence:=true;
if k='2' then fence:=false;
end;

if key='3' then
begin
clrscr;
writeln('Ban chon muc do nao');
writeln(' [1]:De');
writeln(' [2]:Trung binh');
writeln(' [3]:Kho');
write('Chon:');
level:=readkey;
end;

if key='4' then
begin clrscr;
writeln('name score');
readdata1(name,score);
write('An Enter de quay lai');
readln;
end;

if key='5' then
begin clrscr;
writeln('a:trai');
writeln('d:phai');
writeln('w:len');
writeln('s:xuong');
writeln('p:tam dung');
write('An Enter de quay lai');
readln;
end;

if key='6' then halt;

menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
end;
BEGIN randomize;
menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
END.
 

ka1412

Học sinh chăm học
Thành viên
24 Tháng mười một 2017
874
730
121
Hà Nội
CNN | Life
Mình sửa lại rồi đây , bạn thử lại xem:

uses crt;
type mang=array[1..10000] of word;
mang1=array[1..10000] of string[50];
var move,key,k,level:char;
x,y,score:mang;
i,n,a,b,c,w,g,j,k1:word;
fence:boolean;
name:mang1;
z:string[50];
procedure readdata1(name:mang1;score:mang);
var fi,fo:text;
j,k,k1,w,h,g:word;
z,y:string[255];
begin
assign(fi,'game2.inp');reset(fi);g:=0;j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
j:=j+1;
end;
close(fi);
assign(fo,'game2.inp');rewrite(fo);
for k1:=1 to j do if g<score[k1] then begin g:=score[k1];z:=name[k1]; end;
writeln(fo,z);writeln(fo,g);write(z);gotoxy(50,2);write(g);writeln;
for k:=2 to 5 do
begin h:=0;
for k1:=1 to j do
if (score[k1]>h)and(score[k1]<g) then begin h:=score[k1];y:=name[k1]; end;
writeln(fo,y);writeln(fo,h);write(y);gotoxy(50,k+1);write(h);writeln;
g:=h;
end;
close(fo);
end;
procedure readdata2(name:mang1;score:mang);
var fi:text;
j:longint;
begin
assign(fi,'game2.inp');reset(fi); j:=1;
while not eof(fi) do
begin
readln(fi,name[j]);
readln(fi,score[j]);
inc(j);
end;
close(fi);
end;
procedure writemenu;
begin clrscr;
writeln(' [1]:Bat dau');
writeln(' [2]:Cai dat');
writeln(' [3]:Muc do');
writeln(' [4]:Bang xep hang');
writeln(' [5]:Huong dan');
writeln(' [6]:Thoat');
write('Chon:');
end;
procedure sleep(level:char);
begin
case level of
'1':begin delay(150); end;
'2':begin delay(100); end;
'3':begin delay(50); end;
else begin delay(150); end;
end;
end;
procedure menu(k,move,key,level:char;x,y:mang;i,n,a,b,c,w:word;fence:boolean);
var j,k1,g:word;
z:string;
score:mang;
name:mang1;
fo:text;
begin
move:='d';x[1]:=10;y[1]:=15;x[2]:=9;y[2]:=15;x[3]:=8;y[3]:=15;n:=3;w:=0;
a:=random(72)+3;b:=random(20)+2;
writemenu;
key:=readkey;

if key='1' then begin
{ko hang rao}
if not(fence) then while w<>6 do
begin
case level of
'1':c:=1;
'2':c:=2;
'3':c:=4;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write('*');
end;
{cap nhat dau}
k:=move;
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
'p':begin
move:=k;write('An Enter de tiep tuc');readln;
case k of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
end;
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(72)+3;b:=random(20)+2;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(1000); end;
if x[1]=1 then x[1]:=74;
if x[1]=75 then x[1]:=2;
if y[1]=1 then y[1]:=21;
if y[1]=22 then y[1]:=2;
for i:=1 to 75 do begin gotoxy(i,22);write('#'); end;
gotoxy(3,23);write('Diem:',trunc((n-3)*c),' ','An phim p de tam dung');
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end
{co hang rao}
else begin a:=random(19)+10;b:=random(9)+10;
while w<>6 do
begin
case level of
'1':c:=2;
'2':c:=4;
'3':c:=8;
else c:=1;
end;
{cap nhat than}
for i:=n downto 2 do
begin
x:=x[i-1];y:=y[i-1];
gotoxy(x,y);
write('*');
end;
{cap nhat dau}
k:=move;
if keypressed then move:=readkey;
case move of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
'p':begin
move:=k;write('An Enter de tiep tuc');readln;
case k of
'a':dec(x[1]);
'd':inc(x[1]);
'w':dec(y[1]);
's':inc(y[1]);
end;
end;
end;
gotoxy(x[1],y[1]);
write(#1);
{tao moi}
gotoxy(a,b);
write(#3);
if (x[1]=a) and (y[1]=b) then
begin
n:=n+1;
a:=random(18)+11;b:=random(8)+11;
x[n]:=0;y[n]:=0;
end;
{gameover}
for i:=2 to n do if (x[1]=x)and(y[1]=y) then begin w:=6;delay(4000); end;
if (x[1]<=10)or(x[1]>=30)or(y[1]<=10)or(y[1]>=20) then begin w:=6;delay(4000); end;
{hangrao}
for i:=10 to 30 do begin gotoxy(i,10);write('#'); end;
for i:=10 to 30 do begin gotoxy(i,20);write('#'); end;
for i:=10 to 20 do begin gotoxy(10,i);write('#'); end;
for i:=10 to 20 do begin gotoxy(30,i);write('#'); end;
gotoxy(3,26);write('Diem:',trunc((n-3)*c),' ','An phim p de tam dung');
{dua con tro ve cuoi dong}
gotoxy(75,25);
sleep(level);
clrscr;
end;
end;
{luu diem vao file}
score[6]:=trunc((n-3)*c);
write('Nhap ten cua ban:');
read(name[6]); g:=score[6];z:=name[6];
assign(fo,'game2.inp');append(fo);
writeln(fo,name[6]);
writeln(fo,score[6]);
close(fo);
end;

if key='2' then
begin clrscr;
writeln('Che do hang rao:');
writeln(' [1]:Bat');
writeln(' [2]:Tat');
write('Chon:');
k:=readkey;
if k='1' then fence:=true;
if k='2' then fence:=false;
end;

if key='3' then
begin
clrscr;
writeln('Ban chon muc do nao');
writeln(' [1]:De');
writeln(' [2]:Trung binh');
writeln(' [3]:Kho');
write('Chon:');
level:=readkey;
end;

if key='4' then
begin clrscr;
writeln('name score');
readdata1(name,score);
write('An Enter de quay lai');
readln;
end;

if key='5' then
begin clrscr;
writeln('a:trai');
writeln('d:phai');
writeln('w:len');
writeln('s:xuong');
writeln('p:tam dung');
write('An Enter de quay lai');
readln;
end;

if key='6' then halt;

menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
end;
BEGIN randomize;
menu(k,move,key,level,x,y,i,n,a,b,c,w,fence);
END.
Bạn gửi file cho mính với chứ sao mình ăn loạt lỗi
upload_2018-7-25_22-15-11.png
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,619
744
21
Phú Yên
Trường THPT Lương Văn Chánh
Top Bottom