版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、五子棋游戏 详细设计1、利用 MFC 生成五子棋游戏应用程序框架具体 执行 VC 程 择Fil w命令,弹出 New框.单击 标签,转到 Projects MFC name文本框中输入Fivechess_44 。Lacat 文本框是指项目的本地路径 。单击按钮,弹出 MFC 1 对话框。选中单选按 (3)单击完成按钮,则建立一个单文档应用 。2 发2.1 棋盘设计1.在已创建的 中添加画棋盘 先” 头文件中定义一个用于显示棋盘的自定义公有 void Checkerboard(CDC*pDC);然后在“Fivechess_44View.cpp”源文件中实 void CFivechess_44Vi
2、ew:Checkerboard(CDC*pDC)for(int i=0;iMoveTo(i*50,0);/画笔移动到 点pDC-LineTo(i*50,1000); / 画笔从点到(i*50,1000)点for(i=0;iMoveTo(0,i*50);pDC-LineTo(1000,i*50);2.在应用程序 的 On 函数中调用该画棋盘函 将 pDC 对象作为实参 传递给 Checkerboard()函数,代码如下:void CFivechess_44View:OnDraw(CDC* pDC) pDoc = GetDoASSERT_VALID(pDoc);/ TODO: add draw c
3、ode for nativedata here/调用自定义的画键盘函 数3.编译运行得到如下效果:一个空棋盘2.2 放置棋子功能的开发按照规划,棋子使用鼠标的左键和右键(分别用这两键来表示下棋的双方)来进行单机下棋,即是当用户单击左键时,下黑色棋子,用户单击右键时,下白色棋子。因此,必须为鼠标添加鼠标左键和鼠标右键单击的鼠标消息处理 如下:1.右击 CFiw 类,调用添加消息处理函数 Add dler2.添加消息处 数 和 处理函 Exisiting退出对话框。并添加消息处理函数代码。如下图所示 :添加鼠标左键和右键的消息处理函 (1).左键消息void nFlags,CPointpoint)
4、/ TODO: Add your messa code here and/orcall default brush = new ;/定义黑色画 刷CDC* pDC = this-GetDC();/获取当前的图形设备指 针/选中该黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20); point(2).右键消息void CFivechess_44View:OnRB
5、uttonDown(UINT nFlags,CPointpoint)/ TODO: Add your handlercode here and/orcall default brush = new CBrush(RGB(255,255,255) ;/定义白色画 刷CDC* pDC = this-GetDC();/获取当前的图形设备指 针/选中该白色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+2
6、0,tempPoint.y+20); point到此便将画棋盘和棋子的代码编好,编译运行如下:左击鼠标左键画黑点,右击鼠标右 点3.但程序至此尚有两点未 其一,下棋子的约束条件,即双方按顺序一人下一次才可第二次落棋子。其二,同一方格不能重复下棋 解决第一个问题,添加以下代 (1) 在 中添加一个公有的整形变量int ; /定义保存左键或右键下棋的标记变 量(2) 构造函数将下棋的顺序初始化为左 CFivechess_44View:CFivechess_44View()/ TODO: add constructioncode hereRightORLet=0;/初始化默认 下(3) 修改鼠标的左
7、键和右键的单击消息处理函数,在画棋子之前判断轮到 哪方下棋,代码如下:左键代码:void nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call default ) brush = new ;/定义黑色画 刷CDC* pDC = this-GetDC();pDC-SelectObject(brush);/获取当前的图形设备指 针/选中该黑色 for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-2
8、0,tempPoint.x+20,tempPoint.y+20);/鼠标状态变 0 point右键代码:void CFivechess_44View:OnRButtonDown(UINT nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call default CBrus brush= new CBrush(RGB(255,255,255) ;/定义白色画 刷CDC* pDC = this-GetDC();/获取当前的图形设备指 针/选中该白色 pDC-SelectObject(brush);for(int i
9、 = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);RightORLeft-;/鼠标状态变 ,鼠标右键按下后,再次改变鼠 态 point其二,解决第二个 (1)在 Fivechess_44View.h 头文件中加入 3 行公有代码,并且在该头文件中包含r的头文件,代码如下:# vectorlass : CView; chess ;bool is Locat (CPointcp);void tcp);.;(2)根据函数名在正确位置添
10、加或修改 数.添加实现放置棋子函数额判断放置 bool CFivechess_44View:isLocation(CPointcp)bool isLoc = true ;for(int i= 0 ; i chess ; i+)if(cp.x = & cp.y = chessisLoc= false ;isLoc ;void tcp)chessVec.push_back(cp);修改鼠标左键和右键单击的消息处理函数代码如下,并注意为了消除该缺陷,“鼠标消息标志变量变化 约束条件全部实现了 。void nFlags,CPointpoint)/ TODO: Add your messa handle
11、rcode here and/or call defaultif(RightORLeft= 0 ) brush = new ;/定义黑色画 刷CDC* pDC = this-GetDC();/获取当前的图形设备指 针/选中该黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint); ;/画了该点后,将该点插入 中/鼠标消息标志变量变化 ) pointvo
12、id CFivechess_44View:OnRButtonDown(UINT nFlags,CPointpoint)/ TODO: Add your messa handl code here and/or call if(RightORLeft= 1 ) brush = new CBrush(RGB(255,255,255) ;/定义白色画 刷CDC* pDC = this-GetDC();/选中该白色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-2
13、0,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint); ;/鼠标消息标志变量变化 ) point2.3 游戏获胜决断的开发1.该功能是棋牌游戏中较难的功能。所以编写程序时要细心。游戏规则是这样能够的 :如果某一方(黑棋或白棋 有5个同色的棋子,则该颜色的这一方就获胜。因此可以使用一个整形二维数组来记录当前的棋局情况,二维数组的值定义如下 :0:表示该位子 1:表示该位置已经放了黑 ;2:表示该位置已经放了白 ;解决的问题 :问题 1:要在下每个棋子后,将数组变量对应位置的数组元素值 “12”,这个只需要在鼠标消息处理函数中 函数后改变数组元
14、素值 。问题 2:下每个棋子后,判断在这个 连续 5 戏,轮到下一方 具体实施步 ;(1) 增加棋盘状态记录数组 头文件中定义一个公有的整形数 int chessArr2020;并在视图类的构造函数中将整形数组初始化为 CFivechess_44View:CFivechess_44View()/ TODO: add constructioncode here/初始化棋盘,左键先下棋for(int i=0;i20;i+)for(int j=0;j 0 & i 0 & i 0 & j 0 & j 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i 0 & j 0 & i Get
15、DC();/获取当前的图形设备指 针/选中该黑色 pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-20,tempPoint.x+20,tempPoint.y+20);oint);/画了该点后,将该点插入 中chessArrtempPoint.x/50tempPoint.y/50= 1 ;if( isWin(point)(黑色棋子获 ); ; point鼠标右键具有输赢判断的鼠标消息处理函数与 void nFlags,CPointpoint)/ TODO: Add your messa handlercode here and/or call defaultif(RightORLeft= 1 ) brush = new CBrush(RGB(255,255,255) ;CDC* pDC = this-GetDC();pDC-SelectObject(brush);for(int i = 0 ; i 1000 ; i+=50)for(int j = 0 ; j Ellipse(tempPoint.x-20,tempPoint.y-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度烟草制品购销员劳动合同执行指南3篇
- 二零二五年度酒店餐饮服务合同模板2篇
- 二零二五年度金融服务合同担保风险控制3篇
- 2025年度钢筋工程进度管理协议2篇
- 2024版园林景观设计与施工一体化协议一
- 二零二五年度建筑工程施工合同环保监理补充协议范本3篇
- 2024物流运输车队合同
- 二零二五年度固化地坪施工行业标准制定与执行合同3篇
- 2025年度现代农业示范园农资化肥供应合同范本2篇
- 二零二五年度服装店导购员岗位变动及调整合同范本3篇
- 化学-山东省潍坊市、临沂市2024-2025学年度2025届高三上学期期末质量检测试题和答案
- 领导学 课件全套 孙健 第1-9章 领导要素- 领导力开发
- 2024-2025学年七年级上学期语文期末考前押题卷(统编版2024+含答案)
- 土建定额培训课件
- ISO 56001-2024《创新管理体系-要求》专业解读与应用实践指导材料之13:“6策划-6.2创新目标及其实现的策划”(雷泽佳编制-2025B0)
- 2024年保护环境的建议书范文(33篇)
- 2025新译林版英语七年级下单词默写表
- 退休人员公益活动合作合同
- 四年级数学(四则混合运算带括号)计算题专项练习与答案
- 急诊创伤疼痛护理
- 工程项目技术资料管理计划方案
评论
0/150
提交评论