C语言游戏设计.doc_第1页
C语言游戏设计.doc_第2页
C语言游戏设计.doc_第3页
C语言游戏设计.doc_第4页
C语言游戏设计.doc_第5页
免费预览已结束,剩余26页可下载查看

下载本文档

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

文档简介

C语言游戏设计 摘要 本课题的目的主要是C语言的综合编程能力的掌握,培养自身的分析问题和解决问题的能力及逻辑思维能力。该课题主要包括使用C语言制作 “贪吃蛇” “黑白棋”,主要考察对函数、结构体,指针,文件等的操作,以及C语言基本规则和算法的掌握,所以完成本课题能够培养较强的设计能力,特别是对C语言的综合应用能力。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。 关键词:C语言 小游戏 贪吃蛇 黑白棋 WIN-TC Abstract The main purpose of this task is a comprehensive C programming language ability to master and cultivate their own analysis of problems and problem-solving skills and logical thinking ability. The topics include using the C language production Snake Othello, mainly on the function, structure, pointers, files operation, and C language to master the basic rules and algorithms, so the completion of this subject to bring up more strong design capabilities, especially in C language, comprehensive ability. How to adjust the process is important, through this process before the debugger can learn to not experience the short program Key Words:C game Snake Othello WIN-TC 目 录 摘要I Abstract.II 引 言1 1.课题相关知识21.1.课题背景21.1.1. C语言的历史21.1.2. C语言的特点31.1.3 C语言编程游戏的发展前景51.2 研究意义和重要性5 2.方案论证或可行性62.1 方案论证62.2系统工具WIN-TC72.3 可行性11 3.贪吃蛇游戏设计123.1 程序功能123.2程序设计123.2.1游戏界面123.2.2设计思路13 4. 黑白棋游戏设计184.1 程序功能184.2 程序设计目的184.3程序设计184.3.1游戏规则184.3.2游戏界面184.3.3程序设计思路19 结 论25 参考文献26 致 谢27引 言 C语言是Combined Language(组合语言)的中英混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别。 目前游戏的种类可谓是多种多样,从扫雷到魔兽世界数不胜数,因此,游戏开发平台也是非常之多。目前小型游戏使用C语言、Flash,Java等即可实现。而就大型游戏而言,一般使用几种语言混合开发,比如C+接合脚本预言。主流语言是C/C+,脚本常用的有Lua和python。有的游戏的脚本语言是开发者自己写的。不那么常用的语言有delphi、java(手机上常用的)、C#。 至于戏开发工具个人认为并不重要,VC主要是看重C+的运行效率而已。在今后几年内,网络游戏开发仍将以C+语言为主,不过服务器可能就会是运行LINUXUNIX的平台。 1.课题相关知识1.1.课题背景 游戏的设计与开发可以利用多种方法,比如2D游戏可以用Flash,Rpg maker xp 以及VB或C+等语言编写,手机游戏可以用JAVA程序编写,3D游戏就用3D 来进行渲染而实现3D效果。在众多设计开发方法中,C/C+作为主流语言,有其鲜明特点。 本课题的目的主要是C/C+语言的综合编程能力的掌握,培养自身的分析问题和解决问题的能力及逻辑思维能力。该课题主要包括使用C语言制作 “贪吃蛇”“撞球”,主要考察对函数、结构体,指针,文件等的操作,以及C/C+语言基本规则和算法的掌握,所以完成本课题能够培养较强的设计能力,特别是对C语言的综合应用能力。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。1.1.1. C语言的历史 C语言的原型ALGOL 60语言(也称为A语言)。 1963年,剑桥大学将ALGOL 60语言发展成为CPLCombined Programming Language语言。 1967年,剑桥大学的Martin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1972年,B语言也给人“煮”了一下,美国贝尔实验室的/.chie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。 1978年由美国电话电报公司AT&T贝尔实验室正式发表了C语言。同时由/.nighan和/.chie合著了著名的The C Programming Language一书。通常简称为K&R,也有人称之为K&R标准。但是,在K&R中并没有定义一个完整的标准C语言,后来由美国国家标准化协会(American National Standards Institute)在此基础上制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。 K&R第一版在很多语言细节上也不够精确,对于pcc这个“参照编译器”来说,它日益显得不切实际;K&R甚至没有很好表达它索要描述的语言,把后续扩展仍到了一边。最后,C在早期项目中的使用受商业和政府合同支配,它意味着一个认可的正式标准是重要的。因此(在M. D. McIlroy的催促下),ANSI于1983年夏天,在CBEMA的领导下建立了X3J11委员会,目的是产生一个C标准。X3J11在1989年末提出了一个他们的报告ANSI 89,后来这个标准被ISO接受为ISO/IEC 9899-1990。 1990年,国际标准化组织ISO(International Organization for Standards)接受了89 ANSI C 为I SO C 的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。 目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则有略有差别。1.1.2. C语言的特点优点: 1. 简洁紧凑、灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2. 运算符丰富 C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 3. 数据结构丰富 C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 4. C是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 5. C语法限制不太严格,程序设计自由度大 虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。 6. C语言允许直接访问物理地址,可以直接对硬件进行操作 由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。 7. 生成目标代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低1020%。 8. C语言适用范围大,可移植性好 C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。缺点: 1. C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C+的一大区别。 2. C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。 C语言指针 指针是C语言的一大特色,可以说是C语言优于其它高级语言的一个重要原因。就是因为它有指针,可以直接进行靠近硬件的操作,但是C的指针操作也给它带来了很多不安全的因素。C+在这方面做了很好的改进,在保留了指针操作的同时又增强了安全性。Java取消了指针操作,提高了安全性,适合初学者使用。结构特点: 1.一个C语言源程序可以由一个或多个源文件组成。 2.每个源文件可由一个或多个函数组成。 3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。 4.源程序中可以有预处理命令include 命令仅为其中的一种,预处理命令通常应放在源文件或源程序的最前面。 5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“”之后不能加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。1.1.3 C语言编程游戏的发展前景 我们国家正处于全球文化产业日新月异大格局中,电子游戏、网络游戏的发展速度之快,更是令人眼花缭乱,目不暇接。未来的电子和游戏发展趋势必将是更智慧化、更艺术性、更人性化。在高性能的硬设备的支持下,游戏的驱动引擎更具威力,控制功能更加完备,在一个错综复杂的极度扩张的游戏大世界中,带着超乎常人智能的人工智能的应对力,使得所有要素包括艺术的风格、情感的互动、故事的铺展、视觉的表现、用户的接口,融合为有机的一体,给人们带来更丰富的娱乐和体验。好的游戏给人们的生活带来了健康愉快的补充,唯美的艺术享受,潜默的教育功效。这些就是C语言编程可以做到的,C语言编程游戏更具交互性,与玩家的交流更加直接。除此之外,正如上文所提,C语言游戏具有很多其他类型游戏所不具备的优点,这使C语言游戏成为今后游戏发展的主流趋势。正是看准了这一点,我选择了C语言作为我游戏的开发平台。1.2 研究意义和重要性 游戏软件是一种与文化背景密切联系的产品,具有很强的民族性和丰富的文化内涵。伴随着游戏软件在市场上的销售,与其相关的文化也随之传播。因此发展我国自主的益智、健康的游戏软件已是当务之急。游戏是一种基于计算机的应用软件,是新型的休闲娱乐方式。当前开发的游戏软件应该做到知识性、娱乐性、趣味性、教育性相统一。青少年时期是一个丰富多彩的时期,同时也是一个需要调控的时期。研究表明,儿童有多种媒介需求,并且对各种媒介的需要有所不同,仅仅就计算机游戏而言,它可以满足青少年的朋友代替、交往需求,逃避现实、逃避部分社会学习的需要。计算机游戏作为一种新兴的媒介文化,包含了人类科技文明的先进成果,对这样一种媒介文化,应该合理地、充分地发挥它对青少年的有利影响。从需要的角度来看,计算机游戏对青少年有两种功用:一是作为娱乐工具,另一种是作为某种伙伴。就前者而言,计算机游戏有着其它游戏或者娱乐形式所没有的乐趣;就后者而言,这种伙伴关系在一定程度上满足了青少年在现实中暂时无法实现的愿望。当然,需要调控的是让他们在前一方面防止形成单一化,在后一方面避免形成依赖。而为了实现这两点,就要从电视、广播、单放机cd机、书籍、杂志、电影、计算机游戏等多方面下功夫,建设一个适应青少年成长的娱乐库,来满足他们的娱乐要求。卜卫、张炳富等人的研究也证明计算机游戏并不是大多数学生的首选娱乐形式,这也说明了青少年游戏活动是可以调控的。计算机游戏在中国的发展已有十余年,十余年来游戏行业保持着高速发展,不断完善的势头.与此同时,不可避免的一些争议也随之产生:游戏中的血腥与暴力的成份一直是家长们质疑的对象,大多数家长担心孩子们对这类游戏非理性的沉迷会危害到他们的身心健康.这确实成为一个娱乐界、教育界客观存在并亟需解决的问题.针对这个问题,笔者提出了这样的构想:游戏开发商应注重对计算机游戏中教育意义的开发.。比如制作一些益智类的,适合儿童及青少年玩的游戏,比如现在市面上的推箱子,汉诺塔等,这样对儿童和青少年的早期智力发育会有重要的作用。游戏是一把双刃剑,现在不少青少年因为沉溺于网络游戏而放弃了学业,无论谁说都不知悔改,也有的因为为了等到游戏中所谓的高等级和好装备,而在现实社会中实施抢劫偷盗等违法犯罪行为,这些都是自从有了游戏这个东西以后,对人类尤其是儿童和青少年造成的恶劣影响,所以很多家长还有学校的老师坚决抵制自己的孩子或者学生接触游戏,这样做就是把游戏一棍子打死了。在这种负面影响下,我们应该看到游戏积极的一方面:首先,游戏是可以让人放松并且开阔思路的。有时候大脑长时间高速运转会让人疲惫不堪,这时候一款轻松有趣的游戏会让你得到休息,并在休息之后提高工作和学习的效率。有些时候,一些游戏还会给你的工作和学习带来一些灵感,让你事半功倍。并且有研究表明,适度的游戏对人的智力和心理只有好处没有坏处。 所以,一款好的小游戏对人是很重要的,不仅娱乐了人们,还可以给人们带来很多的好处。这就是游戏对于人的重要性。2.方案论证或可行性2.1 方案论证 我制作的游戏是“贪吃蛇”和“撞球”车两个小游戏集合成的游戏锦集。 贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时记10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。这个程序的关键点是表示蛇的图形以及蛇的移动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块。为了便于理解,定义了两个结构体:食物和蛇。 黑白棋游戏是一个深受人们喜爱的游戏,通常是人机对奕,本程序设计为人与人对奕,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。这个程序是对编程基本功的一个训练,将分支、循环、数组、函数综合应用,而不仅限于编制独立的小程序,能够大大提高编程水平。 下面我来着重介绍一下我制作这两款游戏所用的WIN TC 平台系统工具WIN-TC 本软件用于编写C语言程序。WIN-TC是一个TC2 WINDOWS平台开发工具。该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具使我在编程过程中更加游刃有余,如虎添翼,使用过程如图所示: 1.安装TC后,在开始菜单的程序组里面将生成WIN-TC的程序组,点击WIN-TC的图标。你将看到以下的软件运行画面,如图2-1WIN-TC软件运行画面所示: 图2-1WIN-TC软件运行画面 2.系统是WIN2000或WIN XP的话,将会先看到一个操作系统警告的对话框提示你以后的程序需要按照提示那样在结尾加上getch来暂停观看一下屏幕输出结果。WIN-TC默认打开的文件是WIN-TC安装目录下的noname.exe,就是你现在看到的内容。 3.接下来就要编译noname.c了,只有通过编译,代码才能变成能够高效运行的软件。对于TC来说,就是C文件同名的EXE文件。首先找到两个按钮,如图2-2编译链接按钮和编译链接并运行按钮: 图2-2编译链接按钮和编译链接并运行按钮 上面左边一个是编译链接按钮,右边一个是编译链接并运行按钮。他们都可以编译代码,所不同的是,编译链接并运行按钮还可以在编译后立即运行你的程序来检验是否是你所期望的结果。 4.按编译链接并运行按钮,看到图片所示结果,如图2-3编译成功: 图2-3编译成功 5. 编译成功的结果是令人兴奋的,因为编译成功的结果意味着你编写的代码没有错误并生成了EXE文件。反之,将出现编译失败的信息,提示你修改你的源代码。点击“确定”的按钮后,根据提示进行修改,并调试,直至成功。编译成功,将立即运行编译后的软件来检验运行结果。将看到如图2-4运行结果所示画面: 图2-4运行结果 6.能够成功运行,也就意味着相应的EXE文件已经成功生成了。可以在WIN-TC安装目录的project文件夹里,找到生成的EXE文件。因为编译的noname.c文件在此目录,编译后的obj和exe文件都是在同级目录生成的,因此对应的EXE文件也在此目录了。如图2-5生成EXE文件目录: 图2-5生成EXE文件目录 2.3 可行性 在制作游戏之前,由于我没有接触过游戏制作这方面的知识,所以在最开始时处于一个寻找方法的阶段,通过学习,我知道制作游戏有很多种方法,比如VB,JAVA,Action Script等等,面对这么多的选择,我逐一进行了研究和探索。首先,我曾经学过FLASH,但是只是停留在做一些简单动画的阶段,所以没有采用FLASH。其次,JAVA语言经过我的一番研究发现多为开发手机游戏,而不是计算机游戏,这与我的毕设要求有很大的出入,故放弃。 在大一时我们学习过C语言课程,虽然已经过去了三年的时间,但仍印象深刻,另外我通过网络、书籍等方式,对C语言有一番简略的了解后,更加明白了只要在编程基础上狠下功夫,并且配合冷静的思维逻辑,我所想设计的两款小游戏都是可以用C语言来顺利实现的。并且这种语言可以利用WIN-TC这个软件平台在Windows环境下来编译,在确定制作这两款游戏,安装好WIN-TC准备就绪后,我便开始游戏编译。编译过程如图2-6游戏编译过程所示 图2-6游戏编译过程 3.贪吃蛇游戏设计3.1 程序功能 贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时记10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。3.2程序设计3.2.1游戏界面 程序运行时的游戏界面如图3-1运行中的游戏界面所示,边框表示围墙,红色矩形块代表蛇,绿色小方块代表食物。 图3-1 运行中的游戏界面3.2.2设计思路 这个程序的关键点是表示蛇的图形以及蛇的移动。用一个小矩形块表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时,由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来蛇会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块。为了便于理解,定义了两个结构体:食物和蛇。1.数据结构表示食物和蛇的矩形块都设计为10X10个像素单位,食物的基本数据域为它所出现的位置,用x和y坐标表示,则矩形块用函数rectanglex,y,x+10,y+l0或rectanglex,x+l0,y?10可以画出。由于每次只出现一个食物,而食物被吃掉后,才出现下一个食物,所以设定yes表示是否要出现食物的变量。蛇的一节身体为一个矩形块,这样表示每个矩形块只需起点坐标x和yo身体是不断增长的,所以用数组存放每一节的坐标,最大设定为N200,node表示当前节数。另外还需要保存蛇移动方向的变量direction和表示生命的变量life,一但life为1,则蛇死,游戏结束。所以程序功能的实现就是数组的操作。见图3-2贪吃蛇流程图图3-2贪吃蛇流程图2.main主函数 主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK画出开始画面,调用函数GamePlay,即玩游戏的具体过程,游戏结束后调用Close关闭图形系统,结束程序。3.画界面函数DrawK 主界面就是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10个单位的矩形小方块,围成密闭图形,表示围墙,为了醒目,设置为淡青颜色,用函数setlinestyleSOLID LINE,O,THICK WIDTH设置线型宽度为3个像素。设置3个像素的围墙线,蛇在贴墙走的时候,会擦掉部分围墙线,使线变细,图形变得不好看,如果不想这种情况出现,则将线型宽度设置为1个像素。 见图3-3DrawK流程图 图3-3DrawK流程图4.游戏具体过程函数GamePlay 这个函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。采用的方法是每次移动的时候从最后一节开始到倒数第二节因蛇头为两节,将前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可,因为新位置0到n?1节还是要出现在画面上的。然后蛇头按照方向键来更改位置。另外,食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的,这样的话就可以让蛇吃到,蛇吃到食物的判断是蛇头的坐标和食物的坐标相等。其算法过程为: 1设置初始值。为防止食物出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始的方向。 2循环执行,直到按Esc键退出。 1没有按键的情况下,循环执行。如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根据蛇的方向改变坐标值,并判断蛇是否撞到了墙或自己吃了自己,如果出现这两种情况之一,则蛇死,调用游戏结束函数GameOver,结束本次游戏,重新开始。如果蛇吃到了食物,蛇身体长一节,数组元素增加一个,身体节数、分数都进行相应的改变。在新位置画出蛇 2如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结束;如果所按键为方向键,则根据该键改变代表蛇方向的变量direction的值,要考虑相反方向键无效。 见图3-4GamePlay流程图 图3-4GamePlay流程图 5.游戏结束函数GameOver 游戏结束,清除屏幕,输出分数,显示游戏结束信息。6.PrScore输出分数 在指定位置利用sprintf将整数转换为字符串,用outtextxy输出,bar函数的应用是为了覆盖原来的值。7.Close图形结束 在显示游戏结束信息的画面时,按任意键关闭图形系统,程序结束。4. 黑白棋游戏设计4.1 程序功能 黑白棋游戏是一个深受人们喜爱的游戏,通常是人机对奕,本程序设计为人与人对奕,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。4.2 程序设计目的 这个程序是对编程基本功的一个训练,将分支、循环、数组、函数综合应用,而不仅限于编制独立的小程序,能够大大提高编程水平。4.3程序设计4.3.1游戏规则 棋盘设计为8X8格,初始状态在棋盘中央交叉排放黑白棋子各两枚,为统计棋子个数,有一个棋子计一分,白棋先走。每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围的对方棋子将变成自己的棋子。包围的方向可以是上下左右以及左右斜线共8个方向,只要能连成一条线即可。当轮到一个棋手摆子,而他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。当棋盘上有一方的棋子为0或下满64格,游戏结束,棋子少者输。4.3.2游戏界面 1.见图4-1游戏初始界面图4-1游戏初始界面 2.见图4-2黑棋胜利的界面图 4-2 黑棋胜利的界面4.3.3程序设计思路 程序的界面是一个二维平面图,数据的表示可用二维数组,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋。这样给数组元素的取值设定为0、1、2,其中0代表空格,1代表白色棋子,2代表黑色棋子。这样程序的主要工作是接收棋手按键操作,一旦接收到回车键,说明棋手摆子,先判定是不是有效位置,也就是能不能包围住对方棋子,如果能,便对棋子所在的位置往上下、左右、左上、左下、右上、右下8个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行统计并输出结果。如果没有这样的位置可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。如果想提前终止游戏,可以按Esc键。1.main主函数 在主函数中,棋盘状态用数组a88,初值为0,表示空格。用图形系统画出棋盘,调用playtoplay人人对弈函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。2.DrawQp画棋盘函数 背景颜色设为蓝色,从坐标(100,100)开始每隔40个单位用白色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。函数setfillstyle可以设置填充模式和填充颜色,fillellipseint x,int y,xradius,int yradius以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。3.SetPlayColor设置棋子的颜色 函数的参数为整型变量t,根据t的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。 4.MoveColor恢复原来格子的状态 由于棋手在走棋的时候,他的棋子总是首先出现在棋盘的左上角,棋手要通过移动光标走到要落子的位置,在经过的路程上显示当前棋子,就会覆盖原来的棋盘状态,所以一旦棋子走过后,就应恢复原来的状态,是空格的依然显示空格,是棋子的就显示原来棋子的颜色。因为棋子移动过程并没有改变数组元素的值,所以可以根据数组元素的值判定原来的状态,如果值是1,就恢复白色棋子,值是2则恢复黑色棋子,否则恢复蓝色空格。5.playtoplay人人对战函数 这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下: 按Esc键程序可以随时结束;按上下左右光标键,则改变棋子移动的坐标值;按回车键后判断。程序代码: void playtoplay/*人人对战*/ int x,y,t1,i,j,cc0; while1/*换棋手走棋*/ x120,y80;/*每次棋子一开始出来的坐标,x为行坐标,y为列坐标*/ while1 /*具体一个棋手走棋的过程*/ PrintScore1;/*输出棋手1的成绩*/ PrintScore2;/*输出棋手2的成绩*/ SetPlayColort;/*t变量是用来判断棋手所执棋子的颜色*/ fillellipsex,y,15,15; keybioskey0;/*接收按键*/ ifkeyESC/*跳出游戏*/ break; else ifkeyENTER/*如果按键确定就可以跳出循环*/ ify!80&ax-120/40y-120/40!1 &ax-120/40y-120/40!2/*如果落子位置没有棋子*/ ift%21/*如果是棋手1移动*/ ax-120/40y-120/401; else/*否则棋手2移动*/ ax-120/40y-120/402; if!QpChangex,y,t/*落子后判断棋盘的变化*/ ax-120/40y-120/400;/*恢复空格状态*/ cc+;/*开始统计尝试次数*/ ifcc64-score1-score2 /*如果尝试超过空格数则停步*/ MoveColorx,y; fillellipsex,y,15,15; break; else continue;/*如果按键无效*/ DoScore;/*分数的改变*/ break;/*棋盘变化了,则轮对方走棋*/ else/*已经有棋子就继续按键*/ continue; else /*四个方向按键的判断*/ ifkeyLEFT&x120/*左方向键*/ MoveColorx,y; fillellipsex,y,15,15; SetPlayColort; x-40; fillellipsex,y,15,15; else ifkeyRIGHT&x400&y80/*右方向键*/ MoveColorx,y; fillellipsex,y,15,15; SetPlayColort; x+40; fillellipsex,y,15,15; else ifkeyUP&y120/*上方向键*/ MoveColorx,y; fillellipsex,y,15,15; SetPlayColort; y-40; fillellipsex,y,15,15; else ifkeyDOWN&y400/*下方向键*/ MoveColorx,y; fillellipsex,y,15,15; SetPlayColort; y+40; fillellipsex,y,15,15; ifkeyESC/*结束游戏*/ break; ifscore1+score264|score10|score20/*格子已经占满或一方棋子为0判断胜负*/ 见图4-3playtoplay人人对战流程图 图4-3playtoplay人人对战流程图 6.QpChange判断棋盘变化 当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果是,则改变棋盘,也就是棋盘上黑白棋子的个数要发生变化。如果所有方向都判断过,并且没有引起棋盘的变化,则棋盘变化标志值yes为0,返回yes,结束本函数。7.DoScore处理分数 根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为1,白棋棋子数累加;如果数组元素值为2,则黑棋棋子数累加。8.PrintScore输出成绩 利用设置实体填充模式填充矩形条清除掉前次的成绩,再利用sprintf函数将整数转换为字符串的形式,再利用outtextxy函数将成绩输出。9.playWin输出胜利者结果 根据分数值score1和score2的大小得出下棋的结果,输出赢者信息。 void playWin/*输出最后的胜利者结果*/ settextstyle0,0,4; setcolor12; ifscore2score1/*开始判断最后的结果*/ outtextxy100,50,black win!; else ifscore2score1 outtextxy100,50,white win!; else 见图4-4play输出胜利者流程图: 图4-4play输出胜利者 结 论 制作这两款游戏之前,我重点学习C语言,我在大学期间曾经学习过C语言入门,虽然学习过,但是由于时间太久,而且都是最最基础的知识,我在制作过程中还是遇到了比较大的困难,难度对我来说还是不小的。在我这段时间自己学习C语言的同时,一边还继续熟悉着WIN-TC里边的功能以及操作方法,我参考了很多书,在网上也看了教程,一点一点的学习。 除此之外,我还接触了很多以前没有数据库,这些都是通过这次制作毕业设计所学习到的知识,也因此让我对制作游戏产生了浓厚的兴趣,制作完这两个游戏后,我会继续学习C语言,并继续制作自己喜欢的游戏,让我自己在紧张的工作学习之余,能够用自己制作的游戏放松自己,并且分享给我的朋友和家人,让他们一同体会自己制作游戏的乐趣。 当然,由于是一个新手,我制作的这两款游戏依然存在很多缺陷,是我短期之内没有克服的,但是我相信最终会克服,并制作出更加完善的游戏。比如在“贪吃蛇”游戏中,可以

温馨提示

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

评论

0/150

提交评论