MFC-C++五子棋课程设计报告(共23页).doc
《MFC-C++五子棋课程设计报告(共23页).doc》由会员分享,可在线阅读,更多相关《MFC-C++五子棋课程设计报告(共23页).doc(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上课程设计成绩考勤成绩( %)指导老师评语报告及程序成绩( %)总评成绩指导老师签名: windows程序设计课 程 设 计 报 告 学院(系): 计算机科学与技术系 班 级: 计专2班 学生姓名: 梁剑 学号 指导教师: 时间: 从 2010 年1 月18 日 到2010 年1 月22 日专心-专注-专业摘要1. 能够利用所学的基本知识, 设计一个简单的五子棋序,具有以下功能:数据结构的设计;五子棋棋盘的绘制。人机下棋时,计算机下棋算法的设计。人机下棋时,判断任一方获胜的算法的设计。关键字: MFC编程,Windows程序目录项目一: 五子棋五子棋1 设计目的与要求1
2、.1 设计目的1、进一步掌握利用Visual C+进行程序设计的能力;2、进一步理解和运用面向对象程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、理解Windows程序的运行过程;1.2 设计内容能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:数据结构的设计;五子棋棋盘的绘制。人机下棋时,计算机下棋算法的设计。人机下棋时,判断任一方获胜的算法的设计。1.3 设计要求整个程序使用winsocket 函数做网络数据收发,基于UDP协议。可以直接使用Windows API编程(SDK编程),也可以使用MFC编程。本
3、课程设计中我们使用的是MFC编程。其具体的设计要求如下所述:2 设计环境或器材、原理与说明2.1 设计环境与器材因为选择使用MFC编程Windows环境与Microsoft Visual C+ 6.0 编译环境;2.2 原理与说明首先利用mfc建立单文档窗口,在窗口上画19*19的表格,把每个表格点的信息存在二维数组wzq1919中。白棋为1,黑棋为-1,这样当要测是否结束时只要查看4个方向的绝对值是否等于5,就可以判定输赢了如图:3.1设计过程及程序代码3.11界面设计: 图3-2 五子棋界面设计打开应用程序时游戏会自动开始。显示表格代码:CMyDoc* pDoc = GetDocument
4、();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here CBrush mybrush1; mybrush1.CreateSolidBrush(RGB(192,192,192); CRect myrect1(0,0,1200,800); pDC-FillRect(myrect1,&mybrush1); /画棋盘框线 CPen mypen; CPen*myoldPen; mypen.CreatePen(PS_SOLID,1,RGB(0,0,0); myoldPen=pDC-SelectObject(&mypen); for(
5、int i=0;iMoveTo(40,40+i*20); pDC-LineTo(400,40+i*20); pDC-MoveTo(40+i*20,40); pDC-LineTo(40+i*20,400); /重画时显示存在的棋子 CDC Dc; if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox(Cant create DC); for(int n=0;n19;n+) for(int m=0;mBitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); else if(wzqnm=-1) /显示黑棋 Dc.
6、SelectObject(m_bmblack); pDC-BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY); 3.1.2 人下棋设计涉及到OnLButtonDown(UINT nFlags, CPoint point)和OnLButtonUp(UINT nFlags, CPoint point)两个函数了。要用哪一个或用两个?用Down函数时是在鼠标按下时放下棋子,可是,要是我们按下后意识到按错了怎么办;那就改用Up函数,表示当鼠标键松开时放下棋子。这样子当鼠标点下并放开时界面上会显示相应的棋子。并调用over函数判断输赢。代码如下:void CM
7、y3_1View:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultCDC *pDC=GetDC();CDC Dc;if(Dc.CreateCompatibleDC(pDC)=FALSE) AfxMessageBox(Cant create DC); /是否在棋盘内 if(point.x30&point.x30&point.yBitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);/表示存在白棋wzq
8、pxpy=1;/检查是否结束over(point);/换黑棋下colorwhite=false;else if(wzqpxpy=0)Dc.SelectObject(m_bmblack); pDC-BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);wzqpxpy=-1;over(point);colorwhite=true;CView:OnLButtonUp(nFlags, point);3.1.3 电脑下棋:计算机要下棋?就要定位。即搜索棋盘,找出一个最佳点,放下黑棋。实现的方法是:全盘搜索,并把搜索到的位置,保存在变量。由于有多种情况,我们定
9、义变量如下:CPoint bpointcan4,/这个位置空,它旁边有四个黑棋wpointcan4,/这个位置空,它旁边有四个白棋bpointcan3,/这个位置空,它的旁边有三个黑棋wpointcan3,/这个位置空,它的旁边有三个白棋bpointcan2,/这个位置空,它的旁边有两个黑棋wpointcan2,/这个位置空,它的旁边有两个白棋bpointcan1;/不是以上情况,这个位置空3.1.4搜索最优下棋点并在搜索之前都赋值为(-1,-1),然后,进行搜索,并把相应的值保存在相应变量里面,而如果前面已经对变量赋值,我们依然赋值,用新值代替旧值。注意:我们只保存最后一个值,这样的一个好处
10、是,避免了每次都从左上角开始,并且它的随机性比随机函数还随机。全盘搜索完之后,由于上面的变量中至少有一个已经被赋值,即不是(-1,-1),我们可以采用多数优先的方法,让已经有多个同色棋子的位置先下棋。其原理是,如果已经有四个黑棋,计算机再下一个黑棋就赢了;否则,如果人已经有四个白棋,那么计算机就必须放下一个黑棋,阻止白棋下一步赢;如果已经有三个黑棋,再下一个黑棋,变成四个;否则,如果已经有三个白棋,下一个黑棋,破坏它;两个棋子的同理;否则,在刚才白棋下的地方,顺便找一个位置,下棋。computerdown()函数如下:/轮到计算机下棋void CMy3_1View:computerdown()
11、/把各种情形赋值为如下bpointcan4=(-1,-1);wpointcan4=(-1,-1);bpointcan3=(-1,-1);wpointcan3=(-1,-1);bpointcan2=(-1,-1);wpointcan2=(-1,-1);bpointcan1=(-1,-1); /搜索最好的落棋点for(int i=0;i19;i+)for(int j=0;jBitBlt(point.x*20+32,point.y*20+32,160,160,&Dc,0,0,SRCCOPY); wzqpoint.xpoint.y=-1;/由于原来我们检查是否结束时用的是鼠标点下的坐标,而现在/put
12、down(CPoint point)函数用的是数组棋盘的坐标,所以必须转换CPoint overpoint;overpoint.x=point.x*20+30;overpoint.y=point.y*20+30;over(overpoint);colorwhite=true; 搜索最佳落棋点:现在就剩下void bestputdown(int i,int j)函数没有定义了(虽然前面的变量函数已经说明了,当时我们这里是用程序扩展的思路进行的,故如此说明)。它的实现原理是:在四个方向上,各自计算那个方向上棋子的状态,我们的思路是利用原来定义的白棋为1,黑棋为-1,的思想,让同个方向上的五个棋子的
13、值相加,取绝对值并赋值给为这个方向定义的局部变量numi。 为什么要用五个棋子的值相加呢?因为,如果几个棋子是同色的,无论黑白,它的绝对值必然大,而对于几个棋子中有黑棋和白棋的,其值必然相加而抵消变小。所以我们可以利用这种方法来寻找旁边有多个同色棋子的空位置(前面已经具体说明)。在每一个棋盘位置,计算以它为起点的四个方向(横、竖、撇、捺),再比较这四个方向中哪个值最大,然后在这个方向上寻找落棋点。/检查四个方向,各算出五个棋子的和并赋值void CMy3_1View:bestputdown(int i,int j) /四个方向的值int num4;int a,k; / num0 -a=0; i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC C+ 五子棋 课程设计 报告 23
限制150内