贪吃蛇实验报告

更新时间:2023-09-13 03:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《计算机程序设计》课程设计报告

课 题 名 称 贪吃蛇游戏 班 级 学 号 姓 名 指 导 教 师 设 计 时 间 至 设 计 地 点

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

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

目录

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

本文来源:https://www.bwwdw.com/article/xiih.html

Top