当前位置:文档之家› 五子棋系统实验报告

五子棋系统实验报告

湖南工业大学课程设计任务书2015—2016学年第2 学期计算机与通信学院(系、部)计算机科学与技术专业计算机1502班级课程名称:面向对象程序设计设计题目:五子棋完成期限:自2016年6月13日至2016年6月19日共1周指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计课程设计设计说明书五子棋起止日期: 2016年6月13日至 2016年6月18日学生姓名王回班级计算机1502学号15408100209成绩指导教师(签字)计算机与通信学院2016年 6 月 18日五子棋一、课题的介绍和课题的任务设计的课题名称:五子棋实现以下功能:功能1、模拟真实棋盘棋子功能2、模拟人与人对战下棋功能3、模拟实时胜负判断功能4、模拟棋局的存储与读取二、设计的要求具有动画功能(即图像能即时移动),能实现人与人进行简单的对玩,能实现简单的胜负判断三、系统的分析和系统中类的设计CWZQApp类作用:初始化应用程序及运行该程序的所需要的成员函数CWZQDoc类作用:存放应用程序的数据以及实现文件的保存,加载功能CMainFrame类作用:管理应用程序的窗口,显示标题栏,状态栏,工具栏等,同时处理针对窗口操作的信息CAboutDlg类作用:向导自动生成对话框类CWZQView类作用:管理视图窗口,在框架窗口中实现用户数据的显示和打印,存放添加的功能模块CWZQView类中的成员函数与数据成员:void Save(); //**** //保存文件void OnOpen() //打开文件void over(CPoint point);//**** //检查是否结束voidOnDraw(CDC* pDC) //画棋盘函数void OnLButtonUp(UINT nFlags, CPoint point)//模拟下棋函数HCURSOR hcursorwhite; //**** //两个鼠标HCURSOR hcursorblack; //****intwzq[19][19]; //**** //棋盘数组boolcolorwhite; //**** // colorwhite TRUE时白棋下,否则黑棋下CBitmapm_bmblack; //**** //棋子位图CBitmapm_bmwhite; //****void CWZQView::OnDraw(CDC* pDC) //构造棋盘,显示白棋以及黑棋GetDocument() //获取文档指针,在视图中显示文档内容CBrush //用于构造CBrush对象,然后传给需要画刷的CDC成员函数pDC->FillRect(myrect1,&mybrush1) // 画黑框线四、系统的实现及调试添加的功能:1.图标,光标以及位图的绘制程序运行开始鼠标在进入棋盘界面未放下棋子时变为类似棋子光标,此处需要描绘2种棋子光标:黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子说明:由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标左键。

绘图过程:点击ResouceView,打开Cursor,创建2个光标,分别命名为光标1和2,采用单色[32*32]面板进行绘制。

在下棋者点击鼠标落下棋子后,需要黑白两种图标做为记录,此处需要描绘2中图标:黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKIDB_WHITE2.菜单栏的绘制在menu栏中绘制菜单:菜单以供操作:开始: ID_START保存: ID_SAVE打开: ID_OPEN工具栏:如上图所示。

说明:工具栏一般都是根据菜单选项而产生的,它的ID一般都能从菜单的ID 中找到。

2、设置鼠标,以及鼠标图形的变换函数使得每下完一步棋鼠标都会变成对方的旗子换做对方下3、画棋盘程序启动时显示的棋盘格式(先画背景后画黑框线)4、下棋操作:voidCWZQView::OnLButtonUp(UINT nFlags, CPoint point)函数功能:模拟人与人交替下棋的过程具体实现步骤:第一步:判断旗子是否在棋盘内(point.x>30&&point.x<410&&point.y>30&&point.y<410)第二步:若在棋盘内则判断该位置是否已经有棋子(if(colorwhite&&wzq[px][py]==0)表示该位置没有棋子)第三步:使用SelectObject()函数把一个对象(位图、画笔、画刷等)选入指定的设备描述表。

新的对象代替同一类型的老对象,在本程序中对象为黑白棋子位图。

使用BitBlt()函数用于把源设备环境中的位图复制到当前设备环境中本程序BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY)内部参数的表示:目标区域左上角点的x坐标目标区域左上角点的y坐标目标区域的宽度目标区域的高度源贴图区域DC的指针(源位图的设备环境)源贴图区域x坐标源贴图区域y坐标像素直接拷贝模式第四步:检查是否结束(即给数组wzq[px][py]是否等于1或-1),若结束则换另一种颜色的棋子下调试:在实现下棋操作的时候刚开始使用OnLButtonDown(UINT nFlags, CPoint point)函数,运行时发现Down函数时是在鼠标按下时放下棋子,但当我们按下后意识到下错了就没办法移动了,这样的实际体验没有达到预期的效果,根据资料我们将Down函数改为了OnLButtonUp(UINT nFlags, CPoint point)函数,这表示当鼠标键松开时放下棋子,这样修改后实际操作就变得人性化很多。

5、判断胜负:voidCWZQView::over(CPoint point)用一个over()函数判断是否结束,是则结束并重新开始;否则,接着把鼠标变成对方棋子,表示对方下棋。

函数功能:利用刚下棋的位置为中心,检查它各个方向上的连续五个棋子是否同色,是则结束并重新开始。

将五子棋数组赋值为1和-1(若为白棋子则为1,黑棋子为-1)利用连续五个棋子的值相加,如果它们的值的绝对值等于5,则说明是同色。

具体实现步骤:第一步:获取鼠标指向数组的位置x和y第二步:计算开始判断的坐标xx和yy第三步:检查各个方向上连续5个棋子的颜色(横向、竖向、向右下角、向左下角)如果五个棋子都是白色(a=a+wzq[xx+i][yy+i]==5则利用AfxMessageBox()函数弹出”白棋胜”的窗口。

如果五个棋子都是黑色(a=a+wzq[xx+i][yy+i]==-5)则利用AfxMessageBox()函数弹出”黑棋胜”的窗口。

第四步:执行OnStart()函数重新开始6、文件的保存和读取函数功能:实现棋局的存储和读取具体实现步骤:第一步:利用CFileDialog类生成一个windows常用文件对话框对象(CFileDialog类封装了Windows常用的文件对话框。

常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。

)设置保存的文件,后缀名wzq设置对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示.OFN_HIDEREADONLY== 隐藏只读选项 OFN_OVERWRITEPROMPT==覆盖已有文件前提FALSE为保存文件对话框 "wzq"为缺省的扩展名NULL缺省显示在文件名组合框的编辑框的文件名,一般可选NULL设置文件筛选类型如:"(*.WZQ)|*.wzq|All Files|*.*||",它指明可供选择的文件类型和相应的扩展名。

this 父窗口指针第二步:循环把棋盘数组的值写入文件第三步:关闭文件五、系统的使用说明1、程序的基本界面图:2、菜单栏中的文件下的开始可以开始一局新的棋局,保存可以保存当前棋局,打开可以打开保存过的wzq文件大致流程如下: 1、画棋盘;2、画棋子;3、为棋盘数组赋值,在界面上显示为将棋子放置在棋盘上4、每下一步判断输赢;5、实现文件的保存于读取使用说明:1、一开始是白棋先下,如果白棋赢则下一把黑棋先下,如果黑棋赢则还是白棋先下2、某一方胜利后弹出一个对话框宣布胜利。

点击确定按钮即重新开始新一回合的棋局。

3、如果玩家在游戏过程中希望重新开始游戏、暂时保存棋局或者继续以前的棋局,则可以通过菜单栏中的”文件”进行操作;六、总结本五子棋设计实现了基本的棋局模拟,包括棋盘初始化,棋局棋子实物模拟,人人对战,实时判断胜负,保存与读取未完成的棋局。

通过MFC程序设计使得界面友好真是但是离真正的五子棋游戏还有还有距离。

程序优点:程序界面友好,效率较高,经过调试,bug极少或可以忽略不计。

不足之处:未实现人机对战,未实现联网对战,并且局限于一个电脑的鼠标。

此次课程设计使我全面掌握所学知识,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,在设计中逐步提高程序设计能力,培养到了科学的工作方法。

通过上机实习,验证自己设计的算法和程序的正确性,有效利用基本调试方法,迅速找出程序代码中的错误并且修改,进一步提高程序设计水平。

而且通过课程设计能得到锻炼,能根据实际问题的具体情况,提高程序设计和调试能力。

相关主题