教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

MFC写的贪吃蛇代码(7)

来源:网络收集 时间:2026-08-28
导读: ///////////////////////////////// 下面由我来详细分析代码 if(Snake[0].len==2)SetTimer(1,370,NULL); if(Snake[0].len==3)SetTimer(1,270,NULL); if(Snake[0].len==6)SetTimer(1,200,NULL); if(Snake[0].len==9)

/////////////////////////////////

下面由我来详细分析代码

if(Snake[0].len==2)SetTimer(1,370,NULL); if(Snake[0].len==3)SetTimer(1,270,NULL); if(Snake[0].len==6)SetTimer(1,200,NULL); if(Snake[0].len==9)SetTimer(1,100,NULL);

此段代码的作用是根据蛇的长度来进行SetTimer()函数的定义,可以根据长度来进行游戏难度的设定,如上代码分别370ms 270ms 200ms 100ms进行一次新的移动。

//撞界判断

if(Snake[0].x*20<=37||Snake[0].y*20<=37||Snake[0].x*20>=462||Snake[0].y*20>=462) {

KillTimer(1);

AfxMessageBox(soure); }

这里为什么要乘以20呢?由于我们初始化的时候是

Snake[0].x=10; Snake[0].y=10; Snake[1].x=11; Snake[1].y=10; Snake[2].x=12; Snake[2].y=10;

所以只是把贪吃蛇的起始位置“搬移”到20倍的位置 当然可以等价于

Snake[0].x=10*20; Snake[0].y=10*20; Snake[1].x=11*20; Snake[1].y=10*20; Snake[2].x=12*20; Snake[2].y=10*20;

蛇的一节身体为一个矩形块,这样表示每个矩形块只需起点坐标x 和y身体是不断增长的,所以用数组存放每一节的坐标

//蛇身相撞判断 if(Snake[0].len>3)

for(int sn=Snake[0].len-1;sn>0;sn--) {

if(Snake[0].x*20==Snake[sn].x*20&&Snake[0].y*20==Snake[sn].y*20) {

KillTimer(1);

AfxMessageBox(soure); // s=0; } }

这段是最好理解的了,由于判断蛇自己是否咬到了自己,根据蛇长sn,进行sn次for sn-1次循环

并且和Snake[0].x进行比较(之所以进行sn-1次那肯定是不包括蛇头而且蛇的长度也必须大于3才会发生自己咬自己的情况)

KillTimer(1);是停止计时器;和之前的SetTime()对应而已

AfxMessageBox(soure);这里不深究,总之就是输出一个原样输出内容

pDC->SelectStockObject(WHITE_PEN);//把白色的“PEN”选入设备进行画图 pDC->Rectangle(Snake[Snake[0].len-1].x*20,Snake[Snake[0].len-1].y*20,

(Snake[Snake[0].len-1].x+1)*20,(Snake[Snake[0].len-1].y+1)*20);//让它去画最后一个节点 for(int i=Snake[0].len-1;i>0;i--)//贪吃蛇的蛇身移动 {

Snake[i].x=Snake[i-1].x; Snake[i].y=Snake[i-1].y; }

这段的知识点要严重的说明一下

1 为什么要专门用白笔画最后一个呢?因为我们的游戏界面是用白色的,贪吃蛇移动的时候,肯定是蛇头向前走一单位,而尾部肯定要“擦除”掉一个单位,那怎么擦除呢?我们只能用和背景色一样的画笔。原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节

MFC写的贪吃蛇代码(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/518913.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)