贪吃蛇游戏实习报告.doc_第1页
贪吃蛇游戏实习报告.doc_第2页
贪吃蛇游戏实习报告.doc_第3页
贪吃蛇游戏实习报告.doc_第4页
贪吃蛇游戏实习报告.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

课课程程设设计计报报告告 贪吃蛇游戏设计贪吃蛇游戏设计 专业专业信息工程系 学生姓名学生姓名王洪松 班级班级信息类 101 班 学号学号100810518 时间时间2011-03-282011-04-01 山东交通学院 2011 年度课程设计 课课 程程 设设 计计 任任 务务 书书 题题 目目 贪吃蛇贪吃蛇 系系 (部部) 信息工程系信息工程系 专专 业业 信息类信息类 班班 级级 2010 级级 1 班班 学生姓名学生姓名 王洪松王洪松 学学 号号 100810518 03 月月 28 日至日至 04 月月 01 日日 共共 1 周周 指导教师指导教师(签字签字) 系系 主主 任任(签字签字) 年年 月月 日日 山东交通学院 2011 年度课程设计 贪吃蛇游戏设计贪吃蛇游戏设计 摘要:摘要:贪吃蛇是一款经典的休闲游戏,操作小蛇不停的朝食物的方向前进,直到吃掉了食贪吃蛇是一款经典的休闲游戏,操作小蛇不停的朝食物的方向前进,直到吃掉了食 物。每吃一个食物,小蛇都会长长一节,随之而来的难度加大;当小蛇的头撞到墙时或者小蛇物。每吃一个食物,小蛇都会长长一节,随之而来的难度加大;当小蛇的头撞到墙时或者小蛇 的头与身体相撞时,小蛇就会死亡;当然,小蛇的速度越快,每一个食物的分数就越高。的头与身体相撞时,小蛇就会死亡;当然,小蛇的速度越快,每一个食物的分数就越高。 进程安排进程安排 3 月月 28 日:规划程序需要调用的各个函数,根据要求要实现的内容日:规划程序需要调用的各个函数,根据要求要实现的内容 3 月月 29 日:图形驱动函数日:图形驱动函数 3 月月 30 日:开始画面函数日:开始画面函数 3 月月 31 日:控制玩游戏过程的函数日:控制玩游戏过程的函数 4 月月 1 日:日: 图形结束函数组装程序,及其调试图形结束函数组装程序,及其调试 0 20 40 60 80 100 第一季度第三季度 东部 西部 北部 开发环境概述开发环境概述 visual c+是微软公司的重要产品之一, 是一种功能强大行之有效的可视化编程工具。 它提供了 mfc 类库,使用户可以方便的开发自己想实现的功能。visual c+6.0 的主要特点: (1)自动化和宏功能。 (2)可以灵活地定制工具栏和菜单。 (3)可以直接运行和调试程序,还可以使用宏语言来自动操作调试器。 (4)支持 internet 连接。 (5)一个新的便捷的项目系统可以允许一个工作区内包含多个不同的项目类型。 (6)在工作区内可以包含多个并列的工程文件。 (7)可以在对话框中使用 wizardbar 将程序同可视化元素联系起来。 (8)find in file 命令支持两个独立的输出窗格,可以保存上一次搜索的结果。 这些新特性可以更好地利用 visual c+开发工具进行 windows 应用程序开发。 山东交通学院 2011 年度课程设计 目目 录录 1、概述 1.1、用c类环境设计程序的方法1 1.2、简要说明.,.1 2、设计要求.1 3、系统分析与模块设计2 3.1、算法设计 3.2、数据结构 3.3、模块设计 3.4、模块枝干图 4、程序流程图 4.1、图形驱动3 4.2、开始画面4 4.3、显示食物5 4.4、蛇向前移动6 4.5、判蛇死7 4.6、吃到食物后处理8 4.7、判蛇反向移动9 4.8、游戏结束10 4.9、图形结束10 5、程序设计及源代码10-17 6、运行结果分析18-20 7、实习心得21 山东交通学院 2011 年度课程设计 1 贪吃蛇游戏的设计贪吃蛇游戏的设计 1 .概 述 1.1、用tc设计程序的方法 首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能, 要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。模块的数 量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。模块设 计完成后,就该给每个模块绘制流程图了。流程图要简单,容易理解,多用中文。 不宜写过长的代码,增加理解难度。流程图与模块枝干图均可用绘图软件绘制, 可适当加些背景色,用以区分。此外,流程图应容易转换成代码。绘制好了流程 图,就要编写代码了。直接在tc环境里输入代码,然后运行测试,检查错误,最 终,将设计出可行的程序。 1.2、简要说明 开始时以界面形式选择快速,中速,慢速,点击回车进入游戏。 以快速为代表,为其设定一个变量,其延时为 30000,设定的延时为蛇每前进一步到下一 步的相隔时间,并且设定的分数为 3 分,这样,蛇就能以 30000 单位的延时和 3 分的游戏规则 进行游戏。慢速和中速一次类推。 在蛇不停的情况下,蛇的每后一节会到达蛇的前一节,依次类推,就是蛇不停的移动。 在靠近界面有围栏,画出围栏,并记录其坐标,蛇头一旦到达这个坐标,即判断蛇死; 并且从蛇的第 4 节开始判断蛇头的位置是否与其相等,如果是的话,也判断蛇死,退出游戏。 通过对蛇头的 x.y 坐标的加减蛇的宽度,可以用上下左右键来进行游戏,并且判断是否 反方向移动。 食物的坐标用随机数产生,但通过取余再加的方法使之处于围栏的范围之内,并且在坐 标的整十的倍数上,保证蛇头能与之相等。 当蛇头的坐标等于食物的坐标时,即蛇吃到了食物,此时,增加的一节暂时没有显现出 来,当下一步时在末尾加上一节即可。 当蛇死之后,在屏幕上显示“game over”,表示游戏结束,显示分数后,退出。 2.设计要求 外观为矩形,食物随机产生,添加注释,统计得分、每吃到一个食物获得相 应分数。蛇碰到自己或墙壁,游戏均结束。游戏结束时输出得分。画出模块枝干 图与每个模块的程序流程图。修改某些代码,改变其外观及功能。 游戏操作应尽量简单。 界面美观,让人看了觉得舒服。 3、系统分析与模块设计 山东交通学院 2011 年度课程设计 2 3.1、算法设计 玩游戏过程采用递归算法,由while(1)控制循环过程,可使游戏重复玩,在蛇 死之前不停的玩。判断蛇死的算法是通过判断蛇有没有碰到自己及墙壁。使蛇向前 移动采用递归算法,通过递归将蛇的每一节依次向前移动,横坐标与纵坐标依次向 前赋值,从而达到使蛇前移的目的。蛇的前进方向通过if结构判断。 3.2、数据结构 蛇与食物信息分别用两个结构体存储与表示。将食物的横坐标x、纵坐标y和判断 是否要出现食物的变量yes分别作为食物的结构体的成员。蛇的横坐标数组xn,纵坐 标数组yn,蛇的节数node,蛇的移动方向direction、蛇的生命life分别作为蛇的 结构体的成员。结构体内每个成员的存储类型均为整型。 3.3、模块设计 模块应具有高内聚性,低耦合性。这样,程序运行才更稳定,效率更高。 据功能将贪吃蛇游戏划分成四个大模块,九个小模块。每个模块均具有自己的 功能,而且,比较容易画出各个模块的流程图。 3.4、模块枝干图 简要说明:图形驱动即完成初始化图形系统功能;开始画面模块的主要作用是根据设置绘制出玩游 戏区域四周的墙壁;玩游戏的过程是游戏此游戏程序的核心,又可细分为好多小的功能模块;其中, 显示食物模块仅完成显示食物功能;蛇前移模块即通过递归算法实现蛇的向某方向移动;判蛇死模 块的功能是通过判断蛇是否碰到自己或墙壁来判断蛇有没有死亡。吃到食物后小模块只有蛇吃到食 物后才起作用。即当蛇吃到食物后,蛇自身延长一节并绘出蛇,同时加 10 分。通过键盘操控来玩 山东交通学院 2011 年度课程设计 3 游戏主要由判反向移动模块完成,即当蛇不是反向移动时,按照键盘上方向键指示移动。游戏结束 模块功能简单,仅完成输出得分与提示语功能。最后图形结束模块完成关闭图形功能。 4、程序流程图 4.1、图形驱动 4.2、开始画面 山东交通学院 2011 年度课程设计 4 4.3、 显示食物 山东交通学院 2011 年度课程设计 5 4.4、 蛇向前移动 山东交通学院 2011 年度课程设计 6 4.5、 判蛇死 山东交通学院 2011 年度课程设计 7 4.6、 吃到食物后处理 山东交通学院 2011 年度课程设计 8 4.7、 判蛇反向移动 山东交通学院 2011 年度课程设计 9 4.8、 游戏结束 山东交通学院 2011 年度课程设计 10 4.9、 图形结束 5、程序设计及关键源代码 /*函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用 */ #define n 200/宏定义 #include /tc 中特有的与图形有关的函数 #include /标准库函数 山东交通学院 2011 年度课程设计 11 #include /包含很多 bios 调用函数 #define left 0x4b00/键盘扫描码 #define right 0x4d00/键盘扫描码 #define down 0x5000/键盘扫描码 #define up 0x4800/键盘扫描码 #define esc 0x011b/键盘扫描码 int i,key; int score=0;/*得分*/ int gamespeed=0;/*游戏速度自己调整*/ int choice=0; struct food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ food;/*食物的结构体*/ struct snake int xn; int yn; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0 活着,1 死亡*/ snake; /*蛇的结构体*/ void init(void);/*图形驱动*/ void close(void);/*图形结束*/ void drawk();/*开始画面*/ void gameover(void);/*结束游戏*/ void gameplay(void);/*玩游戏具体过程*/ void prscore(void);/*输出成绩*/ void speed(void); void get(void); /*主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明, 然后初始化图形系统,调用函数 drawk()画出开始画面,调用函数 gameplay(), 即玩游戏的具体过程,游戏结束后调用 close()关闭图形系统,结束程序 */ 山东交通学院 2011 年度课程设计 12 void main(void) speed(); init();/*图形驱动*/ drawk();/*开始画面*/ gameplay();/*玩游戏具体过程*/ close();/*图形结束*/ void speed(void) printf(“*welcome into the greesnake game*n“); printf(“choice 1 is slownchoice 2 is middlenchoice 3 is quicknyour choice:“); scanf(“%d“, if(choice=1) gamespeed=50000; if(choice=2) gamespeed=40000; if(choice=3) gamespeed=30000; /*图形驱动*/ void init(void) int gd=detect,gm; /*宏定义,当 gd 为 0 时,自动检测显卡,不需要自己赋值*/ initgraph( /*gd 为图形驱动器,gm 为图形模式*/ cleardevice(); /*清屏*/ /*主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续 的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为绿色。 */ /*开始画面,左上角坐标为(50,40) ,右下角坐标为(610,460)的围墙*/ void drawk(void) /*setbkcolor(lightgreen);*/ 山东交通学院 2011 年度课程设计 13 setcolor(11); setlinestyle(solid_line,0,thick_width);/*设置线型*/ for(i=40;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的 关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*1,2,3,4 表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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; 山东交通学院 2011 年度课程设计 15 for(i=3;i595|snake.y0455)/*蛇是否撞到墙壁*/ gameover();/*本次游戏结束*/ snake.life=1; /*蛇死*/ if(snake.life=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;/*画面上需要出现新的食物*/ get(); prscore();/*输出新得分*/ setcolor(4);/*画出蛇*/ for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ 山东交通学院 2011 年度课程设计 16 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);/*接收按键*/ 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(red); settextstyle(0,0,4); outtextxy(200,200,“game over“); getch(); /*输出成绩*/ void prscore(void) 山东交通学院 2011 年度课程设计 17 char str10; setfillstyle(solid_fill,yellow); bar(50,15,220,35); setcolor(6); settextstyle(0,0,2); sprintf(str,“score:%d“,score); outtextxy(55,20,str); /*图形结束*/ void close(void) getch();/*getch()观察屏幕输出*/ closegraph(); 6、运行结果分析 通过运行,我对自己的设计比较满意。运行结果正如我所料,此贪吃蛇游戏具 有易操作性及充满活力的外观。 截图及描述: 山东交通学院 2011 年度课程设计 18 第一个开始 dos 界面 山东交通学院 2011 年度课程设计 19 图 6-1 开始画面 此图为开始画面图,蛇有三节,墙壁颜色为绿色,显得较有活力。 山东交通学院 2011 年度课程设计 20 图 6-2 蛇吃到两个食物后 蛇吃到食物后,得分为 2 分,蛇延长两节。 山东交通学院 2011 年度课程设计 21 图 6-3 游戏结束画面 7、实习心得 为了提高我们的实践能力,让我们学以致用,能灵活运用所学的知识进行再创造,学校 特安排我们进行为期一周的 visual c+课程设计实习,并安排了指导老师帮助辅导,让我们在 规范化、严谨化、实用化上面有了很大进展。 在此次字符统计程序开发过程中,有很多东西值得我们思考并总结。 开发过程大体可分为以下几个步骤: (1)思考总体设计方案:总体结构和模块外部设计,功能分配。思考要实现整个程序大 体需要的几个模块和其中用到的 visual c+语言基本操作符、语句等。 (2)画出总体设计方案流程图:用流程图的形式展现你的基本编程思想。 (3)流

温馨提示

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

评论

0/150

提交评论