青岛理工大学琴岛学院设计报告课题名称:基于C#的五子棋游戏开发学院:计算机工程系专业班级:计科(专升本)14-21学号:20140371006学生:指导教师:青岛理工大学琴岛学院教务处2015年12月18日2学生指导教师课题名称基于C#的五子棋游戏开发设计时间2015.11.23-2015.12.18设计地点动漫1设计目的课程设计的目的就是培养学生的理论联系实际的能力。通过课程设计,使得学生能够加深对讲授内容的理解、累积经验、学会独立上机调试程序;并且逐步达到综合运用网页相关知识,真正掌握.NET技术的精华,从而达到熟练应用程序设计语言的目的。也为将来做较大的系统打下坚实基础。通过本次课程设计,应该达到以下教学任务:巩固所学知识,培养学生的上机实践能力以及独立调试程序的能力,更主要的是使学生了解做项目的大体流程。每一个小组制定一题,项目成员要在项目经理的带领下,完成项目的所有内容。重点掌握ASP.NET网站设计开发流程,界面要友好,功能齐全,完成一个综合项目。指导教师评语系部教研室意见34一、需求分析1.选题:通过学习window窗体应用程序的开发与实现,对C#程序开发逐渐产生了浓厚的兴趣,心中有了设计游戏的想法,通过学习和查资料慢慢对游戏制作有了一定的了解,后来通过深入学习,对五子棋游戏设计有了进一步了解,慢慢理清了其中的开发过程与原理,最终确定了基于C#五子棋游戏的设计与实现项目。2.界面:(1)通过上网学习,对游戏界面风格有了一定的认知,于是决定走界面美观风。手游中的主界面给人一种简单明了的感觉,通常有模式关卡,让玩家越玩越带感,于是决定模仿它们,游戏主界面有四个模式,玩家可以选择不同模式进行对弈。如图1所示:图1.主界面(2)游戏模式一,双人对战模式。界面右侧有悔棋、返回、排行榜、关于、重新开始等功能按钮,点击各按钮,执行各功能。如图2所示:图2.模式一界面模式一模式二模式一模式一模式三模式四返回按钮悔棋按钮重新开始按钮n排行榜按钮关于按钮棋盘5(3)游戏模式二,人机对战模式。游戏界面中左部是棋盘,悔棋、返回、排行榜、关于、重新开始等功能按钮,此模式实现了人和电脑的交互。如图3所示:图3.模式二界面(4)游戏模式三,让子挑战模式。游戏界面中左部是棋盘,右部有悔棋、返回、排行榜、关于、重新开始功能选项按钮。和模式二不同的地方是让子,开局后棋盘中布好了让给电脑的白子。正所谓有人的地方就会有争斗,游戏中有菜鸟就会有高手。高手喜欢挑战,于是挑战模式应运而生。此模式的界面和模式二界面相同,在此不再重画。(5)游戏模式四,收拾残局模式。游戏界面中左部是棋盘,右部有摆棋、对战、悔棋、返回、再来一局功能选项按钮。和模式二不同的地方是开局,开局后玩家需先摆放棋子,然后点击对战按钮开始游戏。此模式界面设计参造模式二,不再重画。3.功能划分:通过对五子棋游戏的分析与了解,可知其基本功能有开始、保存、打开、悔棋、认输、和棋、返回、退出及聊天等功能。在这里,由于条件时间有限,仅实现悔棋、返回、重新开始及模式选择等功能。(1)模式选择功能:在打开游戏后,出现在玩家面前的是模式选择窗口,即主窗口。玩家可通过点击相应按钮进入相应模式进行对弈。此功能参照手游及单机小游戏主界面简约美观的特性制作的,多模式的增加符合广大玩家的喜好。(2)悔棋功能:在每个模式中都有悔棋功能,在模式一中每次悔棋退后一子,模式二到模式四每次悔棋退后两子,棋盘开局后就有的让子的棋子悔棋无效。人无完人,谁能不犯错,棋盘返回按钮悔棋按钮重新开始按钮n排行榜按钮关于按钮6根据玩家的棋艺高低程度难以把握,为了让玩家不至于因电脑太强对开发者产生怨言,从而有了悔棋功能,进而对五子棋菜鸟起引导作用,使其怀着开心的心情与保持兴趣走向棋圣之路。对于高手而言,棋品也是要有的,悔棋功能形同虚设而已。(3)从新开始功能:此功能是菜鸟提升棋艺的首选功能,当玩家进行游戏到中途时,因棋势不明,或要败时,不能接受这一现状,导致心情低落,怎么办?只需轻轻一点,一切回归起点,也就是初始化而已。(4)返回功能:此功能的作用是退出当前模式,回到游戏主窗口,也就是模式选择窗口。方便玩家在各个模式自由出入,尽情的展现自己的风采。(5)人机对弈电脑下棋功能:在模式二到模式四中,玩家的对手都是电脑,电脑棋力取决于开发者,在某中意义上来说,玩家在和开发者对弈也是正确的。此功能是程序按照一定的算法循环扫描,算出己方和敌方最佳落子点,再判断出攻守,选出最终的落子点,落子后等待玩家落子。(6)让子功能:在模式三中,为了增加游戏难度,对棋艺大成者量身打造了让子功能。开局后,一般都是黑棋先行,在这里玩家执黑,让电脑1子,棋盘上变成了电脑执白先行1子,白棋落在天元位置上,难度一般。玩家赢后,挑战难度+1,玩家让电脑2子,棋盘上电脑执白先行2子,白棋落在天元位置左右两侧,难度适中,适合一段棋手挑战。玩家赢两局后,挑战难度+1,玩家让电脑3子,棋盘上电脑执白先行3子,考录到一般玩家没有如此高深棋力,因此白棋分散落在棋盘交叉线上,难度相对适中,适合一段及以上棋手挑战。让4子和5子也是一样的原理,难度较高,适合二段及以上棋手挑战。对战后,会在棋盘中部上方显示让子数目,为迎合玩家的虚荣心理而设计。(7)判断胜负功能:在每个模式中都需要对对局进行胜负判断,进而产生了胜负判断功能。其功能原理是对玩家或电脑下的棋子进行循环扫描,对各个方向扫描黑白子双方是否形成五子连珠,根据形成五子连珠方判断胜负,根据判断弹出对应的胜负提示框。再根据所属模式对胜负后的对局进行参数修改,如:模式一和模式二,不论胜负只需对其进行初始化;模式三,玩家胜出,让子加一,难度增加,需对其让子参数进行修改,反之则不进行任何处理操作;模式四,玩家胜出,对局胜出参数加一,呼应必胜模式的让子布局功能,玩家失败则不进行参数修改操作等。(8)初始化界面功能:在每个模式中都需对窗口界面进行初始化,考录到原有界面运行后的效果略显呆板,为增加美观性,需要对各窗口进行导入图片处理,美化界面。根据对局情形,在棋盘中部上方显示提示文字,并在棋盘上显示存在的棋子,对各参数进行初始化处理。74.自定义类描述、各类方法描述及添加的命令响应。如表1所示:表1.用到的类类名描述说明Form3模式一游戏窗口类,该类主要对该模式下的窗口初始化并对鼠标等事件消息进行处理,实现悔棋功能、返回功能、排行榜功能、关于功能、重新开始功能等。Form4模式二游戏窗口类,该类主要对该模式下的窗口进行初始化并对鼠标等事件消息进行处理,实现人机对弈功能、悔棋功能、返回功能、排行榜功能、关于功能、重新开始功能、提示胜败功能等。Form5模式三游戏窗口类,该类主要对该模式下的窗口进行初始化并对鼠标等事件消息进行处理,实现让子功能、人机对弈功能、悔棋功能、返回功能、排行榜功能、关于功能、重新开始功能、提示胜败功能等。Form6模式四游戏窗口类,该类主要对该模式下的窗口进行初始化并对鼠标等事件消息进行处理,实现摆棋功能、人机对弈功能、悔棋功能、返回功能、排行榜功能、关于功能、重新开始功能、提示胜败功能等。二、总体设计1.游戏功能概述打开程序,游戏开始运行,登录进入模式窗口,选择游戏模式窗口弹出,窗口中有四个模式选择按钮,点击按钮,分别弹出对应的模式一、二、三、四窗口,完成具体模式的跳转。对于模式一,玩家点击鼠标进行下棋操作,判断点击点在棋盘内且无子时,在点击点画出棋子;如果点击点在棋盘外或有子时,则不处理,返回等待鼠标命令。然后判断是否存在五子连珠,如果不存在五子连珠,则返回等待鼠标命令;如果存在五子连珠,则进行判断胜负并提示胜负信息,再调用OnStart()函数初始化模式一窗口,重新开始游戏。玩家点击悔棋按钮,调用悔棋功能函数OnHuiqi(),在窗口中重画棋盘,去掉最后下的一个棋子,把悔棋后存在的棋子重新画在棋盘上。玩家点击重新开始按钮,程序调用OnStart()函数,初始化模式一窗口,重新开始游戏。对于模式二、三、四,玩家点击鼠标进行下棋操作,首先调用MouseMove函数。此函数的作用是判断点击点在棋盘内且无子时,在点击点画出棋子,如果点击点在棋盘外或有子时,则不处理,返回等待鼠标命令。然后调用gameOver()函数判断是否存在五子连珠,如果存在8五子连珠,则进行判断胜负并提示胜负信息,再调用OnStart()函数初始化这一模式窗口,重新开始游戏;如果不存在五子连珠,则调用AiGo()函数,进行电脑扫描最佳落子点完成电脑下棋操作。再调用Over()函数判断是否存在五子连珠,如果不存在五子连珠,则返回等待鼠标命令;如果存在五子连珠,则进行胜负判断并提示胜负信息,再调用OnStart()函数初始化这一模式窗口,重新开始游戏。玩家点击悔棋按钮,程序调用悔棋功能函数OnHuiqi(),在窗口中重画棋盘,去掉最后下的两个棋子,把悔棋后存在的棋子重新画在棋盘上。玩家点击重新开始按钮,程序调用OnStart()函数,初始化模式一窗口,重新开始游戏。1.绘制游戏进程图,如图4所示:图4.流程图模式选择窗口模式一选择按钮模式二选择按钮模式三选择按钮模式四选择按钮模式一窗口模式二窗口模式三窗口模式四窗口悔棋退出排行榜关于从新开始开始鼠标点击弹起在点击点画出棋子判断是否存在五子连珠弹出胜负提示框判断点击点在棋盘内且无子是是否否等待鼠标命令鼠标点击弹起在点击点画出棋子判断是否存在五子连珠弹出胜负提示框判断点击点在棋盘内且无子是是否等待鼠标命令电脑扫描最佳落子点判断是否存在五子连珠是否否9三、详细设计与实现1.悔棋功能的实现:为悔棋按钮添加类向导,再添加int变量bushu、qi[400]、wzq[19][19],用于记录先后下棋的具体坐标,以便于悔棋功能的实现。bushu用于记录下棋的落子数,qi[400]用于记录棋子的具体坐标,wzq[19][19]用于记录棋盘上各点存在棋子的黑白及有无情况。悔棋功能的实现原理是重新画出棋盘及悔棋后存在棋子。先判断是否刚刚开局,bushu不为0,就执行悔棋命令,把最后落下的第bushu个棋子的信息初始化,再画出棋盘,重画悔棋后存在的棋子。模式一与模式二、三、四的悔棋不同之处在于悔棋棋子数。具体代码如下:privatevoidOnHuiqi(){if(bushu0&&star==true){if(colorwhite)colorwhite=false;elseb=newSolidBrush(Color.White);g.FillEllipse(b,20*i+20,20*j+30,20,20);b.Dispose();g.Dispose();}elseif(wzq[i,j]==-1){Graphicsg=this.pictureBox1.CreateGraphics();Brushb;b=newSolidBrush(Color.Black);g.FillEllipse(b,20*i+20,20*j+30,20,20);b.Dispose();g.Dispose();}}}}悔棋功能的具体实现过程是先判断是否刚开局,有无可悔棋的棋子,如果有,就在窗口中重新画出棋盘,根据模式不同将最后落下的1个或2个棋子的信息初始化,再重新把悔棋后存在的棋子画在棋盘上。2.鼠标点击落子功能的实现:添加鼠标事件处理函数MouseDown(),先获取点击点位置坐标,再判断出点击点是否在棋盘内且无子,当点击点可落子时,就在棋盘上画出棋子,让wzq[19][19]记录该点棋子信息,10把该手棋的具体坐标交给qi[bushu],用于悔棋操作,后检查游戏是否形成五子连珠,完成本次落子任务。具体代码如下:privatevoidpictureBox1_MouseDown(objectsender,MouseEventArgse){intx,y;x=(e.X-20)/20;y=(e.Y-30)/20;if(star==true&&x=0&&x19&&y=0&&y19){if(wzq[x,y]==0){Graphicsg=this.pictu