贪吃蛇游戏 实习报告

时间:2024.5.8

课程设计报告

贪吃蛇游戏设计

专业 电子信息工程

杜 运 福

B电子062

0610620224

曹 妍

20xx年8月30日 学生姓名 班学级 号 指导教师 完成日期

贪吃蛇游戏实习报告

贪吃蛇游戏实习报告

贪吃蛇游戏实习报告

贪吃蛇游戏实习报告

贪吃蛇游戏实习报告

盐城工学院本科生课程设计报告(2008)

贪吃蛇游戏设计

摘要:本设计主要围绕贪吃蛇游戏展开。众所周知,贪吃蛇游戏一直以来是比较流行的。传统的贪吃蛇游戏功能比较少,对蛇的控制仅限于向左转和向右转,而现在的贪吃蛇游戏已经发展的相当好;具有更多的功能和友好的界面。例如,最近流行的免费的3D版的贪吃蛇游戏,界面相当的美观,有很强的立体效果,真实感更强,食物也为立体的且颜色绚丽。在3D版贪吃蛇游戏里面,墙壁是真实的墙壁,障碍物比较多,如树、土丘等。此外,其功能更多更强,可以选择难度。不过,总而言之,3D版与传统的贪吃蛇游戏有共性,即娱乐性与益智性。这些也是贪吃蛇游戏的优点。

本人因水平有限,只能设计简单的贪吃蛇游戏。不过,在功能上,比传统贪吃蛇游戏更丰富。蛇可以反向运动,操作起来,显得更为灵活。界面的颜色选用绿色,不易使眼睛疲劳。

关键词:3D版;传统;灵活;

2

贪吃蛇游戏设计

目 录

1、 概述

1.1、用TC设计程序的方法

1.2、简要说明

2、设计要求

3、系统分析与模块设计

3.1、算法设计

3.2、数据结构

3.3、模块设计

3.4、模块枝干图

4、程序流程图

4.1、图形驱动

4.2、开始画面

4.3、显示食物

4.4、蛇向前移动

4.5、判蛇死

4.6、吃到食物后处理

4.7、判蛇反向移动

4.8、游戏结束

4.9、图形结束

5、程序设计及关键源代码

6、运行结果分析

7、实习心得

盐城工学院本科生课程设计报告(2008)

贪吃蛇游戏的设计

1 .概 述

1.1、用TC设计程序的方法

首先应了解设计要求,然后按照功能设计模块,每个模块完成特定的功能,要使模块间的耦合性小,内聚性高;设计模块是相当重要的一个环节。模块的数量不宜太多,也不宜太少,要使每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图了。流程图要简单,容易理解,多用中文。不宜写过长的代码,增加理解难度。流程图与模块枝干图均可用绘图软件绘制,可适当加些背景色,用以区分。此外,流程图应容易转换成代码。绘制好了流程图,就要编写代码了。直接在TC环境里输入代码,然后运行测试,检查错误,最终,将设计出可行的程序。

1.2、简要说明

我设计的贪吃蛇游戏具有很多独特性。例如,墙壁不用实体,而用中空的

墙,颜色为绿色,显得更美观,且不易使眼疲劳。操作上,做了些简化,游戏开始时便可以自动运行,且速度较快,属中等难度。玩游戏的过程相当简单,只需按键盘上的上下左右方向键,便可改变蛇的行进方向。食物随机产生。贪吃蛇吃到一个食物后便得到10分。得分显示在左上角。当蛇撞到墙壁或自己时,蛇死,游戏结束,输出得分。

2.设计要求

外观为矩形,食物随机产生,添加注释,统计得分、每吃到一个食物获得

10分。蛇碰到自己或墙壁,游戏均结束。游戏结束时输出得分。画出模块枝干图与每个模块的程序流程图。修改某些代码,改变其外观及功能。

游戏操作应尽量简单。

界面美观,让人看了觉得舒服。

3、系统分析与模块设计

3.1、算法设计

玩游戏过程采用递归算法,由WHILE(1)控制循环过程,可使游戏重复玩,

在蛇死之前不停的玩。判断蛇死的算法是通过判断蛇有没有碰到自己及墙壁。使蛇向前移动采用递归算法,通过递归将蛇的每一节依次向前移动,横坐标与纵坐标依次向前赋值,从而达到使蛇前移的目的。蛇的前进方向通过IF结构判断。

1

贪吃蛇游戏设计

3.2、数据结构

蛇与食物信息分别用两个结构体存储与表示。将食物的横坐标X、纵坐标Y和判断是否要出现食物的变量YES分别作为食物的结构体的成员。蛇的横坐标数组X[N],纵坐标数组Y[N],蛇的节数NODE,蛇的移动方向DIRECTION、蛇的生命LIFE分别作为蛇的结构体的成员。结构体内每个成员的存储类型均为整型。

3.3、模块设计

模块应具有高内聚性,低耦合性。这样,程序运行才更稳定,效率更高。 据功能将贪吃蛇游戏划分成四个大模块,九个小模块。每个模块均具有自己的功能,而且,比较容易画出各个模块的流程图。

3.4、模块枝干图

贪吃蛇游戏实习报告

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

4、程序流程图

4.1、图形驱动

2

盐城工学院本科生课程设计报告(2008)

贪吃蛇游戏实习报告

4.2、开始画面

3

贪吃蛇游戏设计

4.3、 显示食物

4

贪吃蛇游戏实习报告

盐城工学院本科生课程设计报告(2008)

4.4 、 蛇向前移动

贪吃蛇游戏实习报告

5

贪吃蛇游戏设计

4.5、 判蛇死

贪吃蛇游戏实习报告

6

盐城工学院本科生课程设计报告(2008)

4.6 、 吃到食物后处理

7

贪吃蛇游戏实习报告

贪吃蛇游戏设计

4.7、 判蛇反向移动

8

贪吃蛇游戏实习报告

盐城工学院本科生课程设计报告(2008)

4.8、 游戏结束

贪吃蛇游戏实习报告

9

贪吃蛇游戏实习报告

贪吃蛇游戏实习报告

贪吃蛇游戏设计

贪吃蛇游戏实习报告

4.9、 图形结束

5、程序设计及关键源代码

定义上下左右控制方向:

#define LEFT 0x4b00 #define RIGHT 0x4d00

10

盐城工学院本科生课程设计报告(2008)

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

设定游戏速度:

int gamespeed=60000;

用结构体定义食物与蛇:

struct Food

{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

int yes;/*判断是否要出现食物的变量*/ }food;/*食物的结构体*/

struct Snake

{

int x[N];

int y[N];

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

int life;/* 蛇的生命,0活着,1死亡*/ }snake;

主函数:

void main(void)

{

Init();/*图形驱动*/

DrawK();/*开始画面*/

GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/

}

图形驱动:

11

贪吃蛇游戏设计

void Init(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"c:\\tc");

cleardevice();

}

开始画面,左上角坐标为(50,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;i<=450;i+=10)

{

rectangle(50,i,59,i+10); /*左边*/

rectangle(611,i,620,i+10);/*右边*/

}

}

玩游戏具体过程:

void GamePlay(void)

{

randomize();/*随机数发生器*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.life=0;/*活着*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

12

盐城工学院本科生课程设计报告(2008)

snake.node=2;/*节数*/

PrScore();/*输出得分*/

while(1)/*可以重复玩游戏,压ESC键结束*/

{

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

{

if(food.yes==1)/*需要出现新食物*/

{

food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)/*使食物在整格内*/

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*画面上有食物了*/

}

if(food.yes==0)/*画面上有食物了就要显示*/

{

setcolor(BROWN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=snake.node-1;i>0;i--)/*蛇的每个环节前移动,关键算法*/ {

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction)

{

case 1:snake.x[0]+=10;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]+=10;break;

}

for(i=3;i<snake.node;i++)

13

贪吃蛇游戏设计

{

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

{

GameOver();/*显示失败*/

snake.life=1;

break;

}

}

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||

snake.y[0]>455)

{

GameOver();

snake.life=1; /*蛇死*/

}

if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break;

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

{

setcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

score+=10;

PrScore();/*输出新得分*/

}

setcolor(4);/*画出蛇*/

for(i=0;i<snake.node;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

snake.y[i]-10);

delay(gamespeed);

setcolor(0);/*用黑色去除最后一节*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

14

盐城工学院本科生课程设计报告(2008)

} /*endwhile(!kbhit)*/

if(snake.life==1)/*如果蛇死就跳出循环*/

break;

key=bioskey(0);/*接收按键*/

if(key==ESC)/*按ESC键退出*/

break;

else if(key==UP&&snake.direction!=4)

/*判断是否往相反的方向移动*/

snake.direction=3;

else if(key==RIGHT&&snake.direction!=2) snake.direction=1;

else if(key==LEFT&&snake.direction!=1) snake.direction=2;

else if(key==DOWN&&snake.direction!=3) snake.direction=4;

}/*endwhile(1)*/

}

游戏结束:

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(GREEN);

settextstyle(0,0,3);

outtextxy(200,200," Game over!Try!");

getch();

}

输出成绩:

void PrScore(void)

{

char str[10];

15

贪吃蛇游戏设计

setfillstyle(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 开始画面

此图为开始画面图,蛇有三节,墙壁颜色为绿色,显得较有活力。

16

盐城工学院本科生课程设计报告(2008)

图6-2 蛇吃到两个食物后

蛇吃到食物后,得分为20分,蛇延长两节。

贪吃蛇游戏实习报告

图6-3 游戏结束画面

贪吃蛇游戏实习报告

17

贪吃蛇游戏设计

7、实习心得

在大一学习期间,我就知道在大二暑假期间,有程序设计实习。从那时起,我就期盼着这一天早点到来。只因我对编程有浓厚的兴趣。我是我们班第一个通过江苏省计算机VB二级考试的。我的VC++成绩也还可以。

转眼间,程序设计实习就如期而至了。实习的第一天是充满好奇与兴趣,当实习回来时,就感觉得这次实习并非想象中的那样。我本以为,程序设计实习应该是开放性的,让我们参照某些课题,自主、自由地设计程序。我想,那样更能促进我们学习和提高我们的动手能力。

这次实习中,我们都被给了程序的源码,而且有详细的功能说明。表面上看,我们几乎不需什么努力就能完成,而实际上,并非如此。因为那些程序大多是基于16位DOS执行的,并且,里面包含许多DOS下图形处理的函数,我从未涉及过,所以,很难看懂代码,即使有那样详细的注释。

通过坚持上机实习,我对代码的认识越来越多。我还上网找了些资料,如TC函数详解等等。我更多的了解了各种TC函数的功能。我通过一步步的学习,终于弄懂了整个程序,并且对程序做了些修改。如外观、大小、输出成绩等。通过修改程序代码增加游戏的功能,我也从中获得了自信。

通过使用Win-TC1.9设计程序,我更多的了解了TC函数的功能与用法,也了解了在TC环境下调用DOS绘图及处理的常用方法。

在上机实习的过程中,还绘制了模块枝干图与程序流程图,我感觉到,画模块枝干图并不是件容易的事。只有在弄懂程序后才能将整个程序划分成数量适宜的模块。划分模块确实挺重要的,原来我将玩游戏过程划为一个模块,后来发现太复杂,很难画出流程图。模块的数量直接关系到绘制程序流程图的难度。从中,我更深入了解了程序设计的整个过程,这也是我最受益的地方。

在实习过程中,遇到不懂的问题,时而查阅以前学过的书籍,也等于我做了复习。这也能提高我将理论付诸实践的能力。

此外,实习期间,你将我们划分成小组;这促进了我们的相互合作与相互学习。 总之,通过这次实习,我学到了好多书本以外的知识!

我同样很感谢老师,您!

参考文献

[1] 张岳新《Visual C++程序设计》。

[2] 张岳新《Visual C++程序设计基础实验指导书》。

[3]沈被娜 刘祖照 《计算机软件技术基础》

18

更多相关推荐:
网游公司实习报告

目录前言21公司简介22实习收获321在学习中成长322在工作中蜕变7第1页前言四年的大学时光匆匆而过我也即将结束自己的大学生活跨入这个竞争激烈的社会为了使自己能尽快的适应新的工作和生活做好从学院人向职业人的转...

游戏实习专题总结

——谈谈我的第一次游戏黄露37号10学前502班两个星期的游戏实习转眼间就结束了,脑海里却还浮现着刚入幼儿园的情景。总的来说,在幼儿园的这两周实习中,让我得到了一次较全面、系统的锻炼,也学到了许多书本上所学不到…

网络公司实习报告

实习报告学院名称:专业班级:学号:学生姓名:实习地点:实习日期:公司年月日******************************xxxxxxxxxx一、实习目的:初踏社会,心情比较激动、还有些许紧张。激动…

关于~~公司从事游戏美术岗位的实习报告

关于在××公司从事游戏美术岗位的实习报告一、实习单位及岗位简介(一)实习单位的简介(公司详细介绍)公司致力于美术外包,并为电影长片、电视动画剧和计算机游戏等平台提供专业的动画和3D服务。从Concept设计到建…

俄罗斯方块游戏开发实习报告

本科中期实习报告姓名学号专业软件工程院系指导教师完成日期20xx年12月25日西安财经学院教务处制俄罗斯方块小游戏开发实习报告俄罗斯方块是个老幼皆宜的小游戏它的实现由四块正方形的色块组成然后存储在一个数组的元素...

网络游戏开发实训报告

湖北民族学院信息工程学院实训报告课程网络游戏开发实训题目基于VC++的网络五子棋游戏系别计算机系专业数字媒体姓名**学号**指导教师**20**年6月25日一、实训目的1.掌握网络游戏程序设计的相关知识2.理解…

毕业实习报告-

河南理工大学河南理工大学毕业实习报告实习单位实习时间20xx年3月9号至20xx年3月27号学院系电气工程与自动化学院专业电子信息科学与技术学生姓名学号20xx年3月25日1河南理工大学目录1实习目的32实习单...

扫雷游戏 实践设计报告

题目学院职业技术学院专业计算机科学与技术班级计科职112班学号1120xx0363学生姓名毛朋艺20xx年7月2号目录第一章设计目的3第二章需求分析421硬件环境422软件环境423扫雷游戏概述4231扫雷的操...

文字游戏和通讯录的实习报告(含源代码)

淮阴工学院PROJECT1课程设计报告姓名学院班级题目学号计算机工程学院组号1文字游戏的设计与实现通讯录的设计与实现20xx年12月课程设计选题表教师签章日课程设计评语学生姓名学号班级组号1PROJECT1题目...

c语言组数游戏程序设计实习报告

C程序设计实习报告题目组数游戏学院专业姓名班级学号指导教师目录第一章题目要求11要求12提示第二章需求分析第三章概要分析31系统结构图32软件运行开发平台33设计思想第四章详细设计41主函数42结构体43各功能...

经济管理课程实习报告

溜溜溜冰场班级07热工02班姓名胡帆学号20xx10610202指导老师冯炳右时间20xx年12月25日景德镇陶瓷学院目录一项目简介和背景3二项目设想3三市场营销分析3四管理体系5五财务分析52溜冰场可行性报告...

20xx实习报告

中国石油大学华东计通学院软件编程实践实习报告题目我的20xx20xx年7月一题目介绍包括题目背景简介系统达到目标等20xx是一款比较流行的数字游戏最早于20xx年3月20日发行原版20xx首先在GitHub上发...

游戏实习报告(32篇)