logo资料库

贪吃蛇程序课程设计报告.doc

第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
资料共19页,剩余部分请下载后查看
1 需求分析
2 系统分析和设计
2.1 数据结构的设计和选择的理由
2.2 系统模块划分和模块结构
2.3 流程图
2.4 数据类型、全局变量和函数说明
3 程序测试和运行结果
4 课程报告小结
4.1分数重叠显示
4.2速度太快
4.3食物可能出现在蛇身上
附录A:程序源代码
《计算机程序设计》课程设计报告 课 题 名 称 贪吃蛇游戏 班 学 姓 级 号 名 软件 1 班 090610114 罗斌 指 导 教 师 宋东兴 设 计 时 间 11/1/1 至 11/1/3 设 计 地 点 常熟理工学院 常熟理工学院计算机科学与工程学院
常熟理工学院计算机科学与工程学院 目录 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
常熟理工学院计算机科学与工程学院 3 程序测试和运行结果 ----------------------------------------------------------------------------选择速度开始或退出 ----------------------------------------------------------------------------------------游戏运行中
《C 程序设计》课程设计 --------------------------------------------------------------------------------------------------------游戏结束 4 课程报告小结 【遇到的问题及解决方法分析等】 4.1 分数重叠显示 解决方法:每次都用一块黑的矩形覆盖 setfillstyle(1,16); bar(45,45,150,80); 4.2 速度太快 解决方法:循环 delay for(d=0;d<4;d++) delay(GAME_SPEED); 4.3 食物可能出现在蛇身上 解决方法:依次判断,若重叠则重新生成食物 void createFood() { int i; label: food.position.x=left+10*((int)rand()%11); food.position.y=top+10*((int)rand()%11); for(i=0;i<=snake.length-1;i++){ if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y) goto label; 5
常熟理工学院计算机科学与工程学院 } 附录 A:程序源代码 neolone(LB)*/ /*writer: #include #include #include #include #include #include #include #define TRUE 1 #define FALSE 0 #define UP 0x4800 #define DOWN 0x5000 #define LEFT 0x4B00 #define RIGHT 0x4D00 #define ESC 0x011B #define SPEED1 0x0231 #define SPEED2 0x0332 #define SPEED3 0x0433 #define QUIT 0x0B30 #define ENTER 0x1C0D #define MAX_LENGTH 100 #define GAME_SPEED 100 /* max length of snake nodess */ /* game speed */ /* data structure */ struct Point { }; struct Snake { int x, y; struct Point nodes[MAX_LENGTH]; int length; int direction; int live; } snake; struct Food { struct Point position;
分享到:
收藏