MFC写的贪吃蛇代码(4)
Step 2 对OnKeyDown()具体添加代码
void CSNAKEView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
// TODO: Add your message handler code here and/or call default switch(nChar) {
case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break; case VK_DOWN:if(Snake[0].direct!=1)Snake[0].direct=2;break; case VK_LEFT:if(Snake[0].direct!=4)Snake[0].direct=3;break; case VK_RIGHT:if(Snake[0].direct!=3)Snake[0].direct=4;break; } CView::OnKeyDown(nChar, nRepCnt, nFlags); CView::OnKeyDown(nChar, nRepCnt, nFlags); }
OnKeyDown函数的第一个参数 UINT nChar 是接收用户键入的信息,然后我们用switch进行选择判断 代码说明:
Snake[0]代表的是蛇头,我们对蛇头的方向Snake[0].direct进行判断。
case VK_UP:if(Snake[0].direct!=2)Snake[0].direct=1;break;
意思就是当Snake[0].direct的方向此时并不等于“下”的时候,才能做出“上”的操作动作,否则则忽略用户“向上”的操作按键效果
Step 3 对OnRButtonDown()具体添加代码
void CSNAKEView::OnRButtonDown(UINT nFlags, CPoint point) {
// TODO: Add your message handler code here and/or call default // TODO: Add your message handler code here and/or call default CString str;
str.Format(\AfxMessageBox(str);
CView::OnRButtonDown(nFlags, point); CView::OnRButtonDown(nFlags, point); CView::OnRButtonDown(nFlags, point); }
这个函数功能是:用鼠标右键屏幕,就会马上显示当前位置的坐标信息。
其实这个函数并不是本游戏中必要添加的函数,只是为了在后面游戏页面的设计的时候可以用鼠标右键屏幕了解大概的屏幕坐标信息,才特地做的
这里补充一个知识点
WIN32坐标系有3种 1 世界坐标系 2 页面坐标系 3 设备坐标系
世界坐标系与页面坐标系称谓“逻辑空间”,实际上就等同于我们现实生活中的数学坐标系一样。
设备坐标系则不然,电脑屏幕就是一个用设备坐标系的,特征为以用户区窗口左上角为(0 , 0)原点,X坐标向右为正,Y坐标向下为正。
Step 4
void CSNAKEView::oninit() {
CDC *pDC=GetDC();
CBrush DrawBrush=(RGB(100,100,100));
CBrush *Drawbrush=pDC->SelectObject(&DrawBrush); for(int i=0;i<=snake[0].l-1;i++)
pDC->Rectangle(snake[i].x*20,snake[i].y*20,(snake[i].x+1)*20,(snake[i].y+1)*20); pDC->SelectObject(DrawBrush); }
代码说明:
利用Windows给我们提供的CDC类来进行画图,我们首先用一个指向CDC类的指针去接受与该窗口相关联的DC句柄,然后用定义画刷一个DrawBrush对象,并且用RGB(100,100,100)来给画刷初始化颜色。并且用SelectObject(&DrawBrush);函数把对象画刷选入到设备描述表中,用for循环依次把贪吃蛇的3个节点画出来。
void far rectangle(int left, int top, int right, int bottom);
这个函数的的功能根据
函数功能:该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充.
Step 5 控件添加代码
void CSNAKEView::OnStart() {
// TODO: Add your command handler code here SetTimer(1,3000,NULL);
AfxMessageBox(\秒后开始游戏!\}
void CSNAKEView::OnPause() {
// TODO: Add your command handler code here KillTimer(1);
AfxMessageBox(\暂停游戏...\}
void CSNAKEView::OnExit() {
// TODO: Add your command handler code here AfxMessageBox(\退出游戏...\
exit 0; }
void CSNAKEView::OnContinue() {
// TODO: Add your command handler code here SetTimer(1,10,NULL); }
代码说明:
由于之前我们设定了WM_TIMER消息,我们能运用计时器功能
用WM_TIMER来设置定时器
先请看SetTimer这个API函数的原型
…… 此处隐藏:568字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




