您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > C语言图形五子棋课程设计报告
12020年4月19日C语言图形五子棋课程设计报告北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:尹乾课题组员:罗福莉赵帅帅何虹达院系:信息科学与技术时间:.3.15-.4.20文档仅供参考,不当之处,请联系改正。32020年4月19日摘要五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序能够在计算机上实现二人对弈五子棋功能。二人对弈五子棋程序由欢迎界面显示、游戏界面生成、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。程序经过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人五子棋对弈。文档仅供参考,不当之处,请联系改正。42020年4月19日目录摘要--------------------------------------------------3第1章:需求分析---------------------------------------51.1五子棋背景---------------------------------------51.2五子棋需求分析和流程设计------------------------5第2章:概要设计--------------------------------------102.1各类头文件和全局变量---------------------------102.2画面显示模块-----------------------------------11第3章:详细设计--------------------------------------143.1玩家操作模块-----------------------------------143.2音效提供模块------------------------------------153.3胜负判断模块-----------------------------------15第4章:调试分析--------------------------------------164.1图形模块---------------------------------------164.2玩家操作模块-----------------------------------174.3胜负判断模块-----------------------------------18第5章:用户手册--------------------------------------18文档仅供参考,不当之处,请联系改正。52020年4月19日第6章:小组分工--------------------------------------19第7章:结论与心得------------------------------------20第8章:源程序代码-----------------------------------20附录一Color命令的使用说明-------------------------53附录二ASCII码表----------------------------------53第1章:需求分析1.1五子棋背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为18×18,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。因为传统五子棋在落子后不能移动或拿掉,因此也能够用纸和笔来进行游戏。1.2五子棋需求分析和流程设计本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实文档仅供参考,不当之处,请联系改正。62020年4月19日现五子相连的一方获胜。程序执行过程中,要求棋盘、棋子时时可见,游戏界面有提示信息轮到何方下棋,人能够经过按键盘按键移动光标,再点击enter键摆放棋子,而且每落一子都有系统声音,创新之处是能够提供悔棋功能。1.2.1程序需求分析根据功能需求,将程序分为画面显示、玩家操作、音效提供、胜负判断五个模块,以下分析各模块的需求。画面显示模块:程序开始运行时,显示制作者和给出欢迎及退出界面;游戏开始后要求生成18×18的棋盘图像,并在棋盘上方显示欢迎信息“欢迎playour五子棋”,棋盘下方游戏显示应该轮到甲方或者乙方落子,棋盘左右显示双方操作方式,进行过程中,要求实时显示棋盘上已落下的棋子,甲方为白球,乙方为白圈;分出胜负后,要求给出游戏结束画面,而且询问用户是否需要继续游戏。玩家操作模块:程序开始时,需玩家确定选择“人人对战”文档仅供参考,不当之处,请联系改正。72020年4月19日后开始游戏;游戏过程中,两个玩家经过不同的按键移动光标,选择落子;游戏进行过程中,当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋盘右下方,为按键“b”。游戏结束时,有玩家选择是否开始新游戏。音效提供模块:玩家每落一子,系统提供音效一声,增加下棋的趣味性。胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,棋盘下方弹出该色玩家胜出信息。1.2.2程序流程设计根据程序需求分析结果,能够得出程序的总体结构图如图1,程序总体流程图如图2。五子棋五子棋游戏文档仅供参考,不当之处,请联系改正。82020年4月19日图1五子棋总体结构图模块一:画面显示模块二:玩家操作模块三:音效提供模块四:胜负判断文档仅供参考,不当之处,请联系改正。92020年4月19日甲方获胜?退出游戏开始制作者展示进入菜单界面人人对战?开始游戏甲方判断悔棋显示甲方获胜消息是否继续新游戏?bEnterESC确认退出?YNYN退出游戏文档仅供参考,不当之处,请联系改正。102020年4月19日图2程序总体流程图第2章:概要设计2.1各类头文件和全局变量#includestdio.h乙方判断乙方获胜?确认退出?NYESC悔棋b显示乙方获胜消息YNNYEnter文档仅供参考,不当之处,请联系改正。112020年4月19日#includewindows.h#includestdlib.h#includeconio.h//使用getch()函数intstartchoice;//intwinner;//intplayer;//Q[200][200]={0};//Q数组记录旗子charbutton;//读入键盘输入的指令,如→2.2画面显示模块画面显示模块由欢迎界面,游戏棋盘界面,确认是否退出对话框界面,以及感谢使用界面组成。画面显示模块函数如下:voidWelcome()//欢迎界面voidDraw()//绘画游戏棋盘界面voidClean()//清除—→运动的轨迹voidmenu_choose(charpress)//选择是否退出游文档仅供参考,不当之处,请联系改正。122020年4月19日戏对话框voidPutDown()//显示落子函数voidgoto_xy(intx,inty)//光标移动函数画面效果图如图3,4,5,6。图3欢迎界面图文档仅供参考,不当之处,请联系改正。132020年4月19日图4主菜单界面图图5游戏界面图文档仅供参考,不当之处,请联系改正。142020年4月19日图6确认退出对话框第3章:详细设计3.1玩家操作模块棋子的移动与落子有键盘上按键控制,本程序选取甲乙双方按键都为W、S、↑、↓、←、→和回车键,“b”,“ESC”,分别代表上移、下移、左移、右移光标和落子,悔棋,退出。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋文档仅供参考,不当之处,请联系改正。152020年4月19日盘右下方,为按键“b”。甲乙的落子后,程序会为落子处的数组元素赋一个特定值(玩家甲的棋子赋为1,玩家乙的棋子赋为2),用于判定胜负和悔棋。玩家操作模块主要由以下函数构成:voidRecord()//记录棋子的情况voidgo_back(intx1,inty1)//悔棋函数voidPlay(charch)//读取键盘的操作移动光标下棋和悔棋操作3.2音效提供模块为了提高游戏的趣味性,我们为本游戏提供了简单系统音效。程序语句很简单printf(\a);//'\a'表示蜂鸣声3.3胜负判断模块胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。文档仅供参考,不当之处,请联系改正。162020年4月19日以下简析本程序流程:,由获胜条件能够知,经过判断行、列、斜边、反斜边方向上是否有连续的5个子即可得出是否获胜结果。在游戏开始时,将棋盘初始化,即将棋盘抽象为一个18*18的数组,数组中每个元素数值设为0。甲方落子时,将数组内相应坐标处元素赋值为2;乙方落子时,将数组内相应坐标处元素赋值为1。经过循环扫描棋盘数组,经扫描后,如发现在行、列、斜边、反斜边方向上有五个连续的2,甲方获胜;如发现在行、列、斜边、反斜边方向上有五个连续的1,乙方获胜。胜负判断模块主要由一个函数构成:intJudge()//判断胜负函数第4章:调试分析4.1图形模块1.在图形模块中,因为是第一次使用,因此刚开始时对于棋盘创立的位置把握有些欠缺。解决方案:参考书本以及google,找出最合适的位置坐标。文档仅供参考,不当之处,请联系改正。172020年4月19日2.在构建棋子时候,发现C语言中似乎对颜色的处理有些错误,当棋谱线的颜色为白色时,无法构建黑色棋子,只能画出白色棋子。解决方案:用白圈区别于白球,类似白子和黑子。4.2玩家操作模块1.在玩家操作模块中,出现的最大问题之一就是棋盘已经有棋子的地方还能够覆盖另一个棋子。解决方案:经过在PutDown()函数中添加if条件语句,判定如果所在位置对应的数组值不等于0时,不能落子。2.另一个问题就是之前提到的,操作定位框的时候会将定位框移到棋盘之外造成溢出。解决方案:经过if语句判定,如果操作框超出范围则移动到对应相反位置,例如移动棋盘最上端,若继续向上移动,则移动至棋盘最下端对应位置。3.还有一个就是悔棋模块中,经过将现有棋子覆盖与棋盘底色相同的颜色来覆盖后,棋谱线条部分也会被覆盖。解决方案:在go_back();即悔棋函数。用棋谱线来覆盖棋子(例如:┌└├等)。文档仅供参考,不当之处,请联系改正。182020年4月19日4.3胜负判断模块1.在胜负判断中一直没能想到好的办法来数据化判断哪方玩家获得胜利。解决方案:经过参考书籍并加以优化,得出将棋谱做成数组,定义甲方落下为1,乙方落下为2,初始为0,这样即不会造成冲突,也很好的解决了判断问题。2.另一个问题在于一直不能优化代码做到不每次都扫描整个棋盘来判断胜负。解决方案:至今尚未解决,尝试过局部扫描,但失败了。第5章:用户手册1.进入演示程序后,即显示欢迎界面,几秒后,按任何键进入菜单界面,再选择人人对战能够进入主界面开始游戏或者选择退出键。2.棋子的移动与落子有键盘上按键控制,本程序选取甲乙方都为↑、↓、←、→和回车键,分别代表上移、下移、左移、右移光标和落子。在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。3.在当前玩家按下落子按键后,程序自动调用棋子显示子程文档仅供参考,不当之处,请联系改正。192020年4月19日序和判断胜负子程序。当前玩家下棋后,另一位玩家下棋前,当前玩家能够悔棋。悔棋提示在棋盘右下方,为按键“b”(即backspace)。4.游戏中Esc键能够直接退出游戏。5.游戏过程中,如果玩家1或者玩家2有一方获得胜利后,程序自动将提示哪一方获
本文标题:C语言图形五子棋课程设计报告
链接地址:https://www.777doc.com/doc-5949475 .html