贪吃蛇实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《计算机程序设计》课程设计报告课题名称贪吃蛇游戏

班级

学号

姓名

指导教师

设计时间至

设计地点

常熟理工学院计算机科学与工程学院

常熟理工学院计算机科学与工程学院

目录

1 需求分析 (1)

2 系统分析和设计 (1)

2.1 数据结构的设计和选择的理由 (1)

2.2 系统模块划分和模块结构 (2)

2.3 流程图 (2)

2.4 数据类型、全局变量和函数说明 (3)

3 程序测试和运行结果 (4)

4 课程报告小结 (5)

4.1分数重叠显示 (5)

4.2速度太快 (5)

4.3食物可能出现在蛇身上 (5)

附录A:程序源代码 (6)

《C程序设计》课程设计

1 需求分析

【阐述课程设计应该完成的功能】

使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

2 系统分析和设计

2.1 数据结构的设计和选择的理由

本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。

2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例:

struct Point {

int x, y;

}

struct Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长

贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:

1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示)

2. 运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。

3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示)

根据上面的情况,我们可以设计蛇的数据结构如下:

struct Snake {

struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。MAX_LENGTH 为最大蛇长

int length; //当前蛇长

int direction; //蛇头运动方向

int live; //蛇活的,还是已经死了?

}

2.1.2 关于食物,有两个属性:

1. 坐标位置

2. 状态:存在,或被吃。

故我们用以下结构表示:

struct Food {

struct Point position; //食物的位置

int exist; //存在?还是被吃?

}

1

常熟理工学院计算机科学与工程学院

2.2 系统模块划分和模块结构

void main() {

init(); /*初始化*/

l=1;

while(l) /*循环游戏*/

{

select(); /*游戏速度和结束的选择菜单*/

gamePlay(); /*游戏主程序*/

}

close(); /*关闭游戏*/

}

2.3 流程图

《C程序设计》课程设计

2.4 数据类型、全局变量和函数说明

2.4.1数据类型

struct Point { /*一个存放点坐标的结构体*/ int x, y; /*被多个结构体调用的基本参数,所以统一用point结构体来表示*/ };

struct Snake { /*用来模拟蛇状态的结构体*/ struct Point nodes[MAX_LENGTH]; /*用来存放蛇每一节的位置*/ int length; /*蛇长*/

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

int live; /*蛇是否活着*/

} snake;

/*比较形象的把蛇抽象为一个数据类型*/ struct Food { /*用来模拟食物状态的结构体*/ struct Point position; /*食物的位置*/

int exist; /*食物是否存在*/

} food;

2.4.2全局变量

Score \\得分

left,top,right,bottom \\游戏区域范围

lastx,lasty \\用来保存最后一节蛇的位置keyCode \\用来保存按下的键

2.4.3函数说明

void init(void); \\初始化程序,给一些初始值赋值void gamePlay(void); \\游戏主循环

void close(void); \\关闭游戏

void drawWall(void); \\画墙

void createFood(void); \\创造一个食物

void drawFood(void); \\画出食物

void drawSnake(void); \\画出蛇

void drawScore(void); \\画出分数

int touchWall(void); \\判断是否碰到墙

int touchSelf(void); \\判断是否碰到自己

void gameOver(void); \\游戏结束

void moveSnake(void); \\移动蛇

int oppositeDirection(int keyCode); \\判断是否方向有误

int foodEat(void); \\判断是否吃到食物

void expandSnake(void); \\把蛇增长一节

3

相关文档
最新文档