五子棋课程设计_第1页
五子棋课程设计_第2页
五子棋课程设计_第3页
五子棋课程设计_第4页
五子棋课程设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘摘 要要 C 语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很 快,但 c 语言作为一种基础的语言,它的优势依然存在,甚至有时它是不可替代 的,特别是和硬件接口技术相联系的软件。五子棋游戏是一种简单的大众的游戏, 也是一款棋类益智游戏程序,自计算机实现以来,深受广大电脑玩家的喜爱。本 程序可以实现人人对战,操作采用键盘上的相关键控制棋子的上下左右移动,由 特定键控制下棋。游戏开始后,黑、白双方轮流下棋,程序会根据双方下棋的先 后顺序自动显示不同颜色的棋子,提示当前下棋的棋手,任何一方由五子连成一 线时,游戏结束,结束时会显示对战双方胜负情况。 关键词关键词:面向对象语言;c

2、语言;五子棋游戏 Abstract Is an object-oriented language, C language, though in the current rapid development of the visual language, spread quickly, but the C language as a foundation of language, its advantages still exists, even sometimes it is irreplaceable, especially associated with software and hardw

3、are interface technology. Gobang game is a simple game, is also a puzzle games like chess program, since the computer implementation, was deeply loved by vast computer player. Against, this procedure can realize everyone operate using the keyboard on the pieces of the up and down or so key control m

4、ovement, controlled by the specific key to play chess. At the start of the game, black and white both sides take turns to play chess, the program will automatically according to the order of play chess both sides show pieces of different colors and prompts the chess player, either by abital connect

5、a line, the game ends, the end will show case against the two sides. Key words: Object-oriented language; c language; Gobang game 目目 录录 1 概述.1 1.1 开发背景.1 1.2 课题意义.2 1.3 人工智能介绍.3 1.4 设计目的 .4 2 总体设计.5 2.1 需求分析 .5 2.1.1 游戏需求.5 2.1.2 功能模块.5 3 详细设计.7 3.1 各函数的说明.7 3.1.1 main()主函数.7 3.1.2 void drawqipan()画

6、棋盘.7 3.1.3 void judgewin()判断输赢.8 3.1.4 void luozi()下棋子.8 3.2 函数调用图.9 3.3 各函数功能图 .10 4 调试分析.14 4.1 调试目的.14 4.2 调试与测试结果.15 4.2.1 初始效果.15 4.2.2 游戏界面.16 4.2.3 可以中途退出.17 5 结论.18 参考文献.19 致 谢.20 附录.21 1 1 概述概述 1.11.1 开发背景开发背景 随着计算机技术和互联网的飞速发展,游戏软件是当今世界发展最迅速,最 有影响力,最有潜力与活力的领域之一电脑游戏的出现为人们提供了新的娱乐平 台,丰富了人们的业余生

7、活。因此与游戏有关的软件深受广大青少年的喜爱。随 着近几年来软件技术的不断进步、不断发展,软件游戏的操作要求越来越简单, 大多数游戏普通人学几分钟就能会玩,甚至连老年人也慢慢爱上了它。 第二次世界大战以后,电子计算机技术得到了突飞猛进的发展在众多国家中 美国的计算机技术发展最为迅速。1946 年 2 月,世界上第一台电子数字计算机 (ENIAC)在美国宾夕法尼亚大学建造完成。ENIAC 机的问世,表明了电子数字计算 机时代的到来,具有划时代的伟大意义,是科学技术发展史上的重大里程碑。我 国也不落后,在 1956 年研制成功国产计算机的。1958 年和 1959 年我国先后自主 研制成功国产小型

8、和大型电子管计算机。后来出现了集成电路和大规模集成电路,使 电子子计算机一代一代实现更新,性能越来越高,计算速度越来越快,硬件方面 的不断发展促使了软件技术也迅速发展。在美国,集中了许多计算机软件的设计 人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的 能力这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析” “判断”能力反过来与人较量由于不断修改更新,使计算机的“智力”水平与 人难分高低到了 90 年代,游戏软件已经为世界各国的人使用,所谓游戏软件通 常是指用各种程序和动画效果相结合起来的软件产品,我们称之为游戏软件。 目前,在网络上我们经常看到的大型

9、 3D 网络游戏和 WEBGAME 网页游戏等都是通 过用3DMAX、MAYA、FLASH、等动画软件和 JAVA、C+、VB、等程序语言相结合而 开发出来的,所以叫游戏软件。其中 BLACKISLAND 和 Blizzard.这两个强大的游 戏制作组对游戏软件的发展起到了巨大的带动作用,还有中国的洛河工作室在国 内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。 如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日 益丰富的生活需求得以满足。 而五子棋游戏的诞生更是吸引着不同年龄段的人群,无论男女老少都可以玩, 都喜欢玩,而当前微型计算机已经是在广大人群

10、中流行着,用电脑来下五子棋更 是一种时尚。现在网络上出现了各种各样的五子棋软件,有大师级的、新手级的 等等。所有这些都满足了不同人群的需要,所以当前五子棋越来越被许多人所熟 悉。目前的五子棋程序的发展也非常快,从最初的双人发展到人机(有 AI) ,然 后到现在的网络对战,已经受到越来越多人的喜爱和重视。 1.2 课题意义课题意义 人类社会经历了五千多年的农业文明时代,又经历了三百多年的工业文明时 代。经过漫长时间的发展,人类文明取得的不可想象的进步,人也变的越来越聪 明了。 人类之所以变得聪明,是因为我们人类一直不断地再实践中思考,在思考中 实践。五子棋不仅能增强思维能力,提高记忆力,而且富含

11、哲理,有助于修身养 性。五子棋既有现代休闲的明显特征“短、平、快” ,又有古典哲学的高深学问 “阴阳易理” ;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技 巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观; 既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的 结晶。 五子棋游戏不但容易上手,而且它区别于别的游戏,它不但能使人娱乐,而 且能使人的头脑变得更加聪明。而五子棋对战有两种模式:一.人机对战;二.双 人对战。这些给人无限乐趣的用途正是人工智能的杰作。正因为这样它鼓励着人 们对它不断研究,这在很大程度上促进了人工智能的发展,反过来人工智

12、能的理 论和技术上的突破能够使五子棋程序更完美、更受欢迎! 同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让 世界各地的人们知道五子棋,随时地玩上五子棋,这已经不再是梦想了。五子棋 游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带 动性的。随着互联网络的不断普及,越来越多的人可以在网络上就能够与他人下 五子棋了。 1.3 人工智能介绍人工智能介绍 人类的自然智能伴随着人类活动时时处处都存在。人类的许多活动,如解题、 下猜谜、讨论、编制计划和编程,甚至驾车、骑车等,都需要智能。如果机器能 够完成这些任务,那么就可以认为机器已经具有某种程度的“人工智能” 。

13、正因 为这样积累了很多与人工智能有关的知识。在一次历史性的聚会中人工智能诞生 了。为使计算机变得更“聪明” ,或者说是计算机具有智能,1965 年夏季,在美 国达特莫斯大学举行了一次为期两个月的夏季学术研讨会。10 位来自美国数学、 神经学、心理学、信息科学和计算机科学方面的杰出年轻科学家,在一起共同学 习和探讨了用机器模拟人类智能的有关问题,并且麦卡锡提议正式采用了“人工 智能 AI(Artificial Intelligence)”这一术语。从而,一个以研究如何用机器 来模拟人类智能的新兴学科-人工智能诞生了。人工智能(Artificial Intelligence) ,英文缩写为 AI。

14、它是研究、开发用于模拟、延伸和扩展人的智 能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学 的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方 式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然 语言处理和专家系统等。人工智能的发展给五子棋赋予了新的生命。随着对人工 智能的不断研究,计算机博弈也得到了飞速发展。机器博弈被认为是人工智能领 域最具挑战性的研究方向之一。国际象棋的计算机博弈已经有了很长的历史,并 且经历了一场波澜壮阔的搏杀,深蓝计算机的胜利也给人类留下了难以忘怀 的记忆。经过 30 多年的研究,人工智能在现实生活中得到了

15、不少瞩目的成果, 而这些成果已经建立了一些具有一定“智能”的 AI 系统,例如专家系统、定理 证明系统、集成电路设计与分析系统、自然语言翻译系统、智能信息检索系统、 疾病诊断系统等。除了这重要的成果之外,还有大受人们欢迎的“智能系统” , 比如现在在网络上出现的网络游戏、围棋、象棋、五子棋游戏程序等等,这些都 是人工智能的成果,它们极大地改变了人们的生活、给人类带来了快乐。 1.4 设计目的设计目的 虽然五子棋游戏的开发已经到了人工智能,但我们可以通过简单地编程设计 出五子棋游戏,通过游戏过程增加编程的兴趣,提高编程水平。编制该程序我对 以下的知识点进行的巩固和掌握:1.数组元素为结构体的数组

16、应用。2.全局变量 应用。3.按键的处理。4.数组元素与蛇、食物的对应关系。5.图形方式等等。加 深对所学知识的理解与掌握,增强自己对所学知识解决实际问题的能力,为以后 的程序开发打下基础。 2 2 总体设计总体设计 五子棋的游戏规则对我们大家来说都很很清楚的。只要某一方的棋子在一条 直线上,棋子数先达到五或以上,则该方为胜者。 本组的五子棋小游戏程序实现了两个人对战的简单步骤和一些简单规则,能 判断双方的输赢。当一方的棋子数先达到五或以上的,则能判断这方为胜者。而 且能判别,当棋盘上的某一个位置有棋子时,能判断这个位置不能再落子了。当 某一方胜利了时可以选择是否再继续玩游戏。在游戏还没有分出

17、胜负时,也可以 退出游戏。进入游戏一方可以用“W” , “S” , “A” , “D” , “Z”分别来控制上下左 右的方向和落子,则另一方则用“O” , “L” , “I” , “P”和空格来分别控制上下左 右的方向和落子。 2.1 需求分析需求分析 2.1.1 游戏需求游戏需求 (1)画出棋盘的大小; (2)画棋子并确定棋子的大小; (3)判断键盘输入哪个键执行操作; (4)玩家轮流下棋; (5)判断赢家。 2.1.2 功能模块功能模块 初始化模块 下棋操作模块 判断胜负模块 帮助模块 五子棋游戏 初始化模块 下棋操作模块 判断胜负模块 帮助模块 图 2.1 功能模块图 3 3 详细设计详

18、细设计 3.1 各函数的说明各函数的说明 main() 主函数 void drawqipan() 画棋盘 void move gb() 移动光标 void luozi() 下棋子 void judgewin() 判断输赢 void system() 系统函数 3.1.1 main()主函数主函数 按照语法规则,首先定义使用到的常数、全局变量、函数原型说明。棋 盘状态用数组 int pNN N=20,初值为 0,表示空格。函数的实体比较简单 ,调用图形驱动、画棋盘、人人对弈等自定义函数,一旦游戏结束后,关闭 图形驱动,程序结束。 3.1.2 void drawqipan()画棋盘画棋盘 背景颜色

19、设为 绿色,建立坐标 void gotoxy(int x, int y) /*建立坐标函数*/ COORD c; c.X=x; c.Y=y; SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); void drawqipan()/*建立棋盘*/ int i,j; for(i=0;iN;i+) for(j=0;jN;j+) pij=0;qij=o; printf(十); printf(n); 3.1.3 void judgewin()判断输赢判断输赢 本函数根据每次落子的位置,分别向上、下、左、右、左上、左下、右 上、右下八

20、个方向判断是否有相同颜色的棋子连成五子,如果成立,游戏就 结束,并显示提示信息 (如:黑方获胜 ),否则继续落子。 3.1.4 void luozi()下棋子下棋子 这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下: (1) 按 E 键程序可以随时结束。 (2) 按上下左右光标键,则改变棋子移动的坐标值。 (3) 按空格键 后判断 : 1) 如落子的位置已经有棋则无效,继续按键。 2) 如落子位置是空格,可以将棋子落入格内,void luozi(char press) 当 static t=0;/*代表坐标交叉点有无棋子的状态*/ 3) 如果棋子变化后,棋盘已下满了棋子,则游戏结束

21、。显示平局 信息。 4) 重复上述步骤,直到游戏结束。 3.2 函数调用图函数调用图 Judgewin( ) Movegb() 图 3.1 函数的调用图 3.3 各函数功能图各函数功能图 Drawqipan() main System()Luozi( ) void movegb( ) press 光标键 移动光标 是 输出 否 Move louzi( ) 图 3.2 移动光标的函数流程图 Press 落子键 是 棋手 1 落子键 落白棋 落黑棋 结束 否 否 是 图 3.3 下棋子的函数流程图 Void drawqipan( ) i=1,j=1 i20 j20 是 i 否 i+ j+ 输出 十

22、 结束 press 否 图 3.4 画棋盘的函数流程图 Void judgewin( ) 图 3.5 判断胜负的函数流程图 棋子数小于 五 棋子为 黑棋 传来棋子数 棋手 1 赢 是 是 棋手 2 赢 结束 否 是 i 否 4 4 调试分析调试分析 所谓程序调试,是指对程序的查错和排错。调试程序一般应经过以下几个步 骤。 1. 人工检查,即静态检查 在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工 检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多处错误。 而这一步骤往往容易被忽视。有的用户总希望把一切推给计算机系统去做,但这 样就会多占用机器时间。 2. 上机调

23、试,即动态检查 在人工(静态)检查无误后,才可以上机调试。通过上机发现的错误称之为动 态检查。在编译时,系统会给出语法错误的信息(包括哪一行有错以及错误类型), 用户可以根据提示的信息具体找出程序中出错之处并进行修改。应当注意的是: 有时提示的出错行并不是真正出错的行,如果在提示出错的行上找不到错误的话, 应当到上一行再找。另外,有时提示出错的类型并非绝对准确,由于出错的情况 繁多而且各种错误互有关联,因此要善于分析,找出真正的错误,而不要死抱住 提示的出错信息不放,钻牛角尖。 如果系统提示的出错信息多,应当从上到下逐一改正。有时显示出一大片 错误信息往往使人感到问题严重,无从下手。其实可能只

24、有一两个错误。例如, 对所用的变量未定义,编译时就会对所有含该变量的语句发出出错信息。这时只 要加上一个变量定义,那么所有错误就都消除了。 3. 运行程序,试验数据 在改正语法错误(包括“错误”error 和“警告”warning)后,程序经过链接 (link)就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结 果。应当对运行结果作分析,看它是否符合要求。有的初学者看到输出运行结果 就认为没问题了,不作认真分析,这是危险的。 4.1 调试目的调试目的 为了是五子棋程序的正常使用,所以进行必要的测试,保证用户使用的可靠 性,同时也可以完善五子棋程序自身的不足。 4.2 调试与测试

25、结果调试与测试结果 4.2.1 初始效果初始效果 图 4.1 初使界面图 4.2.2 游戏界面游戏界面 图 4.2 游戏过程图 4.2.3 可以中途退出可以中途退出 图 4.3 退出游戏图 5 5 结论结论 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻 炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学 技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为 二十一世纪的大学来说掌握计算机开发技术是十分重要的。 经过这次课程设计,我发现原来要想学好 C 语言,必须要掌握好书上的基本 知识,懂得各个语句的用法,我明白了学习 C 语言

26、的重要性。而且通过这次课设 我学到了许多在课本上学不到的东西,我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论 中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的 能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难 免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以 前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次 课程设计之后,一定把以前所学过的知识重新温故。 编辑游戏这在一前我都以为是要遥不可及,但现在通过这次五子棋的设计我 明白了,并不是如此,只要团队

27、合作也可以搞定,我多学了许多的以前课上没有 的知识,在这次上也有了解。通过课程设计,我们对C 语言这门课程有了更 深一步的了解。它是计算机程序设计的重要理论技术基础,在我们计算机专业的 学习中占据着十分重要的地位。同时也使我们知道,要学好这门课程,仅学习书 本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。 而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。 参考文献参考文献 1王连相.C/C+程序设计.武汉大学出版社,2011 2谭浩强.C 语言程序设计(第二版)学习指导.清华大学出版社,2000 3郭有强. C 语言程序设计.清华大学出版社,2009 4郭翠

28、英. C 语言课程设计案例精编.中国水利水电出版社,2004 5李丽娟. C 语言程序设计教程.人民邮电出版社,2006 6杨莉、龚文建. C 语言程序设计实训指导教程.华中科技大学出版社,2009 7张小东,郑红珍. C 语言程序设计与应用.人民邮电出版社, 2009 8李丹程,刘莹,那俊. C 语言程序设计案例实践.清华大学出版社,2009 9武雅丽,王永玲,解亚利. C 语言程序设计.清华大学出版社, 2007 10 梁海英、李淑梅、白文秀、侯锟. C 语言程序设计.清华大学出版社, 2013 致致 谢谢 在这次五子棋程序设计中,我得到了杨书鸿老师的认真指导和帮助,同时也 感谢我的同伴刘

29、建军同学,因为他才提高了我设计进度和效率。我和刘建军同学 共同完成这次课程设计,在程序设计过程中难免会遇到各种问题,谢谢杨老师的 耐心指导,谢谢同伴的包容,在这次课程设计中我感觉我有了很大的提高,我相 信自己以后会做得更好。 通过本次设计,我的知识领域得到了进一步扩展,专业技能进一步提高,同 时增强了分析和解决实际问题的综合能力。 附录附录 程序源代码程序源代码 #include #include #include #define play1up w #define play1down s #define play1left a #define play1right d #define pla

30、y2up o #define play2down l #define play2left i #define play2right p #define play1lq z #define play2lq #define N 20 #define playnext q #define exit e int m=1; int pNN;/*记录棋盘落子情况*/ char qNN;/*记录棋盘交叉点棋子种类*/ struct zuobiao int x;int y;weizhi; void gotoxy(int x, int y) /*建立坐标函数*/ COORD c; c.X=x; c.Y=y; S

31、etConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c); void drawqipan()/*建立棋盘*/ int i,j; for(i=0;iN;i+) for(j=0;j-1)weizhi.y-;if(weizhi.y0)weizhi.y=19;break;/*玩家 1 光标 向下移动*/ case play1down:if(weizhi.y19)weizhi.y=0;break;/*玩家 1 光标向上移动*/ case play1left:if(weizhi.x-1)weizhi.x-;if(weizhi.x0)weizh

32、i.x=19;break;/*玩家 1 光 标向左移动*/ case play1right:if(weizhi.x19)weizhi.x=0;break;/*玩家 1 光标向右移动*/ case play2up:if(weizhi.y-1)weizhi.y-;if(weizhi.y0)weizhi.y=19;break;/*玩家 2 光标 向上移动*/ case play2down:if(weizhi.y19)weizhi.y=0;break;/*玩家 2 光标向下移动*/ case play2left:if(weizhi.x-1)weizhi.x-;if(weizhi.x0)weizhi.x=19;break;/*玩家 2 光 标向左移动*/ case play2right:if(weizhi.x19)weizhi.x=0;break;/*玩家 2 光标向右移动*/ gotoxy(2*weizhi.x,weizhi.y); void luozi(char press) static t=0;/*代表坐标交叉点有无棋子的状态*/ if(press=play1lq) if(t=0gotoxy(2*weizhi.x,weizhi.y); qweizhi.xweizhi.y=press; pweizhi.xweizhi.y=1;t=1; if(pre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论