【文件属性】:
文件名称:贪吃蛇游戏程序实现原理代码
文件大小:893B
文件格式:SLN
更新时间:2013-08-04 09:48:06
贪吃蛇游戏程序实现
CJds_snakeView类
Struct list
{
int x;
int y;
};
点结构,x表示横坐标,y表示纵坐标。
成员变量:
int start;start=1开始游戏,start=0停止游戏。
int difficulty;表示游戏难度,等于10表示容易,等于6表示普通,等于3表示困难,等于2表示特困。
int last_aspect;表示蛇之前前进的方向,用于判断防止蛇逆行的。
int can_new;表示是否添加新食物。等于1表示产生新的食物,等于0表示产生之后不不要再产生食物。
int count;表示蛇的节数;
CRect rct;表示矩形方格;
list a[100];保存蛇的长度;
list b;用来保存蛇头的坐标位置;
int aspect;表示蛇前进的方向
等于0表示蛇向右前进;
等于1表示蛇向下前进;
等于2表示蛇向左前进;
等于3表示蛇向上前进;
int xx;表示食物的x坐标;
int yy;表示食物的y坐标;
成员函数:
void Init();初始化蛇的节数,并确定了节数的坐标位置。首先初始化蛇的前进方向aspect=0是向右前进的,last_aspect=0用来保存蛇当前前进的方向。并且初始化蛇的节数为4节,并指明了它们的坐标位置。can_new=1表示产生一个新的食物。
void aliveordie();判断蛇是死还是活着。有两种情况,一种是蛇自己撞到自己,表示死了,start=0从新开始游戏,另一种是超出了界面(20,20,420,420)撞到了墙start=0也从新开始游戏。
double random(double start,double end);在start和end坐标之间产生随即数;
消息处理事件:
(1)void onTimer(UINT nIDEvent);在OnCreate()创建计时器SetTimer(),来触发OnTimer事件,所以要首先销毁时间计时器,然后调用aliveordie()函数判断蛇的生死情况,CString str_count;
str_count.Format("分数:%d",count-4)显示蛇的节数,TextOut()指出坐标输出文本,创建设备上下文,和创建位图。然后把位图选择到设备上下文上,填充颜色为白色。
在位图上绘制两个矩形线框:
Rectangle(CRect(10,10,440,440));
Rectangle(CRect(20,20,430,430));
显示位图(BitBlt(0,0,1000,1000,&MenDC,0,0,SRCCOPY));
判断如果游戏开始(start==1),b.x=a[0].x用b.x来保存蛇头的横坐标;b.y=a[0].y用b.y来保存蛇头的纵坐标。如果aspect==0表示蛇向右前进,aspect=1表示蛇向下前进,aspect==2表示蛇向左前进,aspect==3表示蛇向上前进,a[1].x=b.x;a[1].y=b.y;把蛇头的坐标付给了a[1],说明蛇头改变了前进的方向。绘制蛇头矩形方格,并且设置蛇头的颜色为红色,蛇身是三个黄色的矩形方格。if (a[0].x==xx && a[0].y==yy)判断蛇头的位置与食物的关系,现在的情况说明蛇吃了食物,蛇的节数加一,各个节数的坐标向前进一位。调用random()函数产生随即的食物,然后判断食物随即产生的位置与蛇的位置,如果产生的食物在蛇身体上,要从新调用random()函数随即再产生食物。产生的食物颜色为绿色。int m_timer=SetTimer(1,difficulty*30,NULL);计时间隔,计时间隔的快慢是根据难易程度的不而确定的。销毁位图、销毁设备上下文。
(2)OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);判断蛇当前前进的方向,当aspect返回0,表示蛇前进的方向是向右,当aspect返回1,表示蛇前进的方向是下,当aspect返回2,表示蛇前进的方向是向左,当aspect返回3,表示蛇前进的方向是向上。
(3)点击菜单按钮调用以下函数:
OnDifficultyEasy();OnDifficultyHard();OnDifficultyNormal();OnDifficultyVeryhard();OnButtonStart();
网友评论
- 没测试,不知道是否好使。