推箱子游戏51单片机课设计(最全).doc

上传人:仙人指路1688 文档编号:2538157 上传时间:2023-02-20 格式:DOC 页数:58 大小:930KB
返回 下载 相关 举报
推箱子游戏51单片机课设计(最全).doc_第1页
第1页 / 共58页
推箱子游戏51单片机课设计(最全).doc_第2页
第2页 / 共58页
推箱子游戏51单片机课设计(最全).doc_第3页
第3页 / 共58页
推箱子游戏51单片机课设计(最全).doc_第4页
第4页 / 共58页
推箱子游戏51单片机课设计(最全).doc_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《推箱子游戏51单片机课设计(最全).doc》由会员分享,可在线阅读,更多相关《推箱子游戏51单片机课设计(最全).doc(58页珍藏版)》请在三一办公上搜索。

1、51单片机课程设计 题 目:基于51单片机的推箱子游戏设计 目 录1、课程设计目的12、课程设计题目和实现目标13、设计方案14、Proteus仿真原理图75、程序设计96、调试总结287、设计心得体会28参考文献29附录:程序代码-291、课程设计目的MCS-51单片机课程设计是与MCS51单片机课程相配套的实践教学环节。MCS51单片机是一门实践性很强的专业基础课,通过课程设计,达到进一步理解单片机的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。培养大胆发明创造的设计理念,为今后就业打下良好的基础。通过

2、课程设计,掌握以下知识和技能:1. 单片机应用系统的总体方案的设计;2. 单片机应用系统的硬件设计;3. 单片机应用系统的软件程序设计;4. 单片机开发系统的应用和调试能力 2、 课程设计题目和实现目标2.1 课程设计题目:基于51单片机的推箱子游戏设计2.2实现目标设计一款在以51单片机为核心的硬件系统中运行的推箱子游戏。游戏一共9关,功能包括:(1)显示游戏开机界面和游戏界面;(2)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,通过小人推动箱子,把箱子推到指定的目的地为过关,箱子只能推不能拉;(3)用于可以任意选关,并能随时退出、进入游戏;(4)每一关都有时间计时,显

3、示当前玩家的游戏耗时。3、设计方案根据设计目标,整个系统框图如下:图1 系统框图3.1 控制模块选用ATMEL公司 生产的AT89C52为主控芯片,它是是一个低电压,高性能CMOS 8位单片机,主要功能特性如下:1、 兼容MCS51指令系统;2、8k可反复擦写(大于1000次)Flash 7、2个串行中断,可编程UART串行通道;8、2个外部中断源,共8个中断源;9、2个读写中断口线,3级加密位;10、 低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;本次课设选用PDIP封装的 AT89C52芯片,其引脚功能如图2所示,图3为最小系统: 图2 引脚功能图3 最小系统U1:AT89C52,DIPf

4、封装;C1,C2:22pf瓷片电容C3:10uf电解电容;X1:12M晶振R1:10K金属膜电阻3.2 显示模块选用内置T6963C控制控制器的12864图形点阵液晶(以下简称Lcd12864)做为显示模块。T6963C控制器的最大特点具是有硬件初始值设置功能,显示驱动所需的参数,例如:占空比系数、每行驱动传输的字节数、字符的字体选择等均由引脚电平设置。所以,液晶显示模块在上电时T6963C控制器就进行初始化设置,软件操作的主要精力就可以全部用于显示界面的设计上。 市场上出售此控制器的液晶很多,本次课设选用深圳市晶日达科技有限公司生产KXM12864F.LCD12864和单片机以模拟方式连接,

5、即通过模拟操作时序的方法控制液晶显示。具体的接线图如图4所示图4 显示模块RP1:1k排阻,用于做P0口的上拉电阻;LCD1:KXM12864F3.3按键模块16个轻触按键连接成4*4矩阵键盘,做为按键模块,如图5所示图5 4*4矩阵键盘最终系统的硬件系统如下:图6 硬件系统4、 Proteus仿真原理图 在proteus搭建的仿真原理图如下:图7 硬件系统图8 开机画面图9 游戏画面图10 游戏画面5. 程序设计5.1 Lcd12864显示驱动程序图11 读写指令/数据时序图准备向Lcd12864进行操作时,首先要读取lcd12864的当前的状态,只有lcd12864不忙的时候才能读写操作和

6、数据。相关程序如下:/*函数名:status_bit_01()功能:状态位sta1(读/写指令),sta0(读/写数据)判断入口参数:返回值:状态值i*/ unsigned char status_bit_01() unsigned char i; P0=0xff;cd=1;rd=0;for(i=10;i0;i-)if(P1&0x03)=0x03)break;rd=1;return i; /*函数名:write_data(unsigned char dat)功能:写数据入口参数:8位数据dat返回值:*/void write_data(unsigned char dat)while(statu

7、s_bit_01()=0);rd=1;cd=0;wr=0;P0=dat;wr=1;cd=1; /*函数名:write_cmd1(unsigned char cmd)功能:写命令,无参数入口参数:8位命令cmd返回值:*/void write_cmd1(unsigned char cmd)while(status_bit_01()=0);rd=1;cd=1;wr=0;P0=cmd;wr=1;cd=0; /*函数名:write_cmd2(unsigned char cmd)功能:写单参数命令入口参数:8位数据dat,8位命令cmd返回值:*/void write_cmd2(unsigned cha

8、r dat,unsigned char cmd)write_data(dat);write_cmd1(cmd);/*函数名:write_cmd2(unsigned char cmd)功能:写双参数命令入口参数:8位数据data1,8位数据data2,8位命令cmd返回值:*/void write_cmd3(unsigned char data1,unsigned char data2,unsigned char cmd) write_data(data1); write_data(data2); write_cmd1(cmd);图12 为Lcd12864的指令集,向Lcd12864写入相关的指

9、令,即可控制其显示。图12 Lcd12864的指令集使用液晶前必须对其进行初始化操作,初始化的内容包括光标指针设置,图形区首地址,图形区宽度,显示方式设置,图形方式显示,标形状设置。相关程序如下:/*函数名:init_12864()功能:初始化lcd12864入口参数:返回值:*/void init_12864()wr=1;rd=1;cd=1;rst=1;/初始化write_cmd3(0x01,0x00,0x21);/光标指针设置write_cmd3(0x00,0x00,0x42);/图形区首地址write_cmd3(16,0x00,0x43);/图形区宽度 write_cmd1(0x88);

10、/显示方式设置,正常显示write_cmd1(0x98);/图形方式显示,不显示字母,只打点write_cmd1(0xa0);/光标形状设置1 0 1 0 0 N2 N1 N05.2 按键扫描程序初始P1的电平为0x0f,当有按键下时,电平发生变化,开始程序开始扫描判断哪个按键被按下,并返回按键号,相关程序如下:/*函数名:keys_scan()功能:按键扫描入口参数:返回值:按键号keyno */unsigned char keys_scan() unsigned char tmp;unsigned char keyno;if(P1 != 0x0f)P1 = 0x0f; delayms(1)

11、; tmp = P1 0x0f;switch(tmp)case 1: keyno = 0;break;case 2: keyno = 1;break;case 4: keyno = 2;break;case 8: keyno = 3;break;default:keyno = 16;P1 = 0xf0;delayms(1);tmp = (P1 4) 0x0f;switch(tmp)case 1:keyno += 0;break;case 2:keyno += 4;break;case 4:keyno += 8;break;case 8:keyno += 12;break;P1=0x0f;ret

12、urn keyno; 5.3 游戏元素设计出现在显示画面中的游戏元素总共有6种:墙壁,箱子,小人,目的地,空白,箱子在目的地。每个元素在液晶上以一个字符显示,即88的点阵。在字模提取软件设计各个元素,并获得元素的显示码。显示码的每8位构成字符的一行,8就行有8个字节。其中1表示该点显示,0表示该点不显示。图13-是在字模提取软件设计的各个元素, 图13 小人 图14 墙壁 图15 箱子 图16 目的地 图17 箱子在目的地 图18空白 定义一个二维数组elements8,存储这些点阵信息。其中第一个地址为元素代号unsigned char code elements8=0x00,0x00,0x

13、00,0x00,0x00,0x00,0x00,0x00, /0空白0x3C,0x7E,0x66,0x3C,0x7E,0x99,0x3C,0x66, /1人物0x7F,0x7F,0x7F,0x00,0xEF,0xEF,0xEF,0x00, /2砖头0xFF,0xC3,0xA5,0x99,0x99,0xA5,0xC3,0xFF, /3箱子0x00,0x18,0x24,0x4A,0x52,0x24,0x18,0x00, /4目标0xFF,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0xFF, /5箱子到达目标 ;5.4元素的显示由于T6963c液晶是按以列1字符(8点),行1点来定位

14、的,所以显示时,要先定位显示字符位的列字符和行字符首地址,即行*0x80+列;再定义一个循环变量i,从0,到7,定位该字符位的8个点行,即行*0x80+列+i*0x10,定位到每个点行后,写入对应的元素字节,即elements元素代号i,就可以在液晶的指定字符位置上显示该元素了。相关元素显示子函数如下:/*函数名:printelement()功能:指定字符位置,显示元素入口参数:列字符地址xh,行字符地址yh,元素代码elnum返回值:*/void printelement(unsigned char xh, unsigned char yh,unsigned char elnum) unsi

15、gned char i;int temp; for(i=0;i8;i+) /行地址加+1temp = yh* 0x80+i*0x10 + xh;write_cmd3(temp&0xff,temp/0xff,add_pos);write_cmd2(elementselnumi,noc_wr); 调用如下程序,对显示元素进行测试,图19为显示效果:printelement(0,1,1); /在第0列,第1行,显示1号元素(小人)printelement(1,1,2); /在第1列,第1行,显示2号元素(墙壁)printelement(2,1,3); /在第2列,第1行,显示3号元素(箱子)prin

16、telement(3,1,4); /在第3列,第1行,显示4号元素(目的地)printelement(4,1,5); /在第4列,第1行,显示5号元素(箱子在目的地上)图19 显示效果5.5 游戏关卡界面设计游戏每关都是在88个字符组成的区域中进行的,只要在每一个字符显示相应的元素,就可以组成游戏界面。定义一个三维数组code level88,存储每一关每一个字符位上要显示的元素。 各关卡的界面如下:/*第1关*/0,0,2,2,2,2,2,0,2,2,2,0,0,0,2,0,2,0,3,0,2,0,2,2,2,0,2,0,0,4,0,2,2,0,0,0,0,2,0,2,2,2,0,2,0,0

17、,0,2,0,2,1,0,0,2,2,2,0,2,2,2,2,2,0,0, 图20 第1关游戏画面/*第2关*/2,2,2,2,2,2,2,2,2,0,0,0,0,0,1,2,2,0,0,0,5,0,0,2,2,0,0,2,2,2,2,2,2,2,0,0,2,0,0,0,2,0,3,0,2,0,0,0,2,0,0,4,2,0,0,0,2,2,2,2,2,0,0,0, 图21 第2关游戏画面/*第3关*/0,0,2,2,2,2,0,0,0,0,2,4,4,2,0,0,0,2,2,0,4,2,2,0,0,2,0,0,3,4,2,0,2,2,0,3,0,0,2,2,2,0,0,2,3,3,0,2,2

18、,0,0,1,0,0,0,2,2,2,2,2,2,2,2,2, 图22 第3关游戏画面 /*第4关*/0,0,0,2,2,2,2,0,0,2,2,2,0,1,2,0,0,2,0,0,3,0,2,0,2,2,0,2,0,2,2,2,2,0,0,2,0,2,4,2,2,0,2,0,0,3,4,2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2, 图23 第4关游戏画面/*第5关*/0,0,0,2,2,2,2,0,0,2,2,2,0,1,2,0,0,2,0,0,3,0,2,0,2,2,0,2,0,2,2,2,2,0,0,2,0,2,4,2,2,0,2,0,0,0,0,2,2,0,0,

19、0,0,0,0,2,2,2,2,2,2,2,2,2, 图24 第5关游戏画面/*第6关*/0,0,0,2,2,2,2,0,0,2,2,2,0,1,2,0,0,2,0,0,3,0,2,0,2,2,0,2,0,2,2,2,2,0,0,2,0,2,4,2,2,0,2,0,0,3,4,2,2,0,3,0,0,0,4,2,2,2,2,2,2,2,2,2, 图25 第6关游戏画面 /*第6关*/0,0,2,2,2,2,2,0,2,2,2,0,0,0,2,0,2,0,3,0,2,0,2,2,2,0,2,0,0,4,0,2,2,0,0,0,0,2,0,2,2,2,3,2,4,0,0,2,0,2,1,0,0,2

20、,2,2,0,2,2,2,2,2,0,0, 图26 第7关游戏画面/*第7关*/0,2,2,2,2,0,0,0,2,2,0,0,2,0,0,0,2,1,3,0,2,0,0,0,2,2,3,0,2,2,0,0,2,2,0,3,0,2,0,0,2,4,3,0,0,2,0,0,2,4,4,5,4,2,0,0,2,2,2,2,2,2,0,0, 图27 第8关游戏画面/*第9关*/0,0,0,2,2,2,2,0,0,2,2,2,0,0,2,0,2,2,0,1,3,0,2,0,2,0,4,3,0,0,2,0,2,0,4,5,0,2,2,0,2,0,4,3,0,2,0,0,2,2,0,0,2,2,0,0,0

21、,2,2,2,2,0,0,0, 图28 第9关游戏画面;5.6 开机画面开机画面是用画图程序制作的一个128像素64像素的单色位图,并用取模软件提取该图像的点阵信息,共1024字节。使用t6963c的写数据地址自动加1的命令写入上述全部1024字节的数据,显示开机画面。图29 开机界面图30 字模提取图31 proteus中显示效果图像的点阵码:/*- 宽度x高度=128x64 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

22、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

23、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

24、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x7C,0xC0,0x06,0x30,0xC6,0

25、x00,0x1F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x86,0xC7,0xF0,0x06,0x1F,0xC7,0xF8,0x30,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0x87,0x86,0x18,0x0C,0x01,0x80,0x0C,0x30,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x01,0x87,0x82,0x18,0x1C,0x01,0x80,0x0E,0x30,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x01,0x87,0x06,0

26、x0C,0x18,0x01,0x00,0x06,0x30,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x0F,0x87,0x07,0x0F,0x10,0x03,0x00,0x0C,0x30,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x0C,0x06,0x00,0x01,0x90,0x43,0x00,0x0C,0x1F,0xFF,0x01,0x80,0x00,0x00,0x00,0x00,0x0C,0x06,0x00,0x01,0x98,0xC3,0x08,0x38,0x00,0x3E,0x03,0x00,0x00,0x00,0x00,0

27、x00,0x0C,0x0C,0x00,0x01,0x8F,0xC3,0x1C,0x38,0x00,0x3C,0x06,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x03,0x1F,0xC7,0xFC,0x7C,0x7F,0xF6,0x0F,0xE0,0x00,0x00,0x00,0x00,0x0F,0x88,0x1E,0x1F,0x1C,0x7F,0x67,0xDC,0xC0,0x03,0x18,0x30,0x00,0x00,0x00,0x00,0x01,0x8C,0x00,0x03,0x18,0x01,0x80,0x0C,0xC0,0x01,0xF0,0

28、x30,0x00,0x00,0x00,0x00,0x03,0x87,0x80,0x03,0x10,0x00,0x80,0x0C,0xC0,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x0E,0x01,0x80,0x03,0x10,0x00,0x9F,0x0C,0xC0,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x0C,0x01,0x80,0x03,0x18,0x0F,0x80,0x0C,0xC0,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x0C,0x01,0x9E,0x1F,0x0E,0x1B,0x80,0

29、x0C,0xC0,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x0C,0x03,0x00,0x03,0x0E,0x31,0x00,0x0C,0x7F,0xF0,0x7F,0xE0,0x00,0x00,0x00,0x00,0x0C,0x06,0x00,0x03,0x1C,0x30,0x9F,0x0C,0x00,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x07,0x86,0x00,0x03,0x38,0x30,0xC0,0x0C,0x00,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x01,0x86,0x1E,0

30、x1F,0x30,0x18,0xC0,0x0C,0x01,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x07,0x86,0x00,0x01,0xB0,0x0F,0x80,0x0C,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x00,0x01,0x98,0x07,0x1F,0x0C,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x00,0x01,0x8C,0x06,0x00,0x0C,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0

31、x00,0x0C,0x06,0x00,0x03,0x07,0x06,0x00,0x0C,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x06,0x0F,0xFF,0x03,0x06,0x00,0x0C,0x03,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x18,0x00,0x03,0x07,0x00,0x18,0x03,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x07,0xF9,0xF0,0x00,0x01,0xFD,0xFF,0xF0,0x01,0xFF,0x80,0

32、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

33、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

34、x00,0x00,0x00,0x00,0xFD,0xFE,0x18,0x7F,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8D,0xB6,0x18,0x31,0xB6,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x1C,0x31,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x30,0x3C,0x31,0x86,0x00,0x00,0x00,0

35、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x3C,0x3F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x30,0x36,0x36,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x30,0x3E,0x36,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x66,0x33,0

36、x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x63,0x33,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x30,0x63,0x31,0x86,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x78,0xF7,0xF9,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

37、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0

38、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,5.7 游戏流程游戏中,程序循环执行按键扫描程序,并做出相应判断。整个程序中,最关键的部分是要根据玩家的输入,控制小人、箱子的移动。定义一个二维数组,用于保存当前游戏状态每

39、个字符位的元素,当玩家按键输入时,改变该数组中相应得数据,再将此二维数组每个数据代码的元素显示出来,就可以出现小人,箱子移动的效果。每关开始,进行游戏初始化。将关卡数据写入上述二维数组中,并记入小人的位置(man_x,man_y)。程序只要根据小人移动方向周围的元素信息,结合游戏规则,只要判断能够移动箱子、小人的情况,才显示出来,而不用对不能移动的情况进行判定,这大大简化了程序的编写。游戏流程框图如下(以向上移动为例,其他方向类似):图32 流程框图1图33 流程框图2图34 流程框图3小人、箱子移动示意图(按列看,不同的列对应上述流程的不同情况):图35 移动示意图5. 8完成本关每进行一次

40、移动后就进行是否过关的判定。将记录本关每个字符位状态的数组与存储本关原始信息的数组的对应数据进行比较,若发现目的地上没有箱子,则不算过关,程序退出,进入等待按键输入程序,若所有的目的地都有箱子,则游戏过关,初始化下一关游戏,显示下一关游戏界面。/*函数名:level_suc()功能:判断是否通过本关卡入口参数:返回值:*/void level_suc()unsigned char i,j,k=1;for(i = 0; i 8; i+) /行if(k=0) break;for(j = 0; j 8; j+)/列 if(levellevelgij=4|levellevelgij=5)/循环扫描目标位置都有箱子在,此关卡就通过if(level_tempij=5)k=1;/此位置箱子在目标位置上elsek=0;/有目标位置没有箱子break;if(k=1)/所有目标位置都有箱子if(levelg8)levelg+=1;else levelg=0; /通关后重新从第一关开始Timtcou

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号