云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于51单片机的贪食蛇游戏机开发-精品 - 图文

基于51单片机的贪食蛇游戏机开发-精品 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/23 23:18:44

(*(SnakeBody+(SnakeLength<<1)-1))++; IsMovInVetical=1; break; } case 3:

//西

{//蛇步进,原次尾单元变成尾单元。SnakeBody向前挪两个字节。

for(i=0;i

*(SnakeBody+(i<<1)+1)=*(SnakeBody+(i<<1)+3);

}

(*(SnakeBody+(SnakeLength<<1)-2))--;//设定新蛇头的位置

IsMovInVetical=0; break; } case 4:

{ //北, 蛇步进,原次尾单元变成尾单元。SnakeBody向前挪两个字节。 for(i=0;i

*(SnakeBody+(i<<1))=*(SnakeBody+(i<<1)+2);

*(SnakeBody+(i<<1)+1)=*(SnakeBody+(i<<1)+3);

}

(*(SnakeBody+(SnakeLength<<1)-1))--;//设定新蛇头的位置 IsMovInVetical=1; break; }

}

if(((*(SnakeBody+(SnakeLength<<1)-2))==food[0])&&

((*(SnakeBody+(SnakeLength<<1)-1))==food[1]))

{ //若碰到食物,调整蛇体

for(i=SnakeLength;i>0;i--)

17

{

*(SnakeBody+(i<<1))=*(SnakeBody+(i<<1)-2); *(SnakeBody+(i<<1)+1)=*(SnakeBody+(i<<1)-1); }

*SnakeBody=x; *(SnakeBody+1)=y;

SnakeLength++;//蛇体长度加 do //产生新的有效的食物 {

IsT0GenNewFood=0; food[0]=TL0$; //产生食物

food[1]=TL0;

//检查Food位置是否被蛇身覆盖,若是需重置食

for(i=0;i

if((*(SnakeBody+(i<<1)))==food[0]&&

((*(SnakeBody+(i<<1)+1))==food[1]))

{

IsT0GenNewFood=1; break; } } }

while(IsT0GenNewFood);

DisplayBodyCell(food,food+1); //显示食物

}

IsNotEatSelf=1;

for(i=0;i

{ //判断是否吃到自己,蛇头坐标与身体某单元相同

18

if(*(SnakeBody+(i<<1))==*(SnakeBody+(SnakeLength<<1)-2)

&&(*(SnakeBody+(i<<1)+1)==*(SnakeBody+(SnakeLength<<1)-1)))

{

IsNotEatSelf=0;//吃到自己 break; } }

IsNotEatSelf=IsNotEatSelf&&*(SnakeBody+(SnakeLength<<1)-2)>=0

&&*(SnakeBody+(SnakeLength<<1)-2)<24;

IsNotEatSelf=IsNotEatSelf&&*(SnakeBody+(SnakeLength<<1)-1)>=0

&&*(SnakeBody+(SnakeLength<<1)-1)<15;

if(IsNotEatSelf) //如果未吃到自己 {

clear(&x,&y);

for(i=0;i

DisplayBodyCell(SnakeBody+(i<<1),SnakeBody+(i<<1)+1); }

IsToStep=0;

Play8(0,0,3,shu0+((SnakeLength/10)<<4));//显示得分 Play8(0,1,3,shu0+(((SnakeLength))<<4)); }

}

while(IsNotEatSelf);

//如果吃到自己,则上面大循环结束,游戏结束。 TR0=0; DelayINms(450); DelayINms(450); choose12864(2); clear12864();

19

Play16(0,4,1,GameOverWord); //显示“游戏结束”字样。 Play16(0,6,1,GameOverWord+32); Play16(1,0,1,GameOverWord+64); Play16(1,2,1,GameOverWord+96); while(1); }

/*********************************************************************** 函数名:DelayINms 说 明: 延时

输入参数:uint k,要延时的ms数

************************************************************************/ void DelayINms(uint k) {

k=k*125; while(k--); }

/*********************************************************************** 函数名:chekbusy12864

说 明: 检查液晶是否忙,若忙,等到其空闲再退出函数

************************************************************************/ void chekbusy12864() {

uchar dat; EX0=0;

RS=0; //指令模式 RW=1; //读数据 do {

P0=0x00; E=1;

20

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

(*(SnakeBody+(SnakeLength<<1)-1))++; IsMovInVetical=1; break; } case 3: //西 {//蛇步进,原次尾单元变成尾单元。SnakeBody向前挪两个字节。 for(i=0;i

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com