资源描述:
《五子棋游戏实践报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机实习报告姓名:班级:学号:小班序号:指导老师:题目:五子棋游戏平台:MFC基于对话框程序邮箱:五子棋游戏实验报告—・功能说明1.1总体功能说明五了棋是一种两人对弈的纯策略型棋类游戏,起源于中国古代的传统黑片棋种之一。木次实验,我设计的是人机对弈游戏,棋盘规格为14*14,棋子放置于方格内,当某一方有五个棋子连成一•条直线时,即为获胜者。游戏者在完成一局后可以在界血上选择重新开始进行下一次游戏。1.2用户界面该界而可以为游戏界而,可肓接点击开始进行五了棋游戏,游戏者开始可以点击任意方格放置第一枚棋子,计算机也会随Z放置棋子的,游戏
2、会随着游戏者和计算机交替下棋而进行的。游戏结束后,可以选择重新开始进行下一轮游戏,也可以点击结束离开游戏界面。1.3使用方法通过在某一点点击鼠标选择你想要放置棋子的位置,来达到五子连珠的效果。一局结束后,游戏者可以选择重新开始进行下一•次游戏。程序设计说明2・1总体设计框架工程项目的主要框架式基于基于对话框的MFC平台,当工程创建成功之后,基类CDialog和派生类类CAboutDlg,CMyDlg已经创建成功。从整个程序上来看可以分成以下几个主要的板块。一,游戏机界面的设计:通过创建了按钮并设置属性来完成按钮所实现的功能。二,实现加
3、载位图和相应鼠标点击来设计游戏lUli面:通过CBitmapg数来加载bmp图片素材,当鼠标指向棋盘内显示手拿黑口棋子的位图,游戏者通过点击鼠标左键來放置棋子。三,找出所冇五了连珠的结果,并用数组标记出來。四,计算计算机放置棋了的位置:通过评定计算机和游戏者的赢得可能性谁比较人,来选定计算机是防守还是进攻;然后计算计算机的最佳落了点,即权值最大点。五,显示游戏界面:每当放置一个棋了,如果双方都没冇赢,就显示当前页面。如果任意一方获胜,则停止游戏,成一条线的棋子显示为红色,弹出对话框显示游戏结朿。程序执行流程:—基于对话框的MFC五子棋
4、建立新的工程了上屏幕初始化:包括设置按钮等;定义变量并初始化:棋盘:board]14][14];人的所有赢法数组:ptable[14][14][480];计算机所有的赢法数组:ctable[14][14][480];人的权值数值:ppgrade[14][14];计算机的权值数组:ccgrade[14][14];2.2关键算法描述算法1:设置鼠标左键单击落下棋子。在视图消息OnLBugnDown(UINTnHags,CPointpoint)消息处理函数中添加代码。nFlags参数确定左键是否按下,point参数为左键按下时该点的位置坐标
5、值。通过此函数就可找到棋子的坐标,再通过函数dostep()显示出来棋子落下之后的效果即可。voidCMyDlg::OnLButtonDown(UINTnFlags,CPointpoint){intm,n;CDCthmeml;CClientDCdc(this);thmem1.CreateCompatibleDC(&dc);intcurx=point.y;intcury=point.x;m=int((curx-15)/20);n=int((cury-25)/20);CDialog::OnLButtonDown(nFlags,point)
6、;〃基类的响应鼠标左键函数dostep();//函数的功能吋开始在界而上演示走棋的效果return;}算法2:找到所有的赢法。通过计算机扌I描所有的可能,通过使用3个for循环嵌套实现多次查找。共有4种类型,行,歹J,两个对角线。例如列扫描:第一层循环控制横朋标0〜13,第二层循环控制纵处标()〜9,最内层循环控制纵坐标的变化()~4,ptable[i][j+k][count],当count为一个固定的数时,横坐标i保持不变,最内层循环,纵坐标加了5次,每次加1,实现竖着5了相连的赢法。for(i=0;i<14;i++)for(j=0
7、;j<10;j++){for(k=0;k<5;k++)ptable[j+k][i][count]=true;ctable[j+k][i][count]=tme;算法3:计算计算机的权值,然后选择获胜的最大概率点。通过compute^)函数,一共有480利
8、赢法,确定一个点后,480种赢法都进行扫描。在其中的每一种赢法中如果在某点下棋后使得有4个棋子直线相连,使用switch()函数,使该点分数加上400,相应的如果在该点下棋后只有1个,2个,3个,棋子直线相连,分别给该点分数加上5,50,100。当扫描完480种可能后,这个点的权值就
9、算出來了,继续计算下一个点的权值。当扫描了所冇的点后,比较所侑点的权值,最人的权值点就是计算机的落子点。voidCMyDlg::Computer(){〃以下函数吋设置权值的功能,为计算机选择最佳的落子点做好准备for(i