五子棋VCE嵌入式设计_第1页
五子棋VCE嵌入式设计_第2页
五子棋VCE嵌入式设计_第3页
五子棋VCE嵌入式设计_第4页
五子棋VCE嵌入式设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统原理与应用课程设计嵌入式系统原理与应用课程设计—五子棋游戏设计题目:五子棋游戏设计姓名:学号:专业:指导老师:2013年11月15日目录TOC\o"1-3"\h\u16762一、系统分析与总体设计 393681.1选题的意义 348761.2理解需求 3304541.2.1功能需求 364871.2.2界面设计需求 4297081.3EVC的各组成部分的构成和作用 4229961.4五子棋游戏的基本要求 5216201.4.1开发环境描述 5306171.4.2系统总体功能: 6205551.4.3每个功能的详细说明: 6200351.5开发工具的选用及介绍 64323二、设计内容及要求 8218502.1系统总体功能设计 8238362.2总体设计 861012.3主要模块功能设计流程图 10103952.4算法实现 13318822.4.1使用到的主要数据结构 1310822.4.2使用到的主要函数 13218592.4.3搜索算法实现描述:

144395三、系统实现与调试 16225833.1运行程序结果图 16151933.2调试过程中错误信息和解决方法 18130073.3调试过程:程序时间流程中的解决方法 18196593.4系统运行的结果 195363结论 2129846参考文献 2132265附:设计程序代码 22

一、系统分析与总体设计1.1选题的意义五子棋是一种两人对弈的纯策略型棋类游戏,棋具与围棋通用,是起源于中国古代的传统黑白棋种之一。相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十条竖线,这无意中的发明造就出了五子棋。后来,中国古代的五子棋先由中国传到高丽(今朝鲜),然后传到日本。20世纪初传统五子棋及连珠从日本传入欧洲。许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”;欧洲人称其为“绅士棋”,代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式;美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。由于五子棋游戏规则简单易懂,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。已在各个游戏平台有应用。基于Windows的游戏设计方式很多,如基于Java的跨平台设计,基于.net平台的设计,基于JAVA的设计由于运行在虚拟机上运行,等等。嵌入式系统根据应用需求满足应用系统的功能、可靠性、成本、体积等要求,提高了运行效率。本文采用EVC在ARM平台上进行设计来完成五子棋游戏。1.2理解需求1.2.1功能需求实现游戏界面的显示;显示用户行程,提示用户下子;查看用户的输入是否出界;实现悔棋功能;实现新一局游戏开始功能;判断每局游戏输赢;用户选择是否开始新一盘五子棋游戏;退出游戏。1.2.2界面设计需求显示游戏运行界面,棋盘大小规格为15*15;根据功能需求,显示新游戏和悔棋按钮;系统和用户需要用不同的颜色的棋子,最后以红色棋子显示赢家。◆EVC4.0软件界面的组成六大组成部分:标题栏、菜单栏、工具栏、工作区、活动窗口区、输出窗口1.3EVC的各组成部分的构成和作用◆标题栏显示当前的工程名,活动窗口中当前打开的文件名。当当前活动窗口中没有打开任何文件,则该栏只显示当前的工程名◆菜单栏●由“File”、“Edit”、”View”等共9个菜单项组成●几乎囊括了EVC4.0下可以进行的所有操作◆工具栏●在EVC4.0主界面的空白区右单击鼠标,弹出的菜单中列出了所有可视的菜单项●常用的有“Standard”、”WCEConfiguration”等◆工作区●三个选项卡:“ClassView”、“ResourceView”、 “FileView”●ClassView选项卡用来观察当前工作区中已有工程名以及工程的个数,每个工程用到的类、结构体、函数、全局变量。●ResourceView选项卡用来观察所有工程用到的资源●FileView选项卡用来观察工作区中所有工程中包含哪些源代码文件,如:.C、.cpp等◆活动窗口区●EVC4.0软件中最大的用于显示和编辑的区域●用于显示工程中的资源文件和源代码文件●用于编辑资源文件●用于编辑源代码文件●在程序调试时,提供可视化界面用作断点设置和程序执行时跟踪观察1.4五子棋游戏的基本要求1.4.1开发环境描述随着个人掌上电脑PocketPC、智能手机及工业控制器等各种嵌入式产品的不断发展,人们对MicrosoftWindowsCE也越发关注起来,使用WinCE可以成为新一代智能设备设计高性能的应用程序。五子棋游戏软件基于ARM的wince5.0平台,利用PXA270RP实验箱模拟仿真器,利用EVC编程来具体实现,在实验箱的触摸屏上进行游戏。嵌入式系统作为芯片和软件的集成体,在科学研究、工业控制、军事技术、医疗卫生、消费电子等方面有着普遍的应用,此软件基于ARM处理器和windowsCE的研究平台,windowsCE是由优先级的多任务操作系统它允许多重功能、进程,在相同的时间系统中运行WindownsCE支持最大的32位同步进程,微软WindownsCE被设计成针对小型设备的通用操作系统,它可以通过设计一层位于内核和硬件之间代码来设定硬件平台。嵌入式工具包包括设备驱动器(DDK)和软件开发包(SDK),DDK提供了关于写驱动器的附加文本,SDK提供库、头文件、样本代码、文本以允许,开发者对基于WindownsCE的平台进行写操作,WindownsCE提供了相同的程序界面,以用来为其他的视窗操作系统开发功能。=1\*GB3①技术可行性运用Windows2000/XP以上的操作系统,SQLSERVER2000的数据库技术,开发以WindowsXP为用户的操作平台,界面友善、功能齐全的《五子棋双人对战小游戏》。=2\*GB3②经济可行性 一方面,新系统中棋盘界面和更强劲的功能支持,不仅增加了游戏的趣味性,而且使游戏者更尽兴;另一方面系统开发成本低,现有PC机即可提供该系统开发工作需要的所有硬件设备环境。=3\*GB3③操作可行性操作上是键盘的使用,主要凭借输入坐标确定棋子落子位置,方便简单。使用前只要看明白游戏规则及其方法即可。1.4.2系统总体功能:通过判断棋盘上的所有相同颜色的子能否五个相连来判断游戏是否结束。

实际上,是根据当前最后一个落子的情况来判断胜负的。实际上需要从四个位置判断,以该子为出发点的水平,竖直和两条分别为

45度角和135度角的线,目的是看在这四个方向是否最后落子的一方构成连续五个的棋子,如果是的话,就表示该盘棋局已经分出胜负。1.4.3每个功能的详细说明:=1\*GB3①游戏开始:打开游戏,用户可以直接进入游戏,由用户首先开始下棋。②游戏进悔棋操作:用户可以点击“悔棋”按钮,取消前一步所下的棋子,重新落子。=3\*GB3③游戏开始新游戏操作:用户可以点击“新游戏”按钮,重新开始新一轮的游戏。=4\*GB3④游戏结束操作:游戏结束时,用户可以选择是否开始新一轮游戏。1.5开发工具的选用及介绍EVC++是C++语言嵌入式设备应用程序的编译器,该编译器编译的程序可以运行在便携式电脑的微软系列的操作系统中,如WinCE、WindowsMobile。目前市面上最常见的导航软件,都是用C++语言编写、在EVC++上编译出来的。EVC是微软公司推出的可视化开发工具,主要用来开发基于WindowsCE的应用程序。EVC的主要特性如下:

智能化的开发环境、支持MFC类库和ATL、COM组件、更快速的编译与输出、支持C/C++、汇编混合编程、支持组件的更新和扩展等等。平台模拟器是一个在PC下模拟出来的操作系统软件。平台模拟器它的运行速度比运行在实际的物理平台上的操作系统要慢。WindowsCE模拟器在Windows桌面系统上以窗口应用程序的形式运行,并且可以直接访问CPU以及系统内存。从运行效率的角度来看,运行在模拟器上的应用程序的效率只有在实际硬件环境上运行效率的80%左右。WindowsCE5.0之前版本中,模拟器只支持X86的结构。如果开发者使用嵌套汇编编程,程序的编写和执行效果就会因CPU结构的不同而产生比较大的差异。开发WindowsCE设备上的应用程序时,开发平台和程序运行平台是两个独立的操作系统,即开发机和目标机是独立的。用户经常需要在开发机端查看目标平台的信息,或在两者之间传输文件。微软公司在EVC中集成了远程管理工具PlatformManager,提供开发机和目标平台的远程连接。建立远程连接需要通过PlatformManage来实现,开发机是通过TCP/IP协议来实现与模拟器的远程连接的。启动模拟器的过程其实就是在远程连接建立的基础上进行的,即模拟器成功启动,就已经在开发机和目标机(即模拟器)之间成功建立了远程连接。在使用实际的WindowsCE设备时,需要在设备启动后手动建立远程连接。远程连接工具的功能如下:

(1)RemoteFileViewer工具该工具类似Window的资源管理器,可以显示WindowsCE远程机的目录文件结构,并且可以上传和下载文件。

(2)RemoteProcessViewer工具该工具类似于Windows上的任务管理器,可以查看WindowsCE目标设备上运行的进程及线程的详细信息,此外还可以终止指定的进程。

(3)RemoteZoomin工具该工具可以对WindowsCE设备进行截屏,可以保存为bmp文件,也可以直接复制到剪贴板。(4)RemoteRegistryEditor工具。该工具给Windows上的注册表管理器一样,对WindowsCE目标设备上的注册表进行管理。

(5)RemoteHeapWalker工具。

该工具显示WindowsCE目标设备上运行的进程列表,并详细描述堆标识符和标志位信息。可以通过此工具确定某个应用程序是否正在释放为它分配的所有内存队列,从而判断是否存在内存泄漏。

(6)RemoteSpy++工具。

与VisualC++提供的工具Spy++一样,只是它是监控WindowsCE目标设备上的窗口消息。(7)RemoteSysteminformation。显示WindowsCE目标设备上的系统信息。二、设计内容及要求2.1系统总体功能设计游戏开始时,由用户开局,将一枚棋子落在棋盘一坐标上,然后由电脑落子,如此轮流下子,直到某一方首先在棋盘的竖、横或斜三方向上的五子连成线,则该方该局获胜;在下棋途中可以悔棋,也可以从新开局。2.2总体设计将我们定制好的winCE系统下载到开发板上,于此同时已经在EVC上开发平台上运用VC++语言开发好了五子棋的相关代码,剩下的就是将上述三个过程整合再一起,达到最终在开发板上运行嵌入式程序的过程。将开发板连接好电源,下载好winCE系统后,将数据线连接好,启动同步软件,进行连接,直到同步软件显示连接成功之后,浏览板子内容,选择ARM2410开发板SDK,进行编译,将相应目录下的可执行文件加到实验箱目录下,然后连接鼠标到开发板上的USB上,点击可执行程序文件,运行开发完成的游戏程序。当然在本实验中我们直接应用的是模拟器来实现程序的运行,不在需要连接试验箱来进行操作,游戏界面设计包括:游戏界面的布局,分伟三大板块,分别是游戏显示界面,左下角是新游戏开始按钮,右下角是悔棋按钮。图2-1图形界面的设计图2-1五子棋程序流程图2.3主要模块功能设计流程图系统系统输入模块输出模块判断模块判断违规断判输赢判断命令初始化调试模块是否违规白子赢黑子赢图2-2系统功能模块图结束开始从四个方向开始判断是否有五子在一条线上NoYesNoNoYesYesNoYes切换用户下棋水平竖直上斜下斜赢结束开始从四个方向开始判断是否有五子在一条线上NoYesNoNoYesYesNoYes切换用户下棋水平竖直上斜下斜赢图2-3判断输赢模块图下棋下棋从新开始?悔棋?五子在一条线上?获胜切换用户YesNoYesNoNoYes结束开始图2-4判断命令模块流程图2.4算法实现2.4.1使用到的主要数据结构=1\*GB3①wzwin表示哪方获胜的情况,当inner=0时还未确定哪方获胜,inter=1,白子获胜,inter=2黑子获胜。structwzwin{ intwinner; intnx1; intnx2; intny1; intny2;};=2\*GB3②Wzsave保存下棋记录,即(ix,iy)这个坐标是否使用,used=0未使用,used=1已使用,colour表示此处棋子的颜色。structwzsave{ boolused; boolcolor; intix; intiy;};2.4.2使用到的主要函数=1\*GB3①开始新游戏的函数:voidNewGame();=2\*GB3②画棋子voidDrawQZ(intnx,intny,boolstyle);=3\*GB3③当需要画棋盘时调用voiddraw(); =4\*GB3④绘图所用到的函数 黑色下子booluserAd(intnx,intny); 白色下子booluserBd(intnx,intny);=5\*GB3⑤ booldownzi(intnx,intny);//外部调用此函数下子=6\*GB3⑥判断胜败函数boolbewinner2(boolstyle,intnx,intny);=7\*GB3⑦用户悔棋函数boolgoback();=8\*GB3⑧设置棋子类型voidsetback(intnx,intny,boolstyle);=9\*GB3⑨用户是否可以悔棋判断函数boolgetbackble()。2.4.3搜索算法实现描述:

注意下面的核心的算法中的变量currentBoardSituation,表示当前机器最新的盘面情况,

CountList表示第一层子节点可以选择的较好的盘面的集合。核心的算法如下:

void

MainDealFunction()

{

value=-MAXINT;

//对初始根节点的value赋值

CalSeveralGoodPlace(currentBoardSituation,CountList);

//该函数是根据当前的盘面情况来比较得到比较好的可以考虑的几个盘面的情况,可以根据实际的得分情况选取分数比较高的几个盘面,也就是说在第一层节点选择的时候采用贪婪算法,直接找出相对分数比较高的几个形成第一层节点,目的是为了提高搜索速度和防止堆栈溢出。

pos=CountList.GetHeadPosition();

CBoardSituation*

pBoard;

for(i=0;ivalue=Search(pBoard,min,value,0);

Value=Select(value,pBoard->value,max);

//取value和pBoard->value中大的赋给根节点

}

for(i=0;ivalue)

//找出那一个得到最高分的盘面

{

currentBoardSituation=pBoard;

PlayerMode=min;

//当前下子方改为人

Break;

}

}

其中对于Search函数的表示如下:实际上核心的算法是一个剪枝过程,其中在这个搜索过程中相关的四个参数为:(1)当前棋局情况;(2)当前的下子方,可以是机器(max)或者是人(min);(3)父节点的值oldValue;(4)当前的搜索深度depth。

double

Search(CBoardSituation&

board,int

mode,double

oldvalue,int

depth)

{

CList

m_DeepList;

if(deptholdvalue))==

TRUE)

{

if(mode==max)

value=select(value,search(successor

Board,min,value,depth+1),max);

else

value=select(value,search(successor

Board,max,value,depth+1),min);

}

return

value;

}

else

{

if

(

goal(board)<>0)

//这里goal(board)<>0表示已经可以分出胜负

return

goal(board);

else

return

evlation(board);

}

}

注意这里的goal(board)函数是用来判断当前盘面是否可以分出胜负,而evlation(board)是对当前的盘面从机器的角度进行打分。

下面是Select函数的介绍,这个函数的主要目的是根据

PlayerMode情况,即是机器还是用户来返回节点的应有的值。

double

Select(double

a,double

b,int

mode)

{

if(a>b

&&

mode==max)¦¦

(a<

b

&&

mode==min)

return

a;

else

return

b;

}

三、系统实现与调试3.1运行程序结果图3.2调试过程中错误信息和解决方法开发五子棋程序中,遇到的问题及技术难题如下:=1\*GB3①错误信息:C:\Users\qingxue\Desktop\brick\brick.rc(10):fatalerrorRC1015:cannotopenincludefile'afxres.h'.解决方法:C:\WINCE500\OTHERS\MFC\INCLUDE路径添加到MicrosofteMbeddedVisualC++4.0中ToolsOptionsDirectoriesincludefiles下即可。=2\*GB3②错误信息:LINK:fatalerrorLNK1104:cannotopenfile'mfcs42d.lib'解决方法:C:\WINCE500\OTHERS\MFC\LIB\X86路径添加到MicrosofteMbeddedVisualC++4.0中ToolsOptionsDirectoriesLibraryfiles下即可。3.3调试过程:程序时间流程中的解决方法=1\*GB3①首先,建立盘面,用函数voiddraw()画棋盘,然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘(棋盘可以不显示)。=2\*GB3②当轮到用户(即黑子)下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在map[15][15]数组的相应地方记录‘1’,以表明该子是用户下的;当轮到系统(即白子)下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在map[15][15]数组的相应地方记录‘2’,以表明该子是系统下的。=3\*GB3③当有棋子落下时,调用voidDrawQZ()画棋子函数在棋盘上画出。=4\*GB3④booldownzi()外部调用此函数下子,控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去。=5\*GB3⑤盘面分析填写棋型表用户在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。我们从棋盘左上角出发,向右逐行搜索用户棋型表,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到储存棋局中unsignedcharuser[x][y][n]表示用户棋局;unsignedcharpc[15][15][4]表示系统棋局;(x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向),而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,用户棋型表也就填写完毕了。=6\*GB3⑥对方落子有了上面填写的两张棋型表,就是遍历棋型表user[15][15][4]和pc[15][15][4]找出其中数值最大的一点,在该点下子即可。但这种算法的弱点非常明显,只顾眼前,不能顾全大局,这就和许多五子棋初学者一样犯了目光短浅的毛病。如果在这儿下子将会形成对手不得不防守的棋型,例如:‘冲四’、‘活三’,那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。这时再调用模块4对预测后的棋进行盘面分析,如果出现了‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了;否则照同样的方法向下分析,就可预测出第二步、第三步……要是盘面上没有对手必须防的棋型,那么进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能待机发动反击。3.4系统运行的结果图3-1电脑胜利的结果图图3-2人胜利的结果图图3-3确定继续下一盘的结果图结论在系统分析阶段,针对五子棋游戏,将整个游戏分成若干个部分,逐步解决过程中遇到的每一个问题,初步地实现了基本功能,并最终实现所想要的效果。此程序的用户界面已基本实现了俄罗斯方块游戏的一些基本的控制操作,但由于时间和能力的限制,程序有许多不足之处,很多功能还没有完全实现,或者还没有完善。若要设计出更加具有可玩性和好玩性的五子棋游戏,就要靠以后更多和更深入的学习。通过这次的课程设计也是我认识到了我在程序设计方面的严重不足,以及专业知识的严重匮乏。我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。这样一种更贴切实际的课程设计,大大的提高了我的学习效率,希望能够在平时教学的时候也能加入一些类似课程设计的程序设计习题。参考文献<1>《EVC高级编程及其应用开发》王兵李存斌陈鹏等编著中国水利水电出版社<2>《270RP_wince实验指导书》

附:设计程序代码#include"stdafx.h"#include"AdbonWZQ.h"#include"AdbonWZQDlg.h"#include"MSGDLG.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif//主要下子定位执行函数CAdbonWZQDlg::CAdbonWZQDlg(CWnd*pParent/*=NULL*/) :CDialog(CAdbonWZQDlg::IDD,pParent){ CBitmapb,c,d,e,f; CSizex; b.LoadBitmap(IDB_QP242); x.cx=242;//446; x.cy=242;//446; qp.CreateCompatibleDC(NULL); qp.SelectObject(&b); qp.SetSize(x); b.DeleteObject(); c.LoadBitmap(IDB_QZH16); x.cx=16;//27; x.cy=16;//27; qzh.CreateCompatibleDC(NULL); qzh.SelectObject(&c); qzh.SetSize(x); c.DeleteObject(); d.LoadBitmap(IDB_QZB16); x.cx=16;//27; x.cy=16;//27; qzb.CreateCompatibleDC(NULL); qzb.SelectObject(&d); qzb.SetSize(x); d.DeleteObject(); e.LoadBitmap(IDB_MASK17); x.cx=16;//27; x.cy=16;//27; mask.CreateCompatibleDC(NULL); mask.SelectObject(&e); mask.SetSize(x); d.DeleteObject(); f.LoadBitmap(IDB_DEAD16); x.cx=16;//27; x.cy=16;//27; dead.CreateCompatibleDC(NULL); dead.SelectObject(&f); dead.SetSize(x); f.DeleteObject(); m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}//数据交换函数voidCAdbonWZQDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX);}//实现信息映射机制BEGIN_MESSAGE_MAP(CAdbonWZQDlg,CDialog) ON_BN_CLICKED(IDC_BUTNEW,OnButnew) ON_BN_CLICKED(IDC_BUTBACK,OnButback) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_PAINT() //实现命令传递机制END_MESSAGE_MAP()//函数中显示信息操作BOOLCAdbonWZQDlg::OnInitDialog(){ CDialog::OnInitDialog(); //为下面执行设置标识 SetIcon(m_hIcon,TRUE); SetIcon(m_hIcon,FALSE); CenterWindow(GetDesktopWindow()); SetWindowPos(this,0,26,240,294,SWP_SHOWWINDOW); CRectrcdlg,rcc; GetClientRect(rcdlg); CButton*m_ctrl=(CButton*)GetDlgItem(IDC_BUTNEW); rcc.left=8; rcc.top=rcdlg.Height()-28; rcc.right=rcc.left+50; rcc.bottom=rcc.top+23; m_ctrl->SetWindowText(TEXT("新游戏")); m_ctrl->MoveWindow(rcc); m_ctrl=(CButton*)GetDlgItem(IDC_BUTBACK); rcc.left=rcdlg.Width()-58; rcc.right=rcc.left+50; m_ctrl->MoveWindow(rcc); m_ctrl->SetWindowText(TEXT("悔棋")); CBitmaptemp; temp.LoadBitmap(IDB_HENT); m_HenMemDC.CreateCompatibleDC(NULL); m_HenMemDC.SelectObject(&temp); temp.DeleteObject(); this->SetWindowText(L"五子棋v1.0"); runpath=""; loadfile(); twzq.SetDc(&qp,&qzh,&qzb,&mask,&dead,this->GetDC()); twzq.NewGame(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble()); returnTRUE;}//调用新开局函数voidCAdbonWZQDlg::OnButnew(){ //这这里添加控制操纵代码 Invalidate(); twzq.NewGame(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble());}//调用悔棋函数voidCAdbonWZQDlg::OnButback(){ //这这里添加控制操纵代码 twzq.goback(); GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble());}voidCAdbonWZQDlg::loadfile(){ twzq.AItype=2; twzq.Model=0;}voidCAdbonWZQDlg::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault intx1,y1; x1=(int)(point.x+2)/16; y1=(int)(point.y+2-32)/16; //没有下子时结束 if(!twzq.downzi(x1,y1)) { return; } //一局结束后显现的信息 GetDlgItem(IDC_BUTBACK)->EnableWindow(twzq.getbackble()); //操作者输了后显示的信息 if(twzq.twinner.winner==1) { MessageBox(L"小样,输了吧,回去再练几年吧!^_^^_^"); GetDlgItem(IDC_BUTBACK)->EnableWindow(FALSE); twzq.draw(); } //操作者赢了后显示的信息 if(twzq.twinner.winner==2) { MessageBox(L"-_-你是不是作弊了啊,再来两盘..."); GetDlgItem(IDC_BUTBACK)->EnableWindow(FALSE); twzq.draw(); } CDialog::OnLButtonDown(nFlags,point);}voidCAdbonWZQDlg::OnLButtonUp(UINTnFlags,CP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论