第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/5/25 0:10:35 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

(*(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

基于51单片机的贪食蛇游戏机开发-精品 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c58wvj85ttr3ef8l93tv1_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top