童年时光,小小贪吃蛇.doc_第1页
童年时光,小小贪吃蛇.doc_第2页
童年时光,小小贪吃蛇.doc_第3页
童年时光,小小贪吃蛇.doc_第4页
童年时光,小小贪吃蛇.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这个贪吃蛇游戏从5月4日到5月8日四天中凭着小时候玩这个游戏的感觉慢慢写出来的,也没多大去参考其他人的程序,同时也没运用队的数据结构知识编写,而是运用数组,所以相对来说漏洞挺多的,当然最主要的那一份逻辑构思,希望这里能帮助其他人给到一些灵感由于刚接触单片机也是这学期开始,编写菜单程序过程中也不免有累赘的地方。总模块:主函数main:当然,参考他人程序,主函数免不了是主要参照,这里我就把主函数的源代码部分贴出来由于menu是此次游戏编程的重要部分,其他部分也只是一些比较公用的模块,加上大家用的引脚各不一样,为方便移植也没必要限定了引脚,所以就不贴出来了这里我就把menu的全部源代码全粘贴下来/*/#include#includelcd12864.h#includekeyscan.h#includedelay.hunsigned char layer;/当前画面值 unsigned char addr;/光标地址unsigned char lever;/记录游戏等级unsigned char score3;/记录游戏分数/* 蛇 */xdata unsigned char she32;/记录蛇头和蛇身的地址unsigned char size;/记录蛇当前长度unsigned char wayflag;/记录蛇当前走向bit goflag;/记录蛇该不该走,1走,0停unsigned char she_food6;/记录蛇饵地址bit foodflag;/记录蛇饵该不该更换/*定时器1初始化*/void init_timer1(void)TMOD|=0x10;TH1=-50000/256;TL1=-50000%256;EA=1;ET1=1;TR1=1;/*画面处理*/void menu(unsigned char layer)unsigned char flag;/按键值/*主菜单*/if(layer=0)write_com(0x01);/清屏write_string(1,2,贪吃蛇游戏);write_string(2,1,-开始游戏);write_string(3,1,-等级调节);write_string(4,1,-排名);addr=0x90;write_com(addr);/此画面按键设置while(1)flag=keypro();if(flag=U)if(addr=0x88)addr=0x90;else if(addr=0x98)addr=0x88;write_com(addr);else if(flag=D)if(addr=0x90)addr=0x88;else if(addr=0x88)addr=0x98;write_com(addr);else if(flag=E)if(addr=0x90)layer=1;else if(addr=0x88)layer=2;else if(addr=0x98)layer=3;break;/*/*/*/*游戏画面*/if(layer=1)unsigned char *pshe;/指向蛇的中间向量unsigned char she_last;/记录蛇尾的地址unsigned char she_last1;/记录蛇尾的前一步的地址bit out=0;/退出标志,1退出unsigned char score_temp;/记录临时的分数unsigned char she_food_temp6;write_com(0x0C);/关闭光标,停止闪烁write_com(0x01);/清屏write_string(2,2,Waiting);DelayMs(250);DelayMs(250);write_dat(.);DelayMs(250);DelayMs(250);write_dat(.);DelayMs(250);DelayMs(250);write_dat(.);DelayMs(250);DelayMs(250);write_com(0x01);/清屏init_timer1();/定时器1初始化she1=0x91;she2=0x90;wayflag=R;/蛇默认当前走向向右size=2;/蛇当前长度默认为2,即2个单位长度goflag=0;/蛇默认不该走write_str(she1,口);/代表蛇头的字符write_str(she2,田);/代表蛇身关节的字符she_last=shesize;/she_food_temp0=0x85;/she_food_temp1=0x96;/she_food_temp2=0x9E;/she_food_temp3=0x8D;/she_food_temp4=0x8F;/she_food_temp5=0x97;while(1)flag=keypro();if(goflag=1)goflag=0;write_str(she_last, );she_last1=she_last;for(pshe=she+size;psheshe+1;pshe-)write_str(*pshe,田);write_str(she1,口);she_last=shesize;/吃到食物for(pshe=she_food;psheshe+1;pshe-)if(*pshe=she1)/蛇身地址与蛇头地址相同代表蛇吃到自己了/记录分数score_temp=size;for(pshe=score;pshe*pshe)*pshe=score_temp;break;write_com(0x01);write_com(0x0E);/开启光标但不闪烁write_string(1,1,你吃到自己啦!);write_string(2,6,-蛇蛇);write_string(3,1,-重新开始);write_string(4,1,-返回主菜单);addr=0x88;write_com(addr);/清空蛇饵she_food0=she_food1=she_food2=she_food3=she_food4=she_food5=0;while(1) flag=keypro();if(flag=U|flag=D)if(addr=0x88)addr=0x98;elseaddr=0x88;write_com(addr);else if(flag=E)flag=*;/避免与下面的语句有撞if(addr=0x98)out=1;layer=0;else/重新开始write_com(0x01);/清屏write_com(0x0C);/关闭光标she1=0x91;she2=0x90;wayflag=R;/蛇默认当前走向向右size=2;/蛇当前长度默认为2,即2个单位长度goflag=0;/蛇默认不该走write_str(she1,口);/代表蛇头的字符write_str(she2,田);/代表蛇身关节的字符she_last=shesize;break;/显示食物if(foodflag=1)foodflag=0;for(pshe=she_food_temp;psheshe_food_temp+6;pshe+)write_str(*pshe+0x80, );she_food_temp0=she_food0;she_food_temp1=she_food1;she_food_temp2=she_food2;she_food_temp3=she_food3;she_food_temp4=she_food4;she_food_temp5=she_food5;for(pshe=she_food;pshe重新开始);write_string(4,1,-返回主菜单);addr=0x88;write_com(addr);/清空蛇饵she_food0=she_food1=she_food2=she_food3=she_food4=she_food5=0;while(1) flag=keypro();if(flag=U|flag=D)if(addr=0x88)addr=0x98;elseaddr=0x88;write_com(addr);else if(flag=E)if(addr=0x98)out=1;layer=0;else/重新开始write_com(0x01);/清屏write_com(0x0C);/关闭光标she1=0x91;she2=0x90;wayflag=R;/蛇默认当前走向向右size=2;/蛇当前长度默认为2,即2个单位长度goflag=0;/蛇默认不该走write_str(she1,口);/代表蛇头的字符write_str(she2,田);/代表蛇身关节的字符she_last=shesize;break;if(out=1)out=0;break;/*/*/*/*等级调节菜单*/if(layer=2)write_com(0x01);/清屏write_string(1,1,-低级);write_string(2,1,-中级);write_string(3,1,-高级);write_string(4,1,-返回主菜单);addr=0x80;write_com(addr);/此画面按键设置while(1)flag=keypro();if(flag=U)if(addr=0x90)addr=0x80;else if(addr=0x88)addr=0x90;else if(addr=0x98)addr=0x88;write_com(addr);else if(flag=D)if(addr=0x80)addr=0x90;else if(addr=0x90)addr=0x88;else if(addr=0x88)addr=0x98;write_com(addr);else if(flag=E)if(addr=0x80)lever=6;else if(addr=0x90)lever=3;else if(addr=0x88)lever=1;layer=0;break;/*最高分菜单*/if(layer=3)write_com(0x01);/清屏write_string(1,1,冠军);write_string(2,1,亚军);write_string(3,1,季军);write_string(4,1,-返回主菜单);write_num(1,4,score0);write_num(2,4,score1);write_num(3,4,score2);addr=0x98;write_com(addr);/此画面按键设置while(1)flag=keypro();if(flag=E)layer=0;break;/*定时器1中断程序*/void timer1_isr(void) interrupt 3 using 1static unsigned char i=0;static unsigned char l=0;unsigned char j;unsigned char k;TH1=-50000/256;TL1=-50000%256;i+;l+;if(i=lever*5)i=0;goflag=1;/标志蛇可以移动一步for(j=size;j1;j-)shej=shej-1;if(wayflag=L)if(she1=0x80|she1=0x90|she1=0x88|she1=0x98)she1+=7;else she1-=1;else if(wayflag=R)if(she1=0x87|she1=0x97|she1=0x8F|she1=0x9F)she1-=7;elseshe1+=1;else if(wayflag=U)if(she1=0x80&she1=0x90&she1=0x88&she1=0x98&she1=0x80&she1=0x90&she1=0x88&she1=0x98&she1=0x9F)she1-=24;if(l=lever*40) l=0;foodflag=1;for(j=0;j6;j+)s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论