回 帖 发 新 帖 刷新版面

主题:我编的贪吃蛇.

偶第一次编小游戏,不对之处请多多指教~贪吃蛇没用指针,原因是指针我还不理解[em12]
程序我看没错,但运行后蛇身无法动,高手们看看:
uses crt,graph;
var
gd,gm,g,p1,p2,i,j,e,x,y:integer;
ss:array[1..5459]of record a1,a2,a3:integer;end;{用于储藏每一节蛇的坐标,A1是记录每节蛇的先后次序;A2是纵坐标;A3是横坐标}
ch:char;ok:integer;

procedure food(var x,y:integer);(随即形成一个食物的坐标}
begin
repeat
x:= random(640); until x>1;
repeat
y:= random(480);until y>1;
end;

procedure run(i,j:integer;var g:integer);{记录每一节蛇的坐标}
var p,q:integer;
begin
for p:=1 to 5459 do{蛇向前移动或吃一个食物时,增加一节蛇,并记录坐标}
with ss[p] do
if a1=0
then begin a1:=g;a2:=i;a3:=j;break;end;
g:=g+1;
if ok=2 {如果它没吃食物,那擦掉最后一节坐标}
then begin
for p:=1 to 5459 do
with ss[p] do
if a1<>0
then q:=a1;end;
for p:=1 to 5459 do
with ss[p] do
if (a1<>0)and(a1<q)
then q:=a1;
with ss[q] do begin
a1:=0;a2:=0;a3:=0;end;
end;

procedure where(e:integer;var p1,p2:integer);{把从键盘读入的方位赋给方位变量E}
begin
case e of
77:begin p1:=8;p2:=0;end;
75:begin p1:=-8;p2:=0;end;
72:begin p1:=0;p2:=-8;end;
80:begin p1:=0;p2:=8;end;end;end;

procedure pic;{把数组中的蛇画出来}
var o:integer;
begin
for o:=1 to 5459 do
with ss[o] do begin
if a1<>0
then begin setcolor(0);circle(a2,a3,4);
end;end;end;

procedure eat(e:integer);{判断它有没有吃食物}
var s1,s2:integer;
begin
case e of
77:begin
if (x-8=i)and(y=j) then begin ok:=1;run(i,j,g);food(x,y);end else run(i,j,g)end;
75:begin
if (x+8=i)and(y=j) then begin ok:=1;run(i,j,g);food(x,y);end else run(i,j,g)end;
72:begin
if(y+8=i)and(x=j) then begin ok:=1;run(i,j,g);food(x,y);end else run(i,j,g)end;
80:begin
if (y-8=i)and(x=j) then begin ok:=1;run(i,j,g);food(x,y);end else run(i,j,g)end;
end;end;

procedure over (e,i,j:integer);{判断游戏是否结束}
var b1:integer;
begin
for b1:=1 to 5459 do
with ss[b1] do
if (a1<>0)and(a2<>0)and(a1=i)and(a2=j)
then begin clrscr;write('game over');delay(2000);halt;end;
if((e=77)and(i=640))or((e=75)and(i=0))
or((e=72)and(j=0))or((e=80)and(j=480))
then begin
clrscr;write('game over');delay(2000);halt;end;
end;

begin
gd:=detect;
initgraph(gd,gm,' ');for i:=1 to 5459 do
begin with ss[i] do begin{清空数组}
a1:=0;a2:=0;a3:=0;end;end;
i:=10;j:=10;p1:=8;p2:=0;g:=1;e:=77;
ok:=0;ch:=#255;food(x,y);
repeat
i:=i+p1;j:=j+p2;
if keypressed
then begin
ch:=readkey;
if ch=#0 then
begin
ch:=readkey;e:=ord(ch);where(e,p1,p2);end;end;
run(i,j,g);pic;
over(e,i,j);eat(e);setcolor(4);circle(x,y,2);
clrscr;
until ch=#27;
end.

回复列表 (共29个回复)

11 楼

gotoxy是Crt单元的,作用是在文本模式中把光标移到指定地方。文本模式中只有25行,每行80个字符,你要移到第240行的第300个字符处,不越界才怪呢。

显示分数应该用 OutTextXY(300,240,{分数:string});

12 楼

第 7 楼   

嗯,不错!
但是那条蛇和蛇的食物闪烁得厉害,我的眼睛受不了。所以不敢多玩几遍。


你那还能看见,我那几乎看不见了。只看到一个很暗的小蓝圈在不断的JUMP,然后显示一个很小的GAME OVER

13 楼

阿Ben
什么是刷新率?

14 楼

我也才开始学编程,没有你这么厉害,请问你是怎么学的?

15 楼

我今年刚小学毕业,以前,老师只教了FOR,IF,数组等基础知识(老师PASCAL也是刚学的[em54]),
其他作图呀,运用单元呀等等,都是我网上自学的,主要是自己喜欢,这就是动力~~

16 楼

很好,我支持你,
我和lzl1403,啊Ben也是自学图形编程的,一起努力吧!

17 楼

                      谢谢!
            
            
             谢谢!     谢谢!     谢谢!


                       谢谢!

谢谢大家支持,我自当发奋努力,不辜负大家的期望~~~

另:谁能告诉我,什么是刷新率?

18 楼

就是屏幕每秒闪的次数

19 楼

其实电脑、电视等的屏幕都是不断在闪,就像一张张照片不断闪过眼前

20 楼

to 12楼:

你是用我6楼的程序吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册