MFC课程设计报告-一个简单的五子棋游戏

合集下载

MFC课程设计五子棋

MFC课程设计五子棋

Windows程序设计课程考核报告班级:学号:姓名:得分:2016年6月25 日1.设计目的及要求 (3)1.1设计目的及内容 (3)1.2设计要求 (3)1.3软件、硬件环境 (4)2.课程设计步骤 (4)3. 课程设计内容 (10)3.1 概要设计 (10)3.1.1 程序总体框架描述 (11)3.1.2程序常用类声明 (11)3.2主要技术 (11)3.3系统设计结果(界面截图、操作流程) (12)4.设计总结 (13)4.1遇到的问题及如何解决 (13)4.2体会 (13)5.源代码 (14)1.设计目的及要求1.1设计目的及内容描述1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

1.2设计要求用VS 2010进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

游戏规则:首先可以在更多选项里面选择进行人人对战与人机对战,并可以在人机对战的功能框里选择难易程度。

当棋子连成有五个时游戏结束。

程序功能模块棋局的绘制、保存、和AI三大块1.3软件、硬件环境软件:Windows 10操作系统,Microsoft Visual studio 2010硬件:Inter(R) Core(TM) i5-4200H CPU @ 3.40GHz 2.课程设计步骤新建单文档程序Gobang_FiveChess接着就是定义变量了,但是,由于这个游戏要添加的变量和函数太多了,我们要建一个新类。

是否应该先添加应该类呢?最好是这样。

MFC课程设计报告-一个简单的五子棋游戏

MFC课程设计报告-一个简单的五子棋游戏

设计一个简单的五子棋游戏一、设计目标与容1.了解Windows编程的根底知识,掌握MFC应用程序的根本知识;2.根本掌握面向对象程序设计的根本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的根本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据构造的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

二、设计要求1.用VC++进展编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份〔课程设计任务书、目录、主要的数据构造、设计的根本思路、设计的步骤及主要代码、心得体会、参考文献〕。

总体设计运行时效果如下:图3-1这个程序只能进展两个人之间的对弈,不能进展人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。

同时程序中也存在着很多漏洞,但根本的功能都已经实现,还有待继续改进。

详细设计新建工程game_wzq选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。

如以下图:图3-2资源编辑黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKDB_WHITE黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子黑白图标Icon以显示在状态栏供以提示IDI_BLACKIDI_WHITE菜单以供操作:开场:ID_START保存:ID_SAVE翻开:ID_OPEN如以下图所示:图3-3变量函数首先,为了实现状态栏的应用,我们必须更改它的变量:在MainFrm.h文件里面,把CStatusBar m_wndStatusBar 为public接着是在game_wzqView.h文件里面添加变量函数://两个鼠标HCURSOR hcursorwhite;HCURSOR hcursorblack;//棋盘数组int wzq[19][19];// colorwhite TRUE时白棋下,否那么黑棋下bool colorwhite;//棋子位图CBitmap m_bmblack;CBitmap m_bmwhite;//保存文件void Save();//检查是否完毕void over(CPoint point);//鼠标操作afx_msg void OnLButtonUp(UINT nFlags, CPoint point);//鼠标图形更换afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);//菜单的开场afx_msg void OnStart();//菜单的保存afx_msg void OnSave();//菜单的翻开afx_msg void OnOpen();具体实现1、由于我们的游戏的棋盘大小是一定的,不能改变大小的,是应该符合要求的。

mfc五子棋课程实践报告

mfc五子棋课程实践报告

课程实践报告作品名称:基于MFC的五子棋小游戏一、设计目的掌握利用Visual C++进行程序设计的能力,学会调试一个较长程序的基本方法。

通过设计用户图形界面,用户通过鼠标就可以操作游戏。

二、程序思路介绍:1.建立一个MFC基本对话框,添加内容如下:Bitmap的IDB_BITMAP1、IDB_BITMAP2分别表示棋盘上的黑棋和白棋,IDB_BITMAP3表棋盘背景图。

2.主要功能实现主要功能为两部分:画棋盘,棋子落在棋盘上;判断游戏结束规则。

a.画棋盘通过添加函数void CChessDlg::OnPaint(),由于游戏中可能重画棋盘,而那时棋盘上有棋子,所以函数也要有画棋子的语句。

b.鼠标按下时,棋子落在棋盘上,同时若棋子落下符合结束要求时,再次点击鼠标时会弹出提示窗口。

实现功能程序如下:c.若棋盘已被棋子下满,则提示平局,用full()函数实现;五个同色棋子连在一起,则游戏结束,用isover()函数实现。

在oldchess.cpp中编写这两个函数。

d.添加棋盘背景图片,将IDB_BITMAP3设为棋盘的背景,实现功能在OnEraseBkgnd()函数中。

d.添加按钮“开始游戏”,“结束游戏”。

实现函数如下:四、作品界面介绍:打开程序,棋盘界面显示如下:点击开始游戏,弹出提示窗口,如下图:点击“确定”,点击棋盘,即可开始下棋:当棋盘下满,而双方都没有结束下棋,则平局。

五、设计感想及问题1、存在问题棋盘利用lineto,moveto语句画出,但是棋盘边界线却只有一边可以完全下棋,调试程序与语句未能改变。

判断下棋结束要有四个五子棋排列方式,开始时循环语句返回值设置不对,导致程序始终无法正常运行,后来通过调试程序完成了下棋结束判断功能。

目前程序只是人与人单次下棋,还未能实现人机下棋,该算法后续学习后会继续改进。

2、设计体会通过本次设计作业我们学习到很多关于c语言程序的实践只是,对程序设计这一课程与相关技术有了更深的理解。

MFC五子棋(面向对象程序设计)

MFC五子棋(面向对象程序设计)

目录一、绪论 (1)1.1课题背景 (1)1.2需求分析 (1)2.1游戏流程 (1)2.2系统功能结构图 (2)三、详细设计 (3)3.1.1游戏界面的制作 (3)3.1.2游戏开始 (4)3.1.3游戏结束 (5)3.1.4排行榜 (6)3.2核心算法 (6)四、用户使用说明 (8)4.1游戏开始 (8)4.2游戏中 (8)4.3结束 (9)五、附录 (10)参考资料 (10)一、绪论1.1课题背景本课程设计是C++面向对象程序设计的重要的实践环节之一,是在学生学习完《C++面向对象程序设计》课程后进行的一次全面的综合练习,此次课程设计的题目是自拟的。

在和我的队友反复的讨论下,我们一致同意写以C++和MFC 为主要知识点的MFC人—人对战五子棋。

1.2需求分析(1)设计用户图形界面,用户通过鼠标就可以操作游戏。

(2)以二维数组的形式储存棋盘的下子信息,包括坐标和棋子类型。

(3)设置开始、结束和排行榜用于操作和查看下棋的信息。

(4)游戏有自动保存玩家输赢信息的功能。

(5)为了使算法简单,游戏中的棋盘、棋子等都以位图的形式操作。

二、概要设计2.1游戏流程三、详细设计3.1.1游戏界面的制作利用MFC AppWinzard生成五子棋游戏应用程序框架具体步骤如下:(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name文本框中输入Fivechess_44 。

Lacation文本框是指项目的本地路径。

(2)单击按钮,弹出MFC AppWinzard_Step1对话框。

选中单选按钮,如图所示。

(3)单击完成按钮,则建立一个单文档应用框架。

(4)将单文档的菜单栏去掉,并加入背景图片。

背景图片中包含了棋盘。

部分代码如下:3.1.2游戏开始(1)界面中的设置,以位图的形式放到背景中。

c课程设计报告之五子棋游戏

c课程设计报告之五子棋游戏

##大学C++面向对象课程设计报告此课设源代码工程:院(系):计算机工程学院专业:软件工程学生姓名:__班级:_学号:题目:五子连珠棋_________起迄日期:—_____设计地点:计算机工程学院机房指导教师:完成日期: 2011 年 7 月14 日一、课程设计目的。

1、进行c++面向对象程序设计的复习巩固;2、在完成c++面向对象语言学习的基础上,通过自学MFC,掌握一种可视化编程的方法,并通过实践,加深对面向对象语言的理解。

3、提高运用c++编程的能力和解决实际问题的能力,创新能力及团队合、协调能力4、提高调查研究、查询技术文献、资料和编程及设计文档的能力;5、首次尝试编写软件,学习实际操作开发能力,体验学习基础知识重要性。

6、提高自学能力,体验合作以及独立编程、分析文献等各方面的重要性,加强这些方面素质的训练。

二、课程设计内容与实现的功能一、设计内容五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。

而且我对五子棋有着独特的爱好,希望自己也可以编写出一款可以实现人机对战的五子棋游戏。

把自己的思想付给电脑,让自己有些成就感,给自己继续努力的动力。

借此次课程设计的机会,把想法变成现实。

而且五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。

五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。

它是中西文化的交流点,是古今哲理的结晶。

所以此次c++课程设计选择五子棋这个题目。

二、程序所实现的功能通过给电脑赋予人工智能,利用电脑运算速度快的特点,结合五子棋的游戏规则,给电脑设定固定的扫描方式,设定权值,使电脑能够选择最合适的落子点,然后调用加载已做好的棋盘棋子图像,最终实现简单的人机对弈。

该游戏为普通玩家使用,只要连成五子即获胜,没有禁手、RIF(国际连珠连盟)正式规则、“Yamaguchi”、”Tarannikov”、“Taraguchi”等规则。

MFC程序五子棋实验报告

MFC程序五子棋实验报告

MFC程序五子棋实验报告1.实验目的:通过学习MFC应用程序开发,编译一个简单的五子棋人人对战游戏。

2.实验进程:(1)实验分工该实验是由小组人员一路合作完成,算法设计有**负责,编码和函数实现由***负责,调试运行和结果测试别离有**和**负责,实验报告的书写由**负责。

(2)算法设计五子棋的游戏规那么对咱们大伙儿来讲都很很清楚的。

只要某一方的棋子在一条直线上,棋子数先达到五或以上,那么该方为胜者。

依照游戏规那么,算法设计分以下几个方面:A.棋盘设计:棋盘设计能够用一个对话框实现,B.棋子设计C.开始函数D.终止函数E.下棋子函数F.选择哪一种棋子先下函数G.判定输赢函数五子棋成功的条件是一方的五个棋子连成一条直线,包括纵,横,左斜,右斜四种,能够用二维数组来保留每一个位置棋子的值,别离用0,1,2来表示无棋,黑棋,白棋,每当下一个棋子后,用值保留其颜色,当白棋或黑棋有一者符合上述四种情形之一时,就能够够够判定出哪方成功。

H.从头开始棋局函数(3)编码和函数实现void CTestDlg::OnButton11(){if(ToStart==1&&Q[0][0]==0){eleteObject();oadBitmap(IDB_BITMAP2);(HBITMAP(m_cBmp[0][0]));Qi++;eleteObject();m_cBmp[0][0].LoadBitmap(IDB_BITMAP3);oadBitmap(IDB_BITMAP1);Q[i][j]=0;}eleteObject();OnButtonStart();MessageBox("点击“开始”,清屏并从头开始游戏");ToStart=0;Qi=0;m_flag_Color=true;}验结果分析:4.实验总结:。

MFC-C++五子棋课程设计报告

MFC-C++五子棋课程设计报告

课程设计成绩考勤成绩( %) 指导老师评语报告及程序成绩( %)总评成绩指导老师签名:《windows程序设计》课程设计报告学院(系):计算机科学与技术系班级:计专2班学生姓名:梁剑学号**********指导教师:时间:从2010 年1 月18 日到2010 年1 月22 日摘要1.能够利用所学的基本知识, 设计一个简单的五子棋序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②人机下棋时,计算机下棋算法的设计。

③人机下棋时,判断任一方获胜的算法的设计。

关键字:MFC编程,Windows程序目录项目一: 五子棋1 设计目的与要求 (1)1.1 设计目的 (1)1.2 设计内容 (1)1.3 设计要求 (1)2 设计环境或器材、原理与说明 (3)2.1 设计环境与器材 (3)2.2 原理与说明 (3)3 设计过程及程序代码 (6)3.1 服务器端设计 (6)3.1.1 界面设计 (6)3.1.2 人下棋设计 (8)3.1.3 电脑下棋设计 (8)3.1.4 搜索最优下棋点 (9)4 设计结果与分析 (21)4.1 设计结果 (21)4.2 设计分析 (22)5 设计体会与建议 (23)参考文献 (24)五子棋1 设计目的与要求1.1 设计目的1、进一步掌握利用Visual C++进行程序设计的能力;2、进一步理解和运用面向对象程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、理解Windows程序的运行过程;1.2设计内容能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②人机下棋时,计算机下棋算法的设计。

③人机下棋时,判断任一方获胜的算法的设计。

1.3 设计要求整个程序使用winsocket 函数做网络数据收发,基于UDP协议。

可以直接使用Windows API编程(SDK编程),也可以使用MFC编程。

五子棋游戏详细设计

五子棋游戏详细设计

五子棋游戏‎详细设计1、窗体设计利用MFC‎ AppWi‎n zard‎生成五子棋‎游戏应用程‎序框架具体‎步骤如下:(1)执行VC程‎序,选择Fil‎e|N ew命令‎,弹出New‎对话框.单击Pro‎jects‎标签,转到Pro‎jects‎选项卡,选择MFC‎ AppWi‎z ard(exe)选项,然后在Pr‎oject‎name文‎本框中输入‎F ivec‎h ess_‎44 。

Lacat‎i on文本‎框是指项目‎的本地路径‎。

(2)单击按钮,弹出MFC‎ AppWi‎n zard‎_Step‎1对话框。

选中单选按‎钮,如图所示。

(3)单击完成按‎钮,则建立一个‎单文档应用‎框架。

2、游戏项目开‎发2.1棋盘设计‎1.在已创建的‎工程Fiv‎eches‎s_44中‎添加画棋盘‎的函数。

首先在“Fivec‎h ess_‎44.h”头文件中定‎义一个用于‎显示棋盘的‎自定义公有‎函数:void Check‎e rboa‎r d(CDC*pDC);然后在“Fivec‎h ess_‎44Vie‎w.cpp”源文件中实‎现该函数。

代码如下:void CFive‎c hess‎_44Vi‎e w::Check‎e rboa‎r d(CDC*pDC){for(int i=0;i<20;i++) //连续画20‎条竖线{pDC->MoveT‎o(i*50,0); //画笔移动到‎(i*50,0)点pDC->LineT‎o(i*50,1000); // 画笔从(i*50,0)点到(i*50,1000)点}for(i=0;i<20;i++) //连续画20‎条横线{pDC->MoveT‎o(0,i*50);pDC->LineT‎o(1000,i*50);}}2.在应用程序‎框架的On‎D raw()函数中调用‎该画棋盘函‎数,将pDC对‎象作为实参‎传递给Ch‎ecker‎b oard‎()函数,代码如下:void CFive‎c hess‎_44Vi‎e w::OnDra‎w(CDC* pDC){CFive‎c hess‎_44Do‎c* pDoc = GetDo‎c umen‎t();ASSER‎T_VAL‎I D(pDoc);// TODO: add draw code for nativ‎e data hereCheck‎e rboa‎r d(pDC); //调用自定义‎的画键盘函‎数}3.编译运行得‎到如下效果‎:一个空棋盘‎2.2放置棋子‎功能的开发‎按照规划,棋子使用鼠‎标的左键和‎右键(分别用这两‎键来表示下‎棋的双方)来进行单机‎下棋,即是当用户‎单击左键时‎,下黑色棋子‎,,用户单击右‎键时,下白色棋子‎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计一个简单的五子棋游戏一、设计目标与内容1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;2.基本掌握面向对象程序设计的基本思路和方法;3.掌握用VC++开发应用程序的的一般步骤和方法;4.能够利用所学的基本知识, 设计一个简单的五子棋游戏,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。

②两人下棋时,两人下棋算法的设计。

③两人下棋时,判断任一方获胜的算法的设计。

二、设计要求1.用VC++进行编码,实现应用程序的功能。

注重编码质量,代码要有适当的注释;提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。

总体设计运行时效果如下:图3-1这个程序只能进行两个人之间的对弈,不能进行人机对弈,由于时间和个人能力的原因所以人机对弈的算法就没有写出。

同时程序中也存在着很多漏洞,但基本的功能都已经实现,还有待继续改进。

详细设计新建工程game_wzq选择单文档应用程序,在Step 4 of 6中先中Windows Sockets 复选框。

如下图:图3-2资源编辑黑白位图Bitmap以表示棋盘上面的棋子:IDB_BLACKDB_WHITE黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子黑白图标Icon以显示在状态栏供以提示IDI_BLACKIDI_WHITE菜单以供操作:开始: ID_START保存: ID_SAVE打开: ID_OPEN如下图所示:图3-3变量函数首先,为了实现状态栏的应用,我们必须更改它的变量:在MainFrm.h文件里面,把CStatusBar m_wndStatusBar 为public接着是在game_wzqView.h文件里面添加变量函数://两个鼠标HCURSOR hcursorwhite;HCURSOR hcursorblack;//棋盘数组int wzq[19][19];// colorwhite TRUE时白棋下,否则黑棋下bool colorwhite;//棋子位图CBitmap m_bmblack;CBitmap m_bmwhite;//保存文件void Save();//检查是否结束void over(CPoint point);//鼠标操作afx_msg void OnLButtonUp(UINT nFlags, CPoint point);//鼠标图形更换afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);//菜单的开始afx_msg void OnStart();//菜单的保存afx_msg void OnSave();//菜单的打开afx_msg void OnOpen();具体实现1、由于我们的游戏的棋盘大小是一定的,不能改变大小的,是应该符合要求的。

在如下函数添加设置窗口大小的语句:BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs){if( !CFrameWnd::PreCreateWindow(cs) )return FALSE;// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT cscs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX; //设置窗口大小:400*340cs.cx=450;cs.cy=500;return TRUE;}2、初始化变量:在构造函数里添加初始代码:CGame_wzqView::CGame_wzqView(){//Load鼠标图像和棋子位图hcursorblack=AfxGetApp()->LoadCursor(IDC_CURSOR1);hcursorwhite=AfxGetApp()->LoadCursor(IDC_CURSOR2);m_bmwhite.LoadBitmap(IDB_WHITE);m_bmblack.LoadBitmap(IDB_BLACK);//清理棋盘//数组值为0表示没有棋子for(int i=0;i<19;i++)for(int j=0;j<19;j++)wzq[i][j]=0;//白棋先下colorwhite=true;}3、画棋盘:在OnDraw(CDC* pDC)函数中画棋盘,由于在游戏过程中有可能重画棋盘,而那时棋盘上面有棋子,所以,我们在这个函数里面必须有画棋子的语句。

我们用数组的做为1表示白棋,-1表示黑棋。

void CGame_wzqView::OnDraw(CDC* pDC){CGame_wzqDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);//画背景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(int i=0;i<19;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);}//重画时显示存在的棋子CDC Dc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can't create DC");for(int n=0;n<19;n++)for(int m=0;m<19;m++)if(wzq[n][m]==1){//显示白棋Dc.SelectObject(m_bmwhite);pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY) ;}else if(wzq[n][m]==-1){//显示黑棋Dc.SelectObject(m_bmblack);pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);}}4、设置鼠标:棋盘画好了,接下来就是下棋了。

但鼠标并没有像我们上面说的那样变成白棋,加函数如下:BOOL CGame_wzqView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message){if(nHitTest==HTCLIENT){//白棋下,显示白棋鼠标if(colorwhite){//调用主框架里面的状态栏CMainFrame*pFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;CStatusBar*pStatus=&pFrm->m_wndStatusBar;if(pStatus){pStatus->GetStatusBarCtrl().SetIcon(0,AfxGetApp()->L oadIcon(IDI_WHITE));pStatus->SetPaneText(0,"白棋下");}SetCursor(hcursorwhite);}//显示黑棋鼠标else{SetCursor(hcursorblack);CMainFrame*pFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;CStatusBar*pStatus=&pFrm->m_wndStatusBar;if(pStatus){//显示图像pStatus->GetStatusBarCtrl().SetIcon(0,AfxGetApp()->L oadIcon(IDI_BLACK));//显示文字pStatus->SetPaneText(0,"黑棋下");}}return 1;}return CView::OnSetCursor(pWnd, nHitTest, message); }5、下棋操作:这就涉及到OnLButtonDown(UINT nFlags, CPoint point)和OnLButtonUp(UINT nFlags, CPoint point)两个函数了。

要用哪一个或用两个?用Down函数时是在鼠标按下时放下棋子,可是,要是我们按下后意识到按错了怎么办;那就改用Up函数,表示当鼠标键松开时放下棋子。

OK!添加函数如下:void CGame_wzqView::OnLButtonUp(UINT nFlags, CPointpoint){CView::OnLButtonUp(nFlags, point);CDC *pDC=GetDC();CDC Dc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can't create DC");//是否在棋盘内if(point.x>30&&point.x<410&&point.y>30&&point.y<410) {int px=(point.x-30)/20;int py=(point.y-30)/20;//是否已经有棋子if(colorwhite&&wzq[px][py]==0){Dc.SelectObject(m_bmwhite);pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOP Y);//表示存在白棋wzq[px][py]=1;//检查是否结束over(point);//换黑棋下colorwhite=false;}else if(wzq[px][py]==0){Dc.SelectObject(m_bmblack);pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOP Y);wzq[px][py]=-1;over(point);colorwhite=true;}}}由上面可以看出,当鼠标键松开时判断,如果那个位置没有棋子,则放下,并把棋盘数组赋相应的值:1或-16、是否结束:接着是用一个over()函数判断是否结束,是则结束并重新开始;否则,接着把鼠标变成对方棋子,表示对方下棋。

相关文档
最新文档