




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+面向对象课程设计报告院(系): 专业: 学生姓名: 班级:学号: 题目: 五子连珠棋 起迄日期: 2010-12-20 设计地点: 指 导 教 师: 完成日期: 2010 年 12 月31 日课程设计报告内容一、 需求分析1 选做此课题目的五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。而且我对五子棋有着独特的爱好,希望自己也可以编写出一款可以实现人机对战的五子棋游戏。把自己的思想付给电脑,让自己有些成就感,给自己继续努力的动力。借此次课程设计的机会,把想法变成现实。而且五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。所以此次c+课程设计选择五子棋这个题目。2 程序所实现的功能通过给电脑赋予人工智能,利用电脑运算速度快的特点,结合五子棋的游戏规则,给电脑设定固定的扫描方式,设定权值,使电脑能够选择最合适的落子点,然后调用加载已做好的棋盘棋子图像,最终实现简单的人机对弈。3该游戏为普通玩家使用,只要连成五子即获胜,没有禁手、RIF(国际连珠连盟)正式规则、“Yamaguchi”、”Tarannikov”、“Taraguchi”等规则。二、 设计内容1 根据所选题目,给出模块图主界面开始游戏重新开始游戏游戏结束落子判断输赢结束界面初始化棋盘初始化棋盘2 画出主程序及其主要模块的流程图游戏开始初始化棋盘点鼠标左键落子加载棋盘图片五子连珠?扫描棋盘,根据预设权值,选择最佳地点落子五子连珠?用红色显示游戏结束加载棋子图片到棋盘加载棋子图片到棋盘是否是1转1否 3 编写程序代码加载位图(棋盘和棋子):m_board-m_hObject = (HBITMAP):LoadImage (NULL,checkerboard.bmp,IMAGE_BITMAP,320,320,LR_LOADFROMFILE);m_white-m_hObject = (HBITMAP):LoadImage (NULL,bai.bmp,IMAGE_BITMAP,20,20,LR_LOADFROMFILE); m_black-m_hObject = (HBITMAP):LoadImage (NULL,hei.bmp,IMAGE_BITMAP,20,20,LR_LOADFROMFILE); m_temp-m_hObject = (HBITMAP):LoadImage (NULL,mask1.bmp,IMAGE_BITMAP,20,20,LR_LOADFROMFILE); m_red-m_hObject=(HBITMAP):LoadImage (NULL,dred.bmp,IMAGE_BITMAP,20,20,LR_LOADFROMFILE);响应左键:LButtonDown(UINT nFlags, CPoint point) int m ,n; CDC thmem1 ; CClientDC dc(this); thmem1.CreateCompatibleDC(&dc); int curx = point.y; int cury = point.x; m =int(curx-5)/20);n = int(cury-15)/20);没有五子连珠时简单显示棋子:显示白色棋子: if(boardij=0) thmem2.SelectObject (m_temp); dc.BitBlt(j*20+15,i*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject (m_black); dc.BitBlt (j*20+15,i*20+5,20,20,&thmem2,0,0,SRCAND); m_byColour = white ;显示黑色棋子: if(boardij = 1) thmem2.SelectObject (m_temp); dc.BitBlt(j*20+15,i*20+5,20,20,&thmem2,0,0,MERGEPAINT);thmem2.SelectObject (m_white);dc.BitBlt (j*20+15,i*20+5,20,20,&thmem2,0,0,SRCAND);m_byColour = black;五子连珠时红色显示棋子: 人赢时: if(ptableiijjj = true) thmem2.SelectObject(m_temp); dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject(m_red); dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,SRCAND); /MessageBox(你赢了); 计算机赢时: if(ctableiijjj = true) thmem2.SelectObject (m_temp); dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject (m_red); dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,SRCAND);电脑扫描棋盘:for(i = 0 ; i15; i+) for(j= 0 ;j 15 ;j+) boardij = 2; / 初始化棋盘数组 for(i = 0 ; i 15 ; i+) /对列进行隔行扫描, for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptablej+kicount = true; ctablej+kicount = true; count +; for(i = 0 ; i 15 ; i+) /对行进行隔行扫描 for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptableij+kcount = true; ctableij+kcount = true; count +; for(i = 0 ; i 11; i+) /对交叉的情况东南西北走向进行扫描 for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptablej+ki+kcount = true; ctablej+ki+kcount = true; count +; for(i = 0 ; i = 4 ; j-) for( k = 0 ; k 5 ;k+) ptablej-ki+kcount = true; ctablej-ki+kcount = true; count +; Start:void CMyDlg:Onstart() MessageBox(请落子);m_byColour = black;Restart:再次初始化棋盘,函数类似于扫描 for(i = 0 ; i15; i+) for(j= 0 ;j 15 ;j+) boardij = 2; for(i = 0 ; i 15 ; i+) for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptablej+kicount = true; ctablej+kicount = true; count +; for(i = 0 ; i 15 ; i+) for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptableij+kcount = true; ctableij+kcount = true; count +; for(i = 0 ; i 11; i+) for(j=0 ; j 11 ; j+) for( k = 0 ; k 5 ;k+) ptablej+ki+kcount = true; ctablej+ki+kcount = true; count +; for(i = 0 ; i = 4 ; j-) for( k = 0 ; k 5 ;k+) ptablej-ki+kcount = true; ctablej-ki+kcount = true; count +; 三、 调试分析1 实际完成的情况说明能够判断胜负,没下一子,都要进行胜负判断, 赋予电脑人工智能,玩家通过点击鼠标左键落子,电脑会根据预设的方式扫描,计算每一点的权值,从而找到最佳落子点,实现人机对弈。2 程序的性能分析。本程序按如下扫描棋盘四个方向(从左到右,从上到下,从左到右斜向下,从右到左斜向下)依次扫描所有可能的赢法;15*15的棋盘共有572中可能的赢法,所有点对这572种赢法依次扫描,通过赋权值,找出人与电脑权值最大的点。比较人与电脑的最大权值,以确定最佳落子点。棋盘如下3 上机过程中出现的问题及其解决方案。1) 游戏界面内光标作用域溢出。通过修改程序内控制光标作用域的像素值,使光标作用域与棋盘有格线处吻合。2) 加载的棋子图片与棋盘格线不完全吻合。修改加载棋子图片函数的参数,棋盘边界长的数据要精确。4 程序中可以改进的地方说明。电脑寻找最佳落子点的方法有些简单,使得电脑的人工智能不高。游戏使用一段时间后会发现电脑的漏洞,使得游戏的挑战性降低。游戏界面比较单一,可以多加一些色彩元素。5 程序中可以扩充的功能及设计实现构想。可以再增加保存和读取功能,保存当前游戏的状态,我们为自己的文件定义一个后缀名为: .wzq。wzq;接着是打开保存文件的公共对话框,如果确定,则表示保存,那么就先获取文件名,然后按照一定的顺序保存各个点的数组的值,最后保存当前是哪种颜色下棋。读文件就是把我们以前保存的文件打开,读取当前打开文件的内容,并给数组赋值使和文件内容相同,然后可以继续进行游戏。本程序只实现了人机对弈,可以再增加人人对弈的功能四、 用户手册程序的运行环境:visualC+或visual studio 2008程序执行结果:程序运行后,进入游戏界面,鼠标左键点击start,如图一所示。确定开始下棋,玩家或电脑获胜后,如图二三所示,重新开始点击restart,结束游戏点击Exit。 图一 图二 图三五、 设计总结课程设计是检验知识能力的一种途径,可以让我们学到许多书本中学不到的知识。使我所学知识融会贯通,能熟练掌握c+中一些基本知识点,这是一次很好的实践机会,通过动手操作找出不足,不断提高自己。把我所学到的和我所想到的都运用设计一个自己的作品。通过课程设计培养了我的动手能力以及综合运用所学c+基本理论,基础知识,基本技能,进行程序开发和程序分析,提高在实际开发中解决实际问题的能力,达到了能够利用c+语言进行程序的规划,分析,设计和实施,更能进一步使我对这门语言有更深刻的理解和更好的得到巩固。更能对我所学的知识得到检验。六、 参考文献1郑莉C+语言程序设计(第3版)北京:清华大学出版社,2005.72钱能C+程序设计教程(第2版)北京:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CCUA 038-2024版本典藏资源智慧展陈手势交互系统技术要求
- 高中多普勒效应课件
- 高中友谊开头课件
- GIL行业市场前景及投资研究报告:输电产品放量契机
- 高一必修三红楼梦课件
- 房屋买卖合同物业管理与入住指导服务协议
- 特色小镇建设用地租赁与综合运营管理协议
- 离婚协议男方放弃抚养费支付及子女抚养权协议书
- 农业科技创新预案
- 快乐拼图:拼出快乐的每一天
- 基础课程改革试题及答案
- 塔吊前臂临近高压线处理方案
- 某卫生院员工手册
- T∕CACM 008-2018 中医药单用联合抗生素治疗常见感染性疾病临床实践指南 急性咽炎
- 消防设施操作员自测试题及答案
- 2025年上半年湖北十堰竹山招募三支一扶高校毕业生聘用为事业单位人员12人易考易错模拟试题(共500题)试卷后附参考答案
- 职业暴露的预防及处理课件
- 餐饮服务明厨亮灶建设工作方案
- 私人二手摩托车转让合同范本
- 企业形象策划服务合同范本
- 2025年家庭照护者、健康照护师岗位专业技能资格知识考试题(附答案)
评论
0/150
提交评论