




免费预览已结束,剩余44页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
迷宫游戏的设计与实现摘要 设计和实现的迷宫游戏是在VC环境下用C语言编写的,主要是设计迷宫有一个入口和一个出口,游戏者在进入迷宫后,只能从出口出去,否则失败,该程序支持键盘操作,迷宫大小是由游戏者来确定的,可以自动随机的生成迷宫地图,迷宫游戏设计了一个视野窗口,可以支持游戏者漫游到视野范围外的迷宫,游戏者可以从左侧的入口进去,在右下侧的出口退出,遇到墙壁,则游戏者不能通过。游戏者在迷宫中探索出口的过程中可以使用上,下,左,右键这几个键手动的搜索迷宫的出口。迷宫的地图是使用绘图函数显示在屏幕上的,是调用easyX函数库来实现的,所以本文最重要的一个部分就是在介绍屏幕显示下的图形模式,和在这种模式下,所调用的一些绘图函数。 关键词:迷宫;回溯;绘图函数Abstract: Design and implementation of the maze game written in C in the VC environment is mainly designed maze has one entrance and one exit,after entering the maze, the player can only exit,or else fail, the program supports keyboard operation,maze size is determined by the player automatically randomly generated maze map,maze game,design a vision window,the player can support roaming to the field of view outside of the maze,the player can go from the left side of the entrance in the rightthe under side of the export exit encountered the wall,the player can not.The game in the maze to explore the export process can use the up,down,left,right-export of a few keys to manually search the maze.Map of the maze is displayed on the screen using the drawing function is to achieve to call easyX library, so this article the most important part is the introduction screen display graphics mode,and in this mode,the call drawing functions.Keyword: maze;look back upon;draw function46目 录引言11迷宫游戏的概要设计21.1工具介绍21.2游戏的主要功能31.3程序调用的头文件的介绍32 easy X的介绍32.1为什么要用easy X32.2 easy X43迷宫中的数据结构44迷宫游戏中调用的函数74.1绘图函数的基本知识的介绍74.2程序中用到的绘图函数85流程图及模块图105.1功能模块图105.2系统流程图116迷宫游戏的设计思路137 游戏的关键代码18结论21致谢22参考文献23引言迷宫的问题原本是一个经典的实验心理学的问题,其大概的内容是实验心理学家将老鼠放入从没有顶的大盒子的入口处让其由此进入迷宫。迷宫中被隔板隔成有很多的分区设置,前进的方向可以形成很多的障碍,有可能某一次走入的那个位置,可能会将小老鼠带入到死胡同,从而要重新的探索新的方向去寻找到出口,而此时给老鼠动力的是一位心理学家在迷宫的唯一的出口处放置的一块奶酪来吸引老鼠,从而给了老鼠外界的动力,让其发现从迷宫中通向迷宫的出口的位置。当然,心理学家做这个实验是为了研究老鼠在迷宫中寻找出口时的种种表现,去研究这些表现是反映出它在那个时刻是什么样的心理反映,从而去研究这些心里反映说明的问题,还有在这种在老鼠不知道出口的情况下,老鼠是如何识别这条道路是否已经走过,从而心理学家们可以去研究老鼠的学习能力,这只是最初时为了进行学术研究而设置的。有了这样一个启发,后来有的程序员开发出了各种迷宫的小游戏,这种迷宫的小游戏是趣味性的游戏,可能不用太多的思考能力,但是要的是一种耐心,往往游戏者迟迟走不出,或是走了很久,以为快到出口的地方时,结果进入了死胡同,还要返回去再来,会容易让人产生不耐烦的心态,因为要逐一的去试探各种可能的方向。但是这种经典的小游戏并没有因此而失去它的魅力,反而吸引了更多的玩家,现在程序的设计者也更加注重提高游戏的趣味性,比如,游戏者的标志是很炫的卡通人物,或是迷宫的障碍物设计的很有意思。这次我设计的这个迷宫游戏用的是比较简单的方法,是在VC环境下用C语言编写的,并没有用到VC中的API和MFC这种面向对象的方法去编程,当然这两种环境下编出来的界面会更加的漂亮,这次是调用easyX库函数来实现迷宫的界面的,所以在程序中用到了调用到了很多的绘图函数。设计的迷宫是有一个入口和一个出口,游戏者在进入迷宫后,只能从出口出去,否则失败,该程序支持键盘操作,迷宫大小是由游戏者来确定的,可以自动随机的生成迷宫地图,迷宫游戏设计了一个视野窗口,并不是所有的迷宫地图都可以整个的出现在游戏者的视野范围内,这样做的目的是,如果游戏者事先能浏览整个的迷宫地图的话,就可以大概看一下地图,这样就会很容易走出去,失去游戏本身的趣味性,当游戏者要到视野范围外的迷宫地图时,这时迷宫游戏可以支持游戏者漫游到视野范围外的迷宫。除了有漫游的功能,还有一个是还可以用三种不同的颜色去标识已经走过的路径,方便让走入死胡同的游戏者可以沿原路返回后,因为忘记刚才走过的路,又一次走入刚才走过的死胡同,这种情况会经常发生。比如每到一个叉路口,这时可以用黄色来标记,表示暂时的记住来过这个地方,如果后来到了到了死胡同,这个黄色标记中通往死路的这个方向可以用红色标记,用此来表示这条路不通,以后可以不走。当游戏开始后,游戏者可以从左侧的入口进去,如果能找到出口的话就会在右下侧的出口退出,墙壁则是障碍物的标识,游戏者是不能通过的。游戏者在迷宫中探索出口的过程中可以使用上,下,左,右或是A,W,S,D这几个键手动的搜索迷宫的出口。迷宫的地图是使用绘图函数显示在屏幕上的,除了描述了迷宫游戏的设计思路和所使用到的数据结构,本文还有最重要的一个部分就是介绍在屏幕显示的图形模式,和在这种模式下,所调用的一些绘图函数。1迷宫游戏的概要设计1.1工具介绍编写迷宫游戏用的是visual C+6.0和EasyX 2011惊蛰版,程序所用语言是C语言。Visual C + + 6.0是微软开展的Win32应用程序(Windows 95/98/2000 / XP / NT)、集成工具,面向对象的可视化的一个集成工具。其最大的优点是提供一个强大的MFC类库是一个很强大的c+类层次结构,它是由封装了很多类和函数的Windows程序标准由MFC类来提供MFC类等内容,而且MFC为这些提供一个用户界面标准的实现,程序员必须要做的是通过预定义的接口的特定应用程序特定的东西来填满这个框架可以简化编程工作,大大减少了程序员编写的工作量,使得编程变得更加容易。 2011 EasyX惊蛰版是2011年3月6日发布的,据作者自己介绍,之前的easy X一直用的是该版本的发布时间来标记该版本的,说是正好发布的那一天,正是二月二,中国农历的节日龙抬头,也是二十四节气中的惊蛰,所以这也是2011惊蛰版的来历,在这个新的版本中,作者对其作了大量的更新,使其用起来更加的方便和功能更加强大,新增加的很多功能中,在这次设计程序中,就用到了新增加的两个函数,GetWorkingImage函数/ SetWorkingImage函数和InputBox函数。另外,在新版中凡是和圆弧有前的函数,都改为用了弧度制,在以前BGI(Basic Graphics Interface)图形接口文件是使用的是角度制,如果每个程序都需要将弧度制转换为角度制无疑是很麻烦的,所以现在使用弧度制省去了很多的麻烦。除了新增加的功能,还有部分的功能作了调整,以下只介绍我们在程序中会用到的几个函数,arc函数由画圆弧调为画椭圆弧,精简putimage函数,可以设置当前绘图图像的宽高,cleardevice函数清屏幕内容不在是局限于裁剪的区域,还有部分bug的修正,例如对文字和绘图的稳定性的提高,也修正了以前版本在退出程序时会产生崩溃的一些问题。在其他的方面是提高了程序的兼容性和对帮助文件的更新【21】。1.2游戏的主要功能建立一个大小为任何迷宫的m * n,m,n是由用户输入的数字,自动生成一个m * n迷宫。并完成了组织和存储的迷宫,和迷宫路由算法。迷宫有一个入口和出口,以及支持键盘操作。游戏者从左上侧找到入口,右下侧找到出口。迷宫的屏幕上显示的障碍物图形是由随机种子自动生成的,并使用图形函数显示在屏幕上。程序响应键盘操作,四个方向键来选择路径,若碰到墙上,则不能通过。走过的路径,可以进行标记【18】。1.3程序调用的头文件的介绍#include文件的扩展名为.h的文件是头文件,在程序中使用头文件有多种好处,比如可以减少整个的代码的长度,一般把这些公用的内容编译在一起,提供公共的代码。有些函数库的功能可以通过头文件来调用,有些函数库的源代码是不方便或者不准向外界公开的,所以向用户调用头文件时,连接头文件的接口会来调用有关的库函数的,会从中取出相应的代码,可以和用户的程序链接生成可执行的动态连接库文件,所以不必向外界公开代码,同时也不影响用户的使用,而且又增强了用户程序的可读性。在本次的程序中开头调用了graphics.h,conio.h,time.h这三个头文件,这三个头文件都是在本次的迷宫设计中与取随机数后自动生成迷宫,绘制迷宫图形和读取游戏者输入的相关命令,系统返回的相关命令相关的头文件,下面大概介绍一下这三个头文件:graphics.h是easy X图形库,在图形库里主要为程序提供的是图形模式函数。Conio.h为程序提供的是字符模式函数。可以通过控制台进行数据的输入和输出,例如是对一些响应一些用户的键盘操作,conio这几个字母实际上是控制台输入输出操作的简写。Time.h是提供日期和时间的头文件,是从系统时钟获取时间的方式【21】。2 easy X的介绍EasyX是针对C+的图形库,可以帮助C语言初学者快速上手图形和游戏编程。2.1为什么要用easy X大多数程序员学习C语言编程是从TC开始学习,主要是介于TC的编程环境因为太老了,所以容易给新手造成一种学习上的环境的压力,比如想复制和粘贴某段代码时是很不方便的,这种外界性的压力容易让刚开始学习C语言的学习者对学习产生一些不好的情绪。面VC有杰出的编辑和调试的环境。并且它易于下载到免费的版本。但不幸的是,VC只能做一些类似于文本的练习,比如想画一条直线或圆类的图是很难的,想注册窗口类和构造消息循环都是在刚开始学习时不容易上手的。所以通常我们在刚开始接触到C语言时,老师一般的推荐我们使用TC,因为给容易上手。现在为了给每个人一个更好的学习平台,为了更好的体现出VC的优越性,所以一些程序开发者编写了easyX库,现在有了这个库函数,可以在VC环境下方便的进行图形的绘制,这个函数库的出现给C语言的开发者提供一个更方便的开发平台。2.2 easy X首先介绍一下easy X的安装环境,操作系统的版本:windows2000及以上的系统。编译环境的版本是:visual C+6.0/2008/2010。安装时解压后,可以执行setup.hta,可以根据提示安装。但如果想手动安装,可以将include和lib文件夹下的文件分别拷贝到VC对应的include和lib文件夹内即可。在include文件夹下只有一个文件是graphics.h,而如果你用的版本是VC6.0,lib文件夹下的文件只需要用graphics6.lib和graphics6u.lib这两个文件。如果你用的是VC2008及以上版本lib文件夹下的文件就需要graphics6.lib、graphics6u.lib、graphics9.lib、graphics9u.lib这四个文件。或者也可将include和lib文件夹放到任意位置,然后在去修改VC中的lib和include的引用路径也可以。总之,能让VC找到这几个文件即可。在以上所说的这几个文件,后缀名为h的是程序需要引用的头文件,后缀名为lib的是程序的库文件。卸载该程序时要注意,由于该安装程序并不改写注册表,因此在“添加删除程序”中不会看到easyX的卸载项。如需卸载,可以执行setup.hta,并跟随提示卸载。新的版本的安装程序并不能确保完全卸载旧版本,所以可以保留相应版本的安装程序。3迷宫中的数据结构数据结构对编写出一个高效的程序是非常有用的,它对分析即将处理的对象的特性和各对象之间的关系都有一种明确的思路。在通常我们都是用“穷举求解”的方法,从入口出发,顺着某一方向向前探索,如果能走得通,就继续往前走,不行的话就原路退回,到交叉口换另外一个方向再续继探索,直到所有可能的通路都探索到【16】。程序中最后用了数据结构中的递归,递归函数就是一个函数直接的调用自己或者是通过一系列的调用语句间接地调用自己,在程序设计中,递归函数是一个非常好而且有力的工具,通过调用它可以省去很多繁琐的步骤,这其中的原因有三条:1.可以定义很多递归的数学函数。2.有的数据结构的本身也具有递归的特性。3.有时候用递归求解比用迭代更加的简单和方便。有时候在用到递归函数时,通常需要多次的调用,递归函数的执行有点类似于汇编程序中主程序和子程序这间的接口和信息的交换,而在高级语言中,这种函数和被调用函数之间的信息交换是通过栈来执行的。在来看看,当一个运行着的函数调用另一个函数时,系统做了哪些工作。首先,系统会将主调函数的所有的实参数和返回地址等一些信息通过栈来保存起来。其次,系统要为分配存储区给被调用的函数的局部变量。最后,将控制权转移到被调用函数的入口【15】。而当被调用函数返回参数到调用函数之前,系统会做好这些工作:将被调用函数的计算结果保存,将分配给被调用函数的存储区释放,根据被调用前保存的返回地址将控制权重新交回到调用函数。当有多个函数嵌套调用时,都是按照后调用先返回的原则,而这些信息的传递和控制权的移交都是通过栈来实现的,系统会安排一个栈自动保存的程序运行期间所需的数据,当调用一个函数时,系统就会在栈顶为其分配一个存储区间,有函数退出来时,会释放这个存储空间。而且当前的正在运行的函数的数据区总是在栈顶的。在实际的程序的执行过程中,主被调函数之间传递的不一定是一个数值,也有可能是参数的地址。递归函数在运行时有点像调用多个嵌套的函数,调用的函数和被调用的函数是同一个函数,所以就有种类似于层次的感觉,比如,从主函数开始调用递归函数时就开始进入第一层,每次都这样的迭加,直至进入了第n+1层,相反地,如果退出时,就是第n+1层退回了第n层。如果递归的情况复杂的话,为了确保程序在执行时的正确性,系统会自动的为该递归函数建立一个递归工作栈,这个递归工作栈在数据存储区中,在每一层的递归信息中都会有一个工作记录,这个工作记录包括了这个函数中所有的实参数,局部变量还有递归结束后要返回的地址。当每进入一个递归层时,就会在栈顶产生一个新的工作记录,退出一个工作记录时,就会相应地从栈顶弹出一个工作记录,在当前正在执行的工作记录称为活动记录。递归函数的好处是可以使结构很清晰,可读性也高,对用户编程和调试程序都带来了很大的方便,而且也不需要用户来管理栈。介绍了一下回溯算法,也被称为启发式方法,选择的搜索方法,通过最优选择条件提出搜索,你可以达到预期的目标,但在探索下一个步骤,如果不是最优的选择或低于目标,您可以返回到前一步骤,特别是退出这个死胡同返回到上一步重新开始的方法被称为回溯和满足这一状态的点称为“回溯点”,这是一种方法,一个系统性寻找问题的解决办法【13】。回溯是一个相对简单的和常用的搜索策略。基本的想法是用假定的步骤来解决一个问题可能会有N个步骤,每一步都多种的解决方案,那么一旦每一步按照一定的顺序来测试每一步的各种方法,所有这些方法都失败了,那么就回去测试其余的方式。简言之,如果你不能进一步,你将回返,从而对于其他道路在尝试。一般步骤使用回溯算法来解决这个问题:第一是定义一个解决方案空间,它包含问题的解决办法,那就是,每一步都以不同的方式出现,然后使用适当的搜索的方法来组织解决方案空间,然后用深度优先的方法对解空间进行搜索,然后使用评估函数来避免转移到不可能生成子空间的解决方案。解决方案空间通常是解决方案的动态搜索过程中产生的,这是回溯的一个特性。完全访问分为两种情况:第一,没有考虑到问题的本质性质,按照预定的秩序,建立一个良好的规则,这是盲目搜索的方法,如迷宫和八皇后问题。另一个是考虑问题给予独特的性质,就可以选择合适的规则来提高搜索的效率。即启发式搜索5。我们在解决一个迷宫问题时,使用试探或者回溯开始从入口,沿着一个方向前进探索,如果我们穿过,你可以继续向前;否则返回沿着上一步的路线的另一个方向,继续探索,直到所有可能的路径都已经试探完毕,也没有找到出口,这表明迷宫中不存在从始至终的通道。从入口进入迷宫,无论哪个位置的迷宫,比如规定东是首选方向,如果在某一位置我们可以通过并继续往东走,如果在一个位置,在往东走不通时,将向南、西、北、在三个方向依次走去走一趟年盾哪个能走通,直到走向出口。一个位置,在四个方向上都是死胡同,可以返回到之前的位置,在这个位置,对别的方向,都试一次,如果这个位置没有方向可以试,再后退一步,所沿的四个方向试探过后,最后回到起点,这表明这个迷宫根本不通11。迷宫的障碍不仅是指墙壁封锁了道路,已走的道路不能重复去走,不有没有走过的道路一旦经过。为了确保在任何位置都可以用相同的路线返回,就要用一个结构栈来保存路径,这个结构栈是后进先出的堆栈,可以将当前位置的入口到走出出口的一个正确的路径保存在栈中。但在解决迷宫的路径中,该路径必须是一个简单的路径。该路径不能重复的出现在同一位置。该算法的基本思想是:迷宫的当前位置通过堆栈可以被放置在这个位置即当前路径,并继续移动到下一个地点,以探索,然而,如果现在的位置不可通,即将堆栈头部的元素从堆栈弹出,以恢复原来的方向,然后继续往这个方向向另外的几个方向去探索,如果四个方向的通道都是不可通的,就可以从堆栈中将当前路径上的这个路径上删除。用回溯算法实现了迷宫,使用堆栈的方法可以有效地解决了路径识别和迷宫问题,如果能走出迷宫的随机模拟矩阵,你可以给它的轨迹的路径【7】。图是一种比较复杂的数据结构,在图的结构中结点之间的关系可以是任意的其实也就是说任何的两个数据元素都可能是有关系的。图的遍历是指我们从图中的某一点出发,去访问其他的顶点,而且每个顶点只能被访问一次6。4迷宫游戏中调用的函数4.1绘图函数的基本知识的介绍 在我们初学C语言时,一般学习的都是用语言去处理字符和数值,但是C语言也是可以绘制图形的。虽然C语言只是可以画出一些简单的图形,例如直线、圆和椭圆弧等一些较容易画出的基本的图形。一些复杂的图形又是由这些简单的图形组成的,所以我们只要能会调用一些常用的图形函数,就可以完成绘图功能,我们就可以轻松的画出一些我们想要的漂亮的图形。在C语言中数据显示在屏幕上的方式分为两种分别是纯文本模式(显示文本)、图形模式(显示图形),在C语言中文本的模式是屏幕的默认模式。为了易于把计算机屏幕上显示的内容表达出来,我们一般都是把坐标的原点定为屏幕的左上方,行为X坐标,列为y坐标,这些和中学时在数学中学习的建一个平面直角的坐标系很相像,所以很好理解,唯一有点不同的是,左上方是屏幕上的直角坐标系的原点坐标【20】。下面除了要介绍画出一些图形的方法,还要介绍一下在图形模式下如何显示一些字符类的提示信息。因为整个屏幕上只有图形的话,没有一此字符的提示这样会给游戏者带来操作上的不便。所以在图形模式下能够有字符显示会使操作的界面更友好。在C语言中的基本的绘图步骤是:第一步是将屏幕模式设为图形模式,第二步是调用图形库中的绘图函数,第三步是关闭图形模式(屏幕模式返回到字符模式或文本模式)【20】。在前面我们说过在C语言中文本的模式是屏幕的默认模式,所以在编写程序刚开始第一步先要考虑的是应该如何把这种模式转变,这里调用了这样一个函数initgraph(640, 480);这个函数就可以改屏幕的模式为图形模式,后面的参数是说这个屏幕的分辨率是640480,就是这个屏幕的每行每列分别有640个象素和480象素。关闭图形模式是用closegraph函数,在绘图结束后可以用这个函数来关闭图形模式,此时将恢复系统默认模式【21】。有些函数的参数会调用到背景颜色值,这些颜色的符号名和色彩值都可以再本程序用到的easyX2011版中的easy X帮助文档中查到,这里就不逐一介绍了。用程序中用到的语句举个例子,比如程序中绘制界面背景色时用到了setcolor(CYAN);就是把整个界面的背景底色设置为青色,其实这个语句还可以描述为setcolor(3);这里的3就是色彩值,所以这个参数的有效值可以是颜色的符号名,也可以是色彩值【21】。4.2程序中用到的绘图函数Welcome函数是绘制游戏界面,InitImage函数,初始化游戏图片InitGame函数,初始化游戏数据,GetMazeSize函数,提示用户输入迷宫大小,MakeMaze函数,生成迷宫:初始化(注:宽高必须是奇数),TravelMaze函数;生成迷宫:遍历 (x, y) 四周,MAPITEM GetMazeItem函数,获取指定坐标的迷宫元素,Paint函数,绘制视野范围内的迷宫,GetCmd函数,获取用户输入的命令,DispatchCmd函数,处理用户输入的命令OnUp函数是向上移动,OnLeft函数是向左移动,OnRight函数是向右移动,OnDown函数是向下移动,OnMark函数, 在地图中做标记CheckWin函数,检查是否到出口Quit函数,询问用户是否退出游戏【21】。 本程序中调用了两种随机函数srand函数和rand函数。在程序的开头用了srand(unsigned)time(NULL)产生随机数的原因是初始化随机函数种子。这个函数的意思是拿当前的系统时间作为种子,是为了达到程序要的效果,每次时间是变化的,所以种子也是变化的,可以每次生成不同的随机序列,有不同的地图序列,所以每次游戏者的系统时间不一样,会生成不同的随机序列。中间的参数的数据类型为unsigned,说明数据可以为任意数据。在程序的后面还会用到rand函数,rand函数是真正的随机数的生成器,rand函数与srand函数的区别是在我们用rand函数来产生随机数时,如果我们没有在rand函数之前调用过srand函数,系统会默认的认为1是随机数的初始值,但是如果用户在这之前调用了srand函数,则srand函数就给初始的参数的指定了一个固定的数。程序开头定义全局变量g-imgMap是迷宫地图,g-szMap是迷宫地图的尺寸,g-imgSight(360, 280) 是游戏的视野,g-rtSight是游戏的视野的范围,g-imgItem(180, 20)是地图元素,g-imgGPS是迷你地图,用于显示游戏者在地图中的位置,g-ptGPS是迷你地图的显示位置,g-szGPS是迷你地图的尺寸,g-ptPlayer是游戏者的位置。下面介绍一下在绘制迷宫过程中用到的绘图函数:setcolor函数,这个函数的功能是将当前图形屏幕的当前的笔画颜色置为color,一般来说,只有当我们当前的画笔色和背景色不同时,才能显示出来我们所想要画出的图形,所以我们可以先设好背景色,在将当前画笔设置成可以在背景色上显示出来的颜色,这时的景色我们称为是前景色【21】。rectangle函数,这个函数可以在指定的位置画出一个指定大小的矩形,括号内应有四个参数,假设这些参数是x1,y1,x2,y2,一般来说,这四个参数也都是整型数据,在这四个参数中,前两个数代表这个矩形的左上角顶点,后两个数代表右下角顶点,以此可以画一个矩形。特殊情况,当第一和第三个参数相等,第二和每四个参数不相等时,可以画出竖直线。当第一和第三参数不相等时,第二和第四个参数相等,可以画出横直线【21】。setbkmode(TRANSPARENT)函数,这个函数是要设置的模式,其值可以设置为OPAQUE和TRANSPARENT,其中OPAQUE的模式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的【21】。setfont函数,里面有3个参数分别代表字体的样式、格式、大小。Outtextxy函数用于输出字符。setWorkingImage(&g_imgItem);是设置绘图目标为g_imgItem对象;cleardevice函数清除图形屏幕,在该程序中为以下绘制图形PLAYER做准备。setorigin函数,这个函数里面有两个参数,是用来设置坐标原点的。setfillstyle函数,这个函数是用来设置填充模式的,可以填充一个任意的封闭的图形,是可以设计此次迷宫地图中一个重要的元素,障碍物的设置,包括了想要的填充物的颜色和样式,括号里面的参数用来代表填充的颜色和图案,如果里面的参数不去设置的话,就会以默认的单色进行填充【21】。fillellipse函数,该函数里面有四个参数,分别是x,y,横轴,纵轴,可以画出并填充一个椭圆,填充边框所定义的椭圆内部,该边框是由一对坐标,一个宽度和一个高度指定的,参数中的x,y是要画的这个椭圆的中心坐标,横轴即是椭圆的长半轴,纵轴是椭圆的短半轴,最终画出来的用当前画笔颜色画出来的一个填充的椭圆【21】。line函数,该函数可以在你想要的位置画一条直线,有4个参数,一般来说这四个参数都是整型数据,假设这四个参数是x0, yo,x1,y1,则x0,y0为直线的初始坐标,x1,y1为直线的末坐标,当然,也有特殊情况,当第一和第三个参数相等时,而第二和第四个参数不相等时,可以在屏幕上画出的是竖直线。当第二和第四个参数相等时,而每一和第三个参数不相等时,可以在屏幕上画出的是水平线。当第一和第三个参数相等时,而第二和第四个参数相等时,画出的是一个点21。arc函数,该函数有六个参数,分别为int left ,int top, int right, int bottom ,double stangle, double endangle,其是left是指圆弧所在椭圆的外切矩形的左上角X坐标, top是圆弧所在椭圆的外切矩形的左上角Y坐标, right是圆弧所在椭圆的外切矩形的右下角X坐标, bottom是圆弧所在椭圆的外切矩形的右下角Y坐标, stangle 是圆弧的起始角的弧度,endangle是圆弧的终止角的弧度【21】。bar函数,函数中四个参数为left、top、right、bottom,其中letf是矩形左部X坐标,top是矩形上部Y坐标, right是矩形右部X坐标,bottom是矩形下部Y坐标;另外bar函数与rectangle函数画矩形,区别bar画的是无边框填充矩形,rectangle画的是空心矩形【21】。moveto( x,y);这个函数可以改变当前屏幕上的输出点的位置并可以输出到指定想要的位置,是将当前点移动到x,y,一般是用来,在屏幕上输出指定想输出的内容,并不在屏幕上留下痕迹【21】。linerel(dx,dy);是从当前点开始画线,然后沿X轴偏移dx,没Y轴偏移dy;outtextxy函数,是在图形模式下在指定位置输出显示一个字符串,该函数一般都是与moveto函数放在一起使用,先用moveto函数到想要输出的位置,再用outtextxy函数输出想要输出的内容,三个参数中前两个分别是x,y轴的坐标值,最后一个是要输出的字符20。5流程图及模块图 5.1功能模块图迷宫游戏的实现主 界面制作初如化迷宫自动生成迷宫游戏过程实现已走路径标识退出游戏 图5-1功能模块图整个游戏是由这六部分功能模块来实现的,每个模块各负责不同的功能。主界面的制作中主要绘制界面的图形和界面上一些游戏操作的提示。初始化迷宫是对游戏图片的初始化,主要是预绘制一些游戏过程将要用到的地图中的标志。包括对游戏者标志的绘制,迷宫墙壁的绘制,可对已走过的路径做标志的图标的绘制,出入口标志的绘制等。自动生成迷宫是用户输入迷宫大小,对各游戏的参数的初始化。其中包括迷宫的创建,还有对游戏者位置的设置,视野范围的设置,按照迷宫的大小为迷宫分配内存,对迷宫边界的定义,对周围四个方向的遍历的定义。游戏过程的实现是跟据用户输入的命令来决定应该执行什么样的操作,从而用户对游戏过程的控制,并要随着用户的操作来更新地图中元素的当前状况。已走过的路径的标识这个功能是用定义了当用户按下空格键、Y、G,可以分别对已走过的路径进行红、黄、绿三种不同颜色的标记,用来表示这条路是否是走不通的,还是可以再去试探走这个路口的其他的方向。退出游戏的功能用户可以选择是退出游戏还是再重新来一局。5.2系统流程图对迷宫需要实现哪些功能有了一定的想法后,需要对整个程序的实现,每个步骤的先后实现有个清楚的认识。因此有了以下的系统流程图:开 始如始开始西 安 工 业 大 学计算机科学与工程学院算 法 设 计 与 分 析 课 程 设 计题 目: 五子棋 班 级: 050606 人 数: 13人 成 员: 陈玮 高谦 侯夕杰 马涛 宋文彬 王伟 周仁文 邵文清赵瑞红 李盈超 尉建明 陈建军 张祥雄 学 号: 时 间: 2008年元月16日 目 录1课程设计报告-1 1.1问题描述-1 1.2需求分析-1 1.3概要设计-1 1.4详细设计-页码 1.5调试分析-页码2源程序-页码3程序的说明文件-页码4课设总结-页码1 课程设计报告1.1问题描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。当有任何一方想退出时,都可在算法中实现。 1.2需求分析 (1)、输出游戏规则并由用户决定是否遵守并开局。 (2)、要求动态画出棋盘大小。(3)、画棋子并确定其颜色。 (4)、玩家轮流下棋。(5)、判断键盘输入哪个键按规则执行操作 (6)、判断谁先落棋。 (7)判断赢家1.3概要设计 流程图:Y Y N Y N Y N Y 1.4详细设计 1.5调试分析 运行结果:屏幕显示:Please input who is first:1 or 2 当输入1时,白棋先走;当输入2时,红棋先走。屏幕显示:Please input the size of chessbox:从键盘输入t值,则棋盘大小为t*t型。屏幕显示:Left, Right, Up, Down KEY to move, Space to put, ESC-quit 及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点 。当白棋赢时,显示The White Win ! 当红棋赢时,显示The Red Win !遇到的问题:算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。2源程序#include#include#include#include#include#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int boxNN,s; /*落子点*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戏规则*/ char ch ; printf(Play attentoins:nn); printf(1. Press Left,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《CB-T 756 - 1999柄式开关》新解读
- 交通标线施工方案
- Brand KPIs for neobanking Angel One in India-英文培训课件2025.4
- 江苏省南京市江宁区2023-2024学年四年级下学期数学期末试卷(含答案)
- Brand KPIs for health insurance:The Exeter in the United Kingdom-英文培训课件2025.4
- 介绍班级区域活动方案
- 从化别墅活动方案
- 仓山中学活动方案
- 仓库直销活动方案
- 代工单位活动方案
- 低压电气基础知识培训电工-电气工程师
- 2021-2022学年北京市朝阳区人教版三年级下册期末考试数学试卷及答案
- 2025年江苏盐城市海兴集团有限公司招聘笔试参考题库含答案解析
- DB35-T 2208-2024 面向视频图像识别的AI边缘计算系统应用技术要求
- Unit 5 The Value of Money Reading for Writing 说课稿-2023-2024学年高中英语人教版(2019)必修第三册
- 2025神华新街能源限责任公司系统内招聘23人(第二批)高频重点提升(共500题)附带答案详解
- 人工智能赋能竞技体育数字化转型的作用机制、应用场景与实现路径
- 医学教程 胆囊结石的教学查房
- 2024年云南高中学业水平合格考历史试卷真题(含答案详解)
- DB22-T 2786-2017 玄武岩纤维沥青混合料设计与施工技术规范
- ICU镇痛镇静治疗护理
评论
0/150
提交评论