资源描述:
《C++五子棋人机对战游戏设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、五子棋人机对战游戏摘要:本文用visualc++来设计与实现简单的五子棋人机对战游戏的基本功能,玩家可以在游戏区域中适当的位置来放棋子,通过程序设计让电脑选择最佳的落棋点,来实现人机对战。文中对该游戏的算法进行了详细的介绍,其中核心内容包括界面的设计、最佳落棋位置的判断以及游戏胜利判断功能的实现。程序实现起来较简单,同时也比较实用。关键词:五子棋,vc,人机对战游戏1.引言1.1游戏介绍五子棋是一种很受人们喜爱的智力游戏,它的规则简单,但玩法变化多端,富有趣味性,特别锻炼人的智力,适合人们消遣。1.2目的网络小游戏制作的目的是满足了人们休闲的需要,在紧张工
2、作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,甚至跨国间人们互相娱乐的目的。1.3主要问题开始制作游戏时,主要要解决的问题有以下几个方面:1.如何设置整个游戏的界面;2判断是否可以放下棋子;3.如何让电脑选择最佳位置;4.判断是黑棋胜还是白棋胜。2.需求分析关于五子棋游戏的功能描述如下:运行游戏并进行初始化工作,将整个游戏区域中纵线和横线相交的点坐标化,并且这些点是将来下棋的位置。玩家可以在任意没有放棋子的点放下棋子,直到一方有五个棋子连成一条线为胜方。游戏的整体运行效果
3、如图1.1。图1.13.功能模块的设计3.1变量和函数在view类中添加变量函数如下:保存vscomputer时白棋位置CPointvspoint;CPointbpointcan4,//这个位置空,它旁边有四个黑棋wpointcan4,//这个位置空,它旁边有四个白棋bpointcan3,//这个位置空,它的旁边有三个黑棋wpointcan3,//这个位置空,它的旁边有三个白棋bpointcan2,//这个位置空,它的旁边有两个黑棋wpointcan2,//这个位置空,它的旁边有两个白棋bpointcan1;//不是以上情况,这个位置空在得到最大值和方向上
4、寻找落棋点,其中i、j表示搜索起点,n表示方向voidsearchcandown1(inti,intj,intn);voidsearchcandown2(inti,intj,intn);voidsearchcandown3(inti,intj,intn);voidsearchcandown4(inti,intj,intn);计算最大值及方向CPointmaxnum(inta,intb,intc,intd);最好落棋点voidbestputdown(inti,intj);计算机下棋voidcomputerdown();在位置point放下棋子voidputd
5、own(CPointpoint);人对机菜单afx_msgvoidOnCpmputer();3.2.框架的搭建新建工程,选择单文档,在Step4of6中先中WindowsSockets复选框4.算法分析与设计4.1游戏界面的设计由于游戏的棋盘大小是一定的,不能改变大小的,是应该符合要求的。用如下函数设置窗口大小:BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs){if(!CFrameWnd::PreCreateWindow(cs))returnFALSE;//TODO:ModifytheWindowclasso
6、rstylesherebymodifying//theCREATESTRUCTcscs.dwExStyle=cs.dwExStyle
7、WS_EX_TOPMOST;//cs.style=WS_SYSMENU
8、WS_OVERLAPPED
9、WS_MINIMIZEBOX;//;//设置窗口大小:400*340cs.cx=450;cs.cy=500;returnTRUE;}画棋盘:在OnDraw(CDC*pDC)函数中画棋盘,由于在游戏过程中有可能重画棋盘,而那时棋盘上面有棋子,所以,我们在这个函数里面必须有画棋子的语句。在此用数组的做为1表示白棋,-1表示黑棋。v
10、oidCMy3_1View::OnDraw(CDC*pDC){CMy3_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);//画背景CBrushmybrush1;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
11、=pDC->SelectObject(&mypen);for(in