您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > C#课设报告书—游戏五子棋
课程设计说明书NO.1·五子棋1设计目的五子棋游戏不仅能增强人们的抽象思维能力、逻辑推理能力、空间想象力,提高人们的记忆力、心算能力等,而且深含哲理,有助于修身养性。五子棋既有现代休闲方式所特有的特征“短、平、快”,又有中国古典哲学所包含的高深学问“阴阳易理”。它既有简单易学的特点,为人民群众所喜闻乐见,又有深奥的技巧;既能组织举办群众性的比赛、活动,又能组织举办高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观,它是中西方文化的交融点,也是中西方文化交流的一个平台。自从计算机作为游戏对战平台以来,各种棋类游戏如雨后春笋般纷纷冒出。五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。同时具有简单易学、既动手又动脑的特点。同时也为锻炼自己的编程能力。2功能描述本次设计的是基于MicrosoftVisualStudio2008平台所设计的五子棋游戏。用户分为持黑子方和持白子方,通过鼠标单击游戏见面中线的交叉位置下棋。由持白子一方先下,持黑子方后下。在下棋的过程中每方有30秒的考虑时间,如果超出考虑时间则由另一方开始下棋。在下棋的过程中用户可以根据自己的意愿悔棋,每悔一次棋步数减一。(1)画棋盘和棋子,并添加具有倒计时功能的时钟,当一方的等待时间超过三十秒的时候,切换到另一方下棋。(2)添加悔棋一步按钮,当一方想要悔棋时可以单击此按钮,则之前下的那步棋被撤销。(3)当有一方横向,纵向或斜向有连续的五子连成一线时,那一方获胜。(4)当有一方点击重新开局这一子菜单项时,则将重新开始一盘棋。(5)一方下一步棋则步数增一,一方悔棋一步则步数减一。(6)在游戏中,会显示当前的系统时间,也可以根据用户需求隐藏起来。课程设计说明书NO.23方案论证3.1总体设计3.1.1功能框图图1总体功能框图3.2详细设计3.2.1程序界面设计(1)菜单设计本五子棋游戏中共“游戏”和“帮助”两个菜单项,在“游戏”菜单项中有重新开局和退出两个子菜单,在“帮助”菜单项中有关于五子棋、技术支持、隐藏\显示时间和屏保四个子菜单。(2)主窗体设计控件及相应属性如表1所示。表1编辑控件属性控件名属性属性值Label1BackColorControlDarkLocation12,35五子棋倒计时功能判断输赢功能重新开局功能步数计算功能隐藏\显示时间功能悔棋功能课程设计说明书NO.3Size401,401TabIndex1VisibleTrueLabel1BackColorControlLocation419,52Size167,30Text当前玩家:白方TabIndex4VisibleTrueLabel1BackColorControlLocation419,315Size145,30控件名属性属性值Label3Text剩余用时:TabIndex5VisibleTrueLabel4BackColorControlLocation420,365Size166,30TabIndex7Text每轮不得超时30s!!!VisibleTrueButton1BackColorGrayLocation522,398Size99,38TabIndex7Text每轮不得超时30s!!!Button2Text退出游戏Location417,398课程设计说明书NO.4panel1BackgroundImageSystem.Drawing.BitmapTimer1enabledTrueInterval1000ModifiersPrivate3.2.4程序功能设计(1)在gobang类中添加下列数据成员及成员函数。privatebool[,]chessBoard=newbool[20,20];//判断棋盘指定坐标是否被绘制privateint[,]chessColor=newint[20,20];//用数组记录棋子的颜色,1-白色,2-黑色privateboolIsWhite=true;//判断是否是白棋privateStackPointlast=newStackPoint();//下棋历史记录(2)画棋盘代码如下:publicvoidChecker(Graphicsg){PenmyPen=newPen(Color.Black);for(inti=10;i=400;i=i+20){g.DrawLine(myPen,0,i,400,i);}for(inti=10;i=400;i=i+20){g.DrawLine(myPen,i,0,i,400);}(3)画棋子代码如下:publicvoidDrawChess(Graphicsg,Colorcolor,intx,inty){SolidBrushb=newSolidBrush(color);if(chessBoard[(x-x%20)/20,(y-y%20)/20]==false){if(x%20==0&&y%20==0){g.FillEllipse(b,x+2,y+2,16,16);}else{x=x-x%20;y=y-y%20;g.FillEllipse(b,x+2,y+2,16,16);课程设计说明书NO.5}if(IsWhite)chessColor[(x-x%20)/20,(y-y%20)/20]=1;elsechessColor[(x-x%20)/20,(y-y%20)/20]=2;chessBoard[(x-x%20)/20,(y-y%20)/20]=true;last.Push(newPoint((x-x%20)/20,(y-y%20)/20));IsWhite=!IsWhite;}}(4)悔棋一步代码如下:publicvoidBack(Graphicsg){if(last.Count0){Pointp=last.Pop();chessBoard[p.X,p.Y]=false;chessColor[p.X,p.Y]=0;IsWhite=!IsWhite;SolidBrushsb=newSolidBrush(Color.Gray);g.FillEllipse(sb,p.X*20,p.Y*20,20,20);}}(5)检查游戏结果代码如下:publicboolCheckGameResult(intx,inty){//检查横向x=(x-x%20)/20;y=(y-y%20)/20;intsum1=1;intsum2=1;intsum3=1;intsum4=1;intsearch=chessColor[x,y];for(inti=x+1;ichessColor.GetLength(0);i++){if(chessColor[i,y]==search)sum1++;课程设计说明书NO.6elsebreak;}for(inti=x-1;i=0;i--){if(chessColor[i,y]==search)sum1++;elsebreak;}//检查纵向for(inti=y+1;ichessColor.GetLength(1);i++){if(chessColor[x,i]==search)sum2++;elsebreak;}for(inti=y-1;i=0;i--){if(chessColor[x,i]==search)sum2++;elsebreak;}//检查主对角线for(inti=x-1,j=y-1;i=0&&j=0;i--,j--){if(chessColor[i,j]==search)sum3++;elsebreak;}for(inti=x+1,j=y+1;ichessColor.GetLength(0)&&jchessColor.GetLength(1);i++,j++){if(chessColor[i,j]==search)课程设计说明书NO.7sum3++;elsebreak;}//检查副对角线for(inti=x+1,j=y-1;ichessColor.GetLength(0)&&j=0;i++,j--){if(chessColor[i,j]==search)sum4++;elsebreak;}for(inti=x-1,j=y+1;i=0&&jchessColor.GetLength(1);i--,j++){if(chessColor[i,j]==search)sum4++;elsebreak;}//判定结果if(sum1=5||sum2=5||sum3=5||sum4=5){returntrue;}else{returnfalse;}}(6)输出游戏结果代码如下:publicvoidOutputResult(intx,inty){x=(x-x%20)/20;y=(y-y%20)/20;if(chessColor[x,y]==1){MessageBox.Show(白棋获胜,比赛结果);课程设计说明书NO.8}else{MessageBox.Show(黑棋获胜,比赛结果);}}(7)判断是否是白棋代码如下:publicboolPlayWhite(){if(IsWhite)returntrue;elsereturnfalse;}(8)更换玩家代码如下:publicvoidChangePlayer(){IsWhite=!IsWhite;}(9)判断当前一格是否已被绘制代码如下:publicboolisDraw(intx,inty){returnchessBoard[(x-x%20)/20,(y-y%20)/20];}4运行结果与分析(1)游戏界面运行如图2、图3。课程设计说明书NO.9图2五子棋运行界面图3五子棋运行界面(2)游戏结束如图4所示课程设计说明书NO.10图4游戏结束界面(3)屏保显示如图5所示图5屏保界面5心得体会课程设计说明书NO.11在这次的C#课程设计中,我负责的是画棋子模块。当单击棋盘的时候,在棋盘上画出一个圆形带颜色的棋子,画棋子之前首先判断棋盘上的这个位置有没有被画,如果没有被画便可以画上,还要考虑,每次画的都是什么颜色的棋子,这次试验感受颇多,从中无也学到了很多书上没有的知识。也知道实践只重要性,也加深对C#的更一步了解。在这次实训中,我对C#有了一个更深的了解认识,也对这个学期学的知识得到巩固,还尝试运行编程,虽然每次运行程序不一定会成功。通过自己上网查资料编写程序,经过多次的上机调试和上网查资料和修改,最终把最初的理论知识转化基本技能。通过这次实习,让我们初步有了编写系统的能力,我们对很多的函数有了新的认识,也学会了运用多种函数,也明白了编写软件的基本过程,和基本方法。编写软件的过程中我们又学到了曾经自己不知道的函数或是自己不会的函数的用法。这次课程设计课总的来说让我受益匪浅。这次的实训,使我对C#的学习产生浓厚的兴趣。在这几天的编写过程中我们对c#有了更进一步的认识和了解。此次编程过程的经验和知识肯定能促进我以后的学习。此次课程设计不仅给了我们很多很好的经验,也让我们体会到了失败时的焦急和难受,也体会到了成功时的兴奋与喜悦。参考文献课程设计说明书NO.12[1]罗斌,越飞,等.VisualC#2005编程实例精粹[M].北京:中国水利水电出版社,2006.10:10-135[2]陈哲,戴博,等.VisualC#2005程序设计[M].北京:清华大学出版社,2007.7:38-235[3]耿肇英,等.C#程序设计简明教程[M].北京:人民邮电出版社,2007.12:44-156[4]刘甫迎、刘光会、王蓉.C#程序设计教程[M].北京:电子工业出版社,2008.9:32-105[5]陈佛敏,潘春华,等.C#程序设计简明教程[M].北京:人民邮电出版社,2008.11:10-103[6]李旗.C#.NET程序设计[M]北京:机械工业出版社,2008.7:67-234[7]古万荣.VisualC#轻松入门[M].北京:人民邮电出版社,2009.5:22-212[8]熊壮,宋文强.C#程序设计[M].北京
本文标题:C#课设报告书—游戏五子棋
链接地址:https://www.777doc.com/doc-3949980 .html