1、I德州学院信息管理学院课程设计报告实习名称自主学习能力设计题目五子棋小游戏实习时间2015040120140430专业班级14级计算机科学与技术指导老师教学单位小组分工情况学号姓名分工201481010020代码编写、程序调试及文档编写二一四年五月二十五日II目录1实习目的22需求分析23概要设计231游戏背景232游戏玩法333程序需求分析334开发平台335程序流程设计44棋盘与棋子的生成541引言542程序语句错误未定义书签。5棋子移动与落子651引言652程序语句66胜负判断1661引言错误未定义书签。62程序设计177调整改进1871引言1872程序功能及调整1873总程序语句198
2、总结28参考文献293五子棋小游戏的设计与实现1实习目的(1)熟练的运用计算机语言,培养了对计算机编程的热爱程度(2)学会怎样用C语言做一个完整的系统。(3)掌握C语言的编辑,链接,运行等环节。(4)掌握C语言中链表的建立,插入,删除,保存节点。(5)熟练掌握FORWHILEDOWHILE循环语句的使用。(6)熟练掌握函数的定义、说明、参数传递及嵌套和递归调用方法。(7)提高遇到困难解决困难的能力。(8)提高书写代码的速度与正确率。(9)独立实践,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力。2需求分析目前,随着计算机网络的的发展,
3、PK已经成为现在人生活的一部分,人们以不同的方式通过网络来娱乐,休闲。以计算机技术和网络技术为核心的现代网络技术已经在现实生活和生产中得到了广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为多数人群的休闲方式,也为多数人所喜好。当然,为了满足没有网络同样能娱乐的要求,许多小游戏做成了单机和网络的双功能。3概要设计31游戏背景五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有
4、东方的神秘和西方的直观;既4有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。32游戏玩法五子棋是一种两人对弈的纯策略型棋类游戏,五子棋棋子分为黑白两色,棋盘为1919,棋子放置于棋盘线交叉点上或网格中。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个同色棋子连成不间断的一排者为胜。33程序需求分析根据功能需求,将程序分为图形显示、玩家控制、胜负判断和系统帮助四个模块,以下分析各模块的需求。图形显示模块程序开始运行时,给出欢迎界面;游戏开始后要求生成1919的棋盘图像,并在棋盘上方提示当前落子方棋子颜色,游戏进行过程中,要求实时显示棋盘上已落下的棋子;分出胜负后,
5、要求给出游戏结束画面。玩家控制模块程序开始时,需玩家确定而后开始游戏;游戏过程中,两个玩家通过不同的按键移动光标,选择落子;游戏结束时,有玩家选择是否开始新棋局。胜负判断模块实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,弹出该色玩家胜出界面。系统帮助模块弹出窗口,窗口中显示帮助信息,包括棋子移动与落子按键介绍,获胜方式等。除以上主要模块之外,程序中还可以添加其他辅助程序,如中途退出等。程序的关键在于胜负判断模块,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。34开发平台系统WINDOWS7旗舰版(64位)处理器AMDA85545MAPUWITHRADEONTMHDG
6、RAPHICS170GHZ5内存400GB程序开发软件MICROSOFTVISUALC60文档编写MICROSOFTWORD201035程序流程设计根据程序需求分析结果,可以得出程序的总体结构图如图1图1程序总体流程图图程序总体流程图如图2五子棋游戏图形产生模块玩家操作模块胜负判断模块系统帮助模块6图2程序总体设计图4棋盘与棋子的生成41引言根据五子棋的基本规则,棋盘采用1919方格棋盘,棋子为黑白二色圆形棋子;游戏进行过程中棋盘始终显示,落子后棋子在落子处始终显示;棋盘在程序结束时消失,已落下的棋子在程序结束时或开始新游戏是消失。42程序语句棋盘的显示由游戏开始与结束部分控制,棋子的显示与保
7、留由玩家操控部分决定。BOARD/画棋盘/SETFILLSTYLE1,6BAR120,50,520,450SETFILLSTYLE1,14BAR540,50,620,150BAR20,50,100,150FORK0K5WINELSEP1MOVECASEA/向左移/IFAXY0IFGETX140MOVETO520,GETYMOVEREL20,0WHITEELSEIFAXY1IFGETX140MOVETO520,GETYBLACKMOVEREL20,0WHITEELSEIFGETX1409MOVETO520,GETYMOVEREL20,0WHITEP1MOVECASED/向右移/IFAXY0IFG
8、ETX500MOVETO120,GETYMOVEREL20,0WHITEELSEIFAXY1IFGETX500MOVETO120,GETYBLACKMOVEREL20,0WHITEELSEIFGETX500MOVETO120,GETYMOVEREL20,0WHITE10P1MOVECASEW/向上移/IFAXY0IFGETY70MOVETOGETX,450MOVEREL0,20WHITEELSEIFAXY1IFGETY70MOVETOGETX,450BLACKMOVEREL0,20WHITEELSEIFGETY70MOVETOGETX,450MOVEREL0,20WHITEP1MOVECASE
9、S/向下移/11IFAXY0IFGETY430MOVETOGETX,50MOVEREL0,20WHITEELSEIFAXY1IFGETY430MOVETOGETX,50BLACKMOVEREL0,20WHITEELSEIFGETY430MOVETOGETX,50MOVEREL0,20WHITEP1MOVEDEFAULTP1MOVE12VOIDP2MOVE/玩家2的移动/SWITCHBIOSKEY0/如果按键为ESC就退出游戏/INTSUM0CASEESCCLOSEGRAPHEXIT0CASEENTER/落子/IFAXY6P2DELP1TURNAXY1SUMBLACKP1MOVEIFSUM5WI
10、NELSEP2MOVECASELEFT/向左移/IFAXY1IFGETX140MOVETO520,GETY13MOVEREL20,0BLACKELSEIFAXY0IFGETX140MOVETO520,GETYIFGETX140MOVETO500,GETYWHITEMOVEREL20,0BLACKELSEIFGETX140MOVETO520,GETYMOVEREL20,0BLACKP2MOVECASERIGHT/向右移/IFAXY1IFGETX500MOVETO120,GETY14MOVEREL20,0BLACKELSEIFAXY0IFGETX500MOVETO120,GETYWHITEMOVE
11、REL20,0BLACKELSEIFGETX500MOVETO120,GETYMOVEREL20,0BLACKP2MOVECASEUP/向上移/IFAXY1IFGETY70MOVETOGETX,450MOVEREL0,20BLACK15ELSEIFAXY0IFGETY70MOVETOGETX,450WHITEMOVEREL0,20BLACKELSEIFGETY70MOVETOGETX,450MOVEREL0,20BLACKP2MOVECASEDOWN/向下移/IFAXY1IFGETY430MOVETOGETX,50MOVEREL0,20BLACKELSEIFAXY016IFGETY430MOV
12、ETOGETX,50WHITEMOVEREL0,20BLACKELSEIFGETY430MOVETOGETX,50MOVEREL0,20BLACKP2MOVEDEFAULTP2MOVE6胜负判断61引言胜负判断模块是程序的关键,该模块的设计直接关系到程序的运行速率和运行结果的正确与否。本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右上、右下八个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就结束,并显示提示信息,否则继续落子。17以下简析本程序流程如表1所示,令当前落子点坐标为X,Y,表中IX4,JY4,由获胜条件可以知,通过判断X,Y上、下、左、右、斜上、斜下八个方向上是
13、否有连续的5个子即可得出是否获胜结果。在游戏开始时,将棋盘初始化,即将棋盘抽象为一个1919的数组,数组中每个元素设为某一指定初始值(如8)。1P落子时,将数组内相应坐标处元素赋值为0;2P落子时,将数组内相应坐标处元素赋值为1。当X,Y上、下、左、右、斜上、斜下八个方向某5个连续的子所对应的数组中元素之和等于0时,1P获胜;当X,Y上、下、左、右、斜上、斜下八个方向某5个连续的子所对应的数组中元素之和等于5时,2P获胜。棋盘上的所有格子都被占满时,必有181个1P棋子和180个2P棋子,此时对应数组中所有项之和为180,并且游戏过程中对应数组中所有项之和只可能在这种状况下为180,所以可以用
14、这一条件判断是否和棋。I,JI1,JI,J1X,Y表1胜负判断表为减少程序的运算,还可以将某些特殊情况排除在外。当落子数不大于8时,既不用判断胜负,也不用判断和棋与否,这部分功能在第二章移动与落子程序中实现。此外,还可以通过对落子次数的统计判断是否满足和棋条件,从而减少大量运算,即当判断177次胜负后出现和棋。62程序设计VOIDWIN/判断输赢/18INTSUM1,SUM2,SUM3,SUM4,SUM1,N,I,JFORIX4,JY4,N0IINCLUDEINCLUDEINCLUDE20DEFINEN19INTWININTM,INTLVOIDPRINTSTATEP1WINP2WINHEQIV
15、OIDHELPINTI,J,K,SIZENINTISBLACK1CHARSTATENNINTAN2N2CHARX,Y,TEMP10CHARCINTZ/初始化及指令输入/VOIDSTARTGAMEINTM,N,WFORI0IS|YSPRINTF“T输入有误,请输入属于或正确的口令。N“CONTINUEIXAJYAIFSTATEIJ_PRINTF“T提示该位置已经有子,请重新指定坐标“CONTINUECISBLACK12ZISBLACK0123STATEIJCAI1J1ZMI1NJ1WWINM,NIFWPRINTSTATEISBLACKISBLACKELSERETURN/判断输赢/INTWININ
16、TM,INTLINTSUM1,SUM2,SUM3,SUM4,SUM1,N,I,J,X,Y,WW0XMYL24FORIX4,JY4,N0IX,JYI,J,N2SUM1AIYAI1YAI2YAI3YAI4YSUM2AIJAI1J1AI2J2AI3J3AI4J4SUM3AXJAXJ1AXJ2AXJ3AXJ4SUM4AIJ8NAI1J7NAI2J6NAI3J5NAI4J4NIFSUM15|SUM25|SUM35|SUM45P2WINW1IFSUM10|SUM20|SUM30|SUM40P1WINW1SUM10SUM20SUM30SUM40SUM25IFSUM177HEQIW1RETURNW/和棋界面/
17、HEQIPRINTF“和棋“RETURN/玩家1获胜界面/P1WIN26PRINTF“玩家1获胜“RETURN/玩家2获胜界面/P2WINPRINTF“玩家2获胜“RETURN/帮助/VOIDHELPSYSTEM“CLS“PRINTF“T本程序采用1919的游戏格式NN“PRINTF“T输入格子的坐标下子先横坐标后纵坐标。比如输入GGNN“PRINTF“T输入OUT退回主菜单、BACK悔棋、LOSE认输NN“27/主函数/INTMAINSYSTEM“COLORF1“WHILE1PRINTF“NTCPROGRAMMINGLANGUAGE课程作业五子棋NN“PRINTF“TT1开始游戏N“PRIN
18、TF“TT2帮助N“PRINTF“TT3退出N“PRINTF“NT请选择“LKSCANF“D“,SWITCHICASE1STARTGAMEBREAKCASE2HELPBREAKCASE3RETURN0DEFAULTPRINTF“T无此选项N“BREAK/显示、刷屏/VOIDPRINTSTATE28CHARPASYSTEM“CLS“PRINTF“T棋盘如下NN“PRINTF“T“FORI0ISIZEIPRINTF“C“,PIPRINTF“NT“FORI0ISIZEIPRINTF“C“,PIFORJ0JSIZEJPRINTF“C“,STATEIJPRINTF“CNT“,PIPRINTF“FORI0
19、ISIZEIPRINTF“C“,PIPRINTF“N“298总结C语言课程设计时一次对我们C语言学习的综合检验,它要求我们将所学的C语言代码进行综合运用,设计出一个简单的系统,这不仅是对我们基础知识的检验,还考验我们的动手动脑以及团队协作能力,在这一年学习中要将这些基础知识掌握已经不容易了,在这么短的时间又要做出一个系统更是一次重大的挑战,然而只有迎难而上才能收获成功,做出一个完整的系统。回顾这次课程设计,至今我感慨颇多。很多的知识只是停留在基本的应用上,当需要结合使用时,往往出现无从入手的情况。在C语言课程设计的过程中,让我深深体会到了这点。一些细节的地方没有看清楚,或者思考妥当,就无法让系
20、统运行,而当一系列调试后,程序能够运行。通过对各子程序的设计与优化,本程序完成了五子棋软件的主体的设计与制作,基本达到了使用五子棋软件的核心要求。然而程序还有一些不足之处,首先,程序在判断胜负后无法显示第五枚棋子,输入五子连环的第五个棋子坐标之后直接跳出了重新开始的界面,这是由程序的显示原理造成的;其次,程序的界面过于简陋,而且坐标输入操作也不利于玩家使用。对于这次课程设计我很不满意,没有达到自己想要的效果,系统中还存在着许多的漏洞,在本次课程设计过程中我也发现了自己的很多缺点,比如做事不认真,粗心大意,考虑问题不够全面等。最后,谢谢老师的教导。参考文献1五子棋EBHTTP/BAIKEBAID
21、UCOM/VIEW/2697HTM2C语言制作五子棋EBHTTP/WWWVCWORLDNET/NEWS/200905/022217HTML3C语言五棋源代码设计报告EBHTTP/WENKUBAIDUCOM/VIEW/E253A2C66137EE06EFF91859HTML304C语言五子棋算法EBHTTP/WWW4OACOM/ARTICLE/HTML/6/31/445/2005/15413HTM31注实习成绩由指导教师或答辩小组评定出成绩,分优秀、良好、中等、及格、不及格五级,分别给小组的每个成员打分。指导教师评语指导教师(签名)成绩学号姓名成绩201481010020指导教师或答辩小组成员(签名)备注32