欢迎来到天天文库
浏览记录
ID:54767804
大小:45.50 KB
页数:12页
时间:2020-04-21
《用C++(TC3.0)做的贪吃蛇游戏---.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用C++(TC3.0)做的贪吃蛇游戏---//游戏中使用链表的思路来自于金色甲虫站点,在此表示感谢。/*贪吃蛇游戏引擎:MADEBYEMILMATTHEW05/1/16COMPILEENVIROMENTTC3.0注意事宜1请设定好BGI文件路径2上下左右键控制蛇移动,回车键暂停,ESC键退出.*//*难点及重点:1)采用链表的结构来表示蛇对象,要求我们学会用用一个链表类.2)画图时,使用一个抽象类AbstractDraw,它的派生类有三个: Drawhead,Drawbody,Drawtail,DrawBean;分别用以画头,身体,尾部及豆子. 一开始都要画,
2、游戏过程中,只要重画头及擦去尾巴即可。3)由于TC3不支持友元,所以对链表的插入工作需要放在Snake类本身中,稍显不适。3)碰撞检测: a)用一个数组加一个随机数过程生成不与蛇相交的一个位置,画出豆子.用以标识蛇头的坐标与豆子坐标重合时,蛇增长一节。 b)与墙的碰撞检测,进行X,Y是否出界的CHECK即可.核心算法描述:1声明游戏中相关的对象及标志变量:ScreenLayOutTest;DrawheadsDh;DrawbodysDb;Cleantail sCt… 2初始化图形库,绘制场景图形及一开始的完整的蛇。 sDh.Draw(h.getx(),h.ge
3、ty());sDb.Draw(b1.getx(),b1.gety());…. 同时用一个检测函数在不与蛇相交处随机生成一粒豆子. 3利用一个while(Gamestatur!=Exit)来控制整个游戏的进程{ 4.1利用while(bioskey(1)==0)进入一个不按键时的循环{ a)Render,首先进入的动态绘制区,通过每次传回的GotBean来确定以何种方式画新的一帧:是否要增长一节? if(GotBean) 在头部与第二节处做链表插入动作,并改变相关的方向值及mx,my,mdir值。
4、 蛇头变蛇身,在MDIR(方向标识变量)处画蛇头。并生成新的豆子. Else 遍历蛇的链表,把前一节的DIR(方向标识变量)传给一节(注意是从链表尾部往头部遍历), 并相应的改变mx,my及dir的值. 蛇头变蛇身,在MDIR(方向标识变量)处画蛇头,擦蛇尾. Delay2(0.1);//自编的DELAY函数,精度0.05秒,不随机器性能而有过大变动 b)DataChecking{ 1碰边检测:是,则GameStatur=Failure; 2是否咬到自己的检测.:是,则
5、GameStatur=Failure 3是否碰到障碍物:是,GameStatur=Failure 4是否吃到豆子的检测:是,则GotBean=true; } 4.2按下键后,用key=bioskey(0);得到键值,再用 switch(key){ casekeyUp:…来做相应的数据处理。 其中:上下左右键将改变头部的dir方向。 ESC使GameStatur变成Exit; Enter使游戏处于暂停状态,用一个内嵌的键盘检测来做.
6、 }//LOOPINGBODY这就是贪吃游戏的核心实现了,采用链表使得算法的设计上轻松的不少,当然,实现起来其中细节另有一番推敲及改进。*/#include#include#include#include#include#include#include#include#includecharaddress[]="C:\TC\bgi";intScore=0;typedefintbool
7、;constinttrue=1;constintfalse=0;constintfudu=10;intconstKeyUp=0x4800;intconstKeyDown=0x5000;intconstKeyLeft=0x4b00;intconstKeyRight=0x4d00;intconstKeyEnter=0x1c0d;intconstKeyEsc=0x11b;voidDelay2(doubleTimes,floatSecPerFrame);enumGameStaturs{Gaming,Win,Failure,Exit};enumDirection{Up,
8、Down,Left,Right};Ga
此文档下载收益归作者所有