贪吃蛇游戏设计 论文及源代码_第1页
贪吃蛇游戏设计 论文及源代码_第2页
贪吃蛇游戏设计 论文及源代码_第3页
贪吃蛇游戏设计 论文及源代码_第4页
贪吃蛇游戏设计 论文及源代码_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、课课程程设设计计报报告告 贪吃蛇游戏设计贪吃蛇游戏设计 专业专业电子信息工程 学生姓名学生姓名 班级班级b 电子 062 学号学号 指导教师指导教师 完成日期完成日期2008 年 8 月 30 日 贪吃蛇游戏设计贪吃蛇游戏设计 摘要:本设计主要围绕贪吃蛇游戏展开。众所周知,贪吃蛇游戏一直以来是比较流行的。 传统的贪吃蛇游戏功能比较少,对蛇的控制仅限于向左转和向右转,而现在的贪吃蛇游戏 已经发展的相当好;具有更多的功能和友好的界面。例如,最近流行的免费的3d版的贪吃 蛇游戏,界面相当的美观,有很强的立体效果,真实感更强,食物也为立体的且颜色绚丽。 在3d版贪吃蛇游戏里面,墙壁是真实的墙壁,障碍物

2、比较多,如树、土丘等。此外,其功 能更多更强,可以选择难度。不过,总而言之,3d版与传统的贪吃蛇游戏有共性,即娱乐 性与益智性。这些也是贪吃蛇游戏的优点。 本人因水平有限,只能设计简单的贪吃蛇游戏。不过,在功能上,比传统贪吃蛇游 戏更丰富。蛇可以反向运动,操作起来,显得更为灵活。界面的颜色选用绿色,不易使眼 睛疲劳。 关键词:3d版;传统;灵活; 目目 录录 1、概述 1.1、用tc设计程序的方法 1.2、简要说明 2、设计要求 3、系统分析与模块设计 3.1、算法设计 3.2、数据结构 3.3、模块设计 3.4、模块枝干图 4、程序流程图 4.1、图形驱动 4.2、开始画面 4.3、显示食物

3、 4.4、蛇向前移动 4.5、判蛇死 4.6、吃到食物后处理 4.7、判蛇反向移动 4.8、游戏结束 4.9、图形结束 5、程序设计及关键源代码 6、运行结果分析 7、实习心得 贪吃蛇游戏的设计贪吃蛇游戏的设计 1 .概 述 1.1、用tc设计程序的方法 首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能, 要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。模块的 数量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。模 块设计完成后,就该给每个模块绘制流程图了。流程图要简单,容易理解,多 用中文。不宜写过长的代码,增加理解难度。流程图与模块枝干图均可用绘

4、图 软件绘制,可适当加些背景色,用以区分。此外,流程图应容易转换成代码。 绘制好了流程图,就要编写代码了。直接在tc环境里输入代码,然后运行测试, 检查错误,最终,将设计出可行的程序。 1.2、简要说明 我设计的贪吃蛇游戏具有很多独特性。例如,墙壁不用实体,而用中空的 墙,颜色为绿色,显得更美观,且不易使眼疲劳。操作上,做了些简化,游戏 开始时便可以自动运行,且速度较快,属中等难度。玩游戏的过程相当简单, 只需按键盘上的上下左右方向键,便可改变蛇的行进方向。食物随机产生。贪 吃蛇吃到一个食物后便得到10分。得分显示在左上角。当蛇撞到墙壁或自己时, 蛇死,游戏结束,输出得分。 2.设计要求 外观

5、为矩形,食物随机产生,添加注释,统计得分、每吃到一个食物获 得10分。蛇碰到自己或墙壁,游戏均结束。游戏结束时输出得分。画出模块 枝干图与每个模块的程序流程图。修改某些代码,改变其外观及功能。 游戏操作应尽量简单。 界面美观,让人看了觉得舒服。 3、系统分析与模块设计 3.1、算法设计 玩游戏过程采用递归算法,由while(1)控制循环过程,可使游戏重复玩, 在蛇死之前不停的玩。判断蛇死的算法是通过判断蛇有没有碰到自己及墙壁。 使蛇向前移动采用递归算法,通过递归将蛇的每一节依次向前移动,横坐标与 纵坐标依次向前赋值,从而达到使蛇前移的目的。蛇的前进方向通过if结构判 断。 3.2、数据结构 蛇

6、与食物信息分别用两个结构体存储与表示。将食物的横坐标x、纵坐标y和 判断是否要出现食物的变量yes分别作为食物的结构体的成员。蛇的横坐标数组 xn,纵坐标数组yn,蛇的节数node,蛇的移动方向direction、蛇的生命life 分别作为蛇的结构体的成员。结构体内每个成员的存储类型均为整型。 3.3、模块设计 模块应具有高内聚性,低耦合性。这样,程序运行才更稳定,效率更高。 据功能将贪吃蛇游戏划分成四个大模块,九个小模块。每个模块均具有自己 的功能,而且,比较容易画出各个模块的流程图。 3.4、模块枝干图 简要说明:图形驱动即完成初始化图形系统功能;开始画面模块的主要作用是根据设置绘制出 玩

7、游戏区域四周的墙壁;玩游戏的过程是游戏此游戏程序的核心,又可细分为好多小的功能模 块;其中,显示食物模块仅完成显示食物功能;蛇前移模块即通过递归算法实现蛇的向某方向 移动;判蛇死模块的功能是通过判断蛇是否碰到自己或墙壁来判断蛇有没有死亡。吃到食物后 小模块只有蛇吃到食物后才起作用。即当蛇吃到食物后,蛇自身延长一节并绘出蛇,同时加 10 分。通过键盘操控来玩游戏主要由判反向移动模块完成,即当蛇不是反向移动时,按照键 盘上方向键指示移动。游戏结束模块功能简单,仅完成输出得分与提示语功能。最后图形结束 模块完成关闭图形功能。 4、程序流程图 4.1、图形驱动 4.2、开始画面 4.3、 显示食物 4

8、.4、 蛇向前移动 4.5、 判蛇死 4.6、 吃到食物后处理 4.7、 判蛇反向移动 4.8、 游戏结束 4.9、 图形结束 5、程序设计及关键源代码 定义上下左右控制方向: #define left 0 x4b00 #define right 0 x4d00 #define down 0 x5000 #define up 0 x4800 #define esc 0 x011b 设定游戏速度: int gamespeed=60000; 用结构体定义食物与蛇: struct food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变

9、量*/ food;/*食物的结构体*/ struct snake int xn; int yn; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0 活着,1 死亡*/ snake; 主函数: void main(void) init();/*图形驱动*/ drawk();/*开始画面*/ gameplay();/*玩游戏具体过程*/ close();/*图形结束*/ 图形驱动: void init(void) int gd=detect,gm; initgraph( cleardevice(); 开始画面,左上角坐标为(5

10、0,40) ,右下角坐标为(620,460)的围墙: void drawk(void) setcolor(10);/*绿色*/ setlinestyle(solid_line,0,thick_width);/*设置线型*/ for(i=50;i=610;i+=10)/*画围墙*/ rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ for(i=40;i0;i-)/*蛇的每个环节前移动,关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4 表示右,左,上,

11、下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4: snake.y0+=10;break; for(i=3;isnake.node;i+) if(snake.xi=snake.x0/*显示失败*/ snake.life=1; break; if(snake.x0595|snake.y0455) gameover(); snake.life=1; /*蛇死*/ if(snake.l

12、ife=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始 */ break; if(snake.x0=food.x/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; prscore();/*输出新得分*/ setcolor(4);/*画出蛇*/

13、 for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除最后一节*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/ if(snake.life=1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收

14、按键*/ if(key=esc)/*按 esc 键退出*/ break; else if(key=up else if(key=right else if(key=left else if(key=down /*endwhile(1)*/ 游戏结束: void gameover(void) cleardevice(); prscore(); setcolor(green); settextstyle(0,0,3); outtextxy(200,200, game over!try!); getch(); 输出成绩: void prscore(void) char str10; setfills

15、tyle(solid_fill,yellow); bar(50,15,220,35); setcolor(5); settextstyle(0,0,2); sprintf(str,score:%d,score); outtextxy(55,20,str); 6、运行结果分析 通过运行,我对自己的设计比较满意。运行结果正如我所料,此贪吃蛇游 戏具有易操作性及充满活力的外观。 截图及描述: 图 6-1 开始画面 此图为开始画面图,蛇有三节,墙壁颜色为绿色,显得较有活力。 图 6-2 蛇吃到两个食物后 蛇吃到食物后,得分为 20 分,蛇延长两节。 图 6-3 游戏结束画面 7、实习心得 在大一学习期

16、间,我就知道在大二暑假期间,有程序设计实习。从那时起, 我就期盼着这一天早点到来。只因我对编程有浓厚的兴趣。我是我们班第一个通 过江苏省计算机 vb 二级考试的。我的 vc+成绩也还可以。 转眼间,程序设计实习就如期而至了。实习的第一天是充满好奇与兴趣,当 实习回来时,就感觉得这次实习并非想象中的那样。我本以为,程序设计实习应 该是开放性的,让我们参照某些课题,自主、自由地设计程序。我想,那样更能 促进我们学习和提高我们的动手能力。 这次实习中,我们都被给了程序的源码,而且有详细的功能说明。表面上看, 我们几乎不需什么努力就能完成,而实际上,并非如此。因为那些程序大多是基 于 16 位 dos

17、 执行的,并且,里面包含许多 dos 下图形处理的函数,我从未涉及 过,所以,很难看懂代码,即使有那样详细的注释。 通过坚持上机实习,我对代码的认识越来越多。我还上网找了些资料,如 tc 函数详解等等。我更多的了解了各种 tc 函数的功能。我通过一步步的学习,终于 弄懂了整个程序,并且对程序做了些修改。如外观、大小、输出成绩等。通过修 改程序代码增加游戏的功能,我也从中获得了自信。 通过使用 win-tc1.9 设计程序,我更多的了解了 tc 函数的功能与用法,也了 解了在 tc 环境下调用 dos 绘图及处理的常用方法。 在上机实习的过程中,还绘制了模块枝干图与程序流程图,我感觉到,画模 块枝干图并不是件容易的事。只有在弄懂程序后才能将整个程序划分成数量适宜 的模块。划分模块确实挺重要的,原来我将玩游戏过程划为一个模块,后来发现

温馨提示

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

评论

0/150

提交评论