课程设计成绩考勤成绩(%)指导老师评语报告及程序成绩(%)总评成绩指导老师签名:《windows程序设计》课程设计报告学院(系):计算机科学与技术系班级:计专2班学生姓名:梁剑学号0907045233指导教师:时间:从2010年1月18日到2010年1月22日摘要1.能够利用所学的基本知识,设计一个简单的五子棋序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。②人机下棋时,计算机下棋算法的设计。③人机下棋时,判断任一方获胜的算法的设计。关键字:MFC编程,Windows程序《Windows程序设计》课程设计报告3目录项目一:五子棋1设计目的与要求..........................................................................................................................................11.1设计目的......................................................................................................................................................11.2设计内容......................................................................................................................................................11.3设计要求......................................................................................................................................................12设计环境或器材、原理与说明.........................................................................................................32.1设计环境与器材.......................................................................................................................................32.2原理与说明.................................................................................................................................................33设计过程及程序代码...............................................................................................................................63.1服务器端设计............................................................................................................................................63.1.1界面设计.................................................................................................................................................63.1.2人下棋设计.............................................................................................................................................83.1.3电脑下棋设计.........................................................................................................................................83.1.4搜索最优下棋点....................................................................................................................................94设计结果与分析........................................................................................................................................214.1设计结果....................................................................................................................................................214.2设计分析....................................................................................................................................................225设计体会与建议........................................................................................................................................23参考文献..............................................................................................................................................................24五子棋《Windows程序设计》课程设计报告41设计目的与要求1.1设计目的1、进一步掌握利用VisualC++进行程序设计的能力;2、进一步理解和运用面向对象程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、理解Windows程序的运行过程;1.2设计内容能够利用所学的基本知识,设计一个简单的学生信息管理应用程序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。②人机下棋时,计算机下棋算法的设计。③人机下棋时,判断任一方获胜的算法的设计。1.3设计要求整个程序使用winsocket函数做网络数据收发,基于UDP协议。可以直接使用WindowsAPI编程(SDK编程),也可以使用MFC编程。本课程设计中我们使用的是MFC编程。其具体的设计要求如下所述:《Windows程序设计》课程设计报告52设计环境或器材、原理与说明2.1设计环境与器材因为选择使用MFC编程Windows环境与MicrosoftVisualC++6.0编译环境;2.2原理与说明首先利用mfc建立单文档窗口,在窗口上画19*19的表格,把每个表格点的信息存在二维数组wzq[19][19]中。白棋为1,黑棋为-1,这样当要测是否结束时只要查看4个方向的绝对值是否等于5,就可以判定输赢了如图:《Windows程序设计》课程设计报告63.1设计过程及程序代码3.11界面设计:图3-2五子棋界面设计打开应用程序时游戏会自动开始。显示表格代码:CMyDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereCBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC-FillRect(myrect1,&mybrush1);//画棋盘框线CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen=pDC-SelectObject(&mypen);for(inti=0;i19;i++){pDC-MoveTo(40,40+i*20);pDC-LineTo(400,40+i*20);pDC-MoveTo(40+i*20,40);pDC-LineTo(40+i*20,400);}//重画时显示存在的棋子CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox(Can'tcreateDC);《Windows程序设计》课程设计报告7for(intn=0;n19;n++)for(intm=0;m19;m++)if(wzq[n][m]==1{//显示白棋Dc.SelectObject(m_bmwhite);pDC-BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);}elseif(wzq[n][m]==-1){//显示黑棋Dc.SelectObject(m_bmblack);pDC-BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);}3.1.2人下棋设计涉及到OnLButtonDown(UINTnFlags,CPointpoint)和OnLButtonUp(UINTnFlags,CPointpoint)两个函数了。要用哪一个或用两个?用Down函数时是在鼠标按下时放下棋子,可是,要是我们按下后意识到按错了怎么办;那就改用Up函数,表示当鼠标键松开时放下棋子。这样子当鼠标点下并放开时界面上会显示相应的棋子。并调用over函数判断输赢。代码如下:voidCMy3_1View::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox(Can'tcreateDC);//是否在棋盘内if(point.x30&&point.x410&&point.y30&&point.y410){intpx=(point.x-30)/20;intpy=(point.y-30)/20;//是否已经有棋子if(colorwhite&&wzq[px][py]==0){Dc.SelectObject(m_bmwhite);pDC-BitBlt(px*20+32,py*20+32,160,160,