数据结构课程设计报告模板

上传人:s9****2 文档编号:477330775 上传时间:2023-10-04 格式:DOC 页数:12 大小:204KB
返回 下载 相关 举报
数据结构课程设计报告模板_第1页
第1页 / 共12页
数据结构课程设计报告模板_第2页
第2页 / 共12页
数据结构课程设计报告模板_第3页
第3页 / 共12页
数据结构课程设计报告模板_第4页
第4页 / 共12页
数据结构课程设计报告模板_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《数据结构课程设计报告模板》由会员分享,可在线阅读,更多相关《数据结构课程设计报告模板(12页珍藏版)》请在金锄头文库上搜索。

1、游戏初始界面贪吃蛇程序设计设计课题贪吃蛇程序设计设计内容否是否它死亡是是继续1.工作说明(1) 实现贪吃蛇小游戏的运行,各功能模块分别为食物类型的定义,蛇类型的定义, 界面光标位置的显示,蛇的初始化,计分方向控制的显示,边界及界面的显示,食 物的输出,控制蛇的死亡,游戏的实现过程等等。以字符形式输入数据,控制程序的运行,通过ASCII码的转换输出边界、食物、 蛇形等界面,并通过字符形式输出分数,操作控制方式,等具体界面显示内容。(2)否结束(3) 所用到的数据结构的知识及相关数据结构的描述形式数据类型的表示及实现, 算法和算法分析, 线性表的链式表示和实现, 数组的 顺序表示,动态存储管理等。

2、(4) 函数介绍a 界面光标位置函数:控制界面光标位置,为显示边界、食物等界面显示内容提供 依据。b. 方向控制函数:通过键盘输入指定字母实现对蛇移动方向的控制。c. 初始化蛇函数:通过链表方式显示蛇的形象,并控制蛇的初始长度、初始移动方 向及初始分数。d. 边界及界面显示函数:通过引用界面光标位置函数,实现在指定位置输出上下左 右边界,显示操作方法。e. 计分显示函数:通过引用界面光标位置函数,实现在指定界面位置输出分数。f. 控制蛇的死亡函数:讨论当蛇碰到左右上下边界以及咬到自身等几种情况时,通 过引用库函数清除当前屏幕,再通过界面光标位置函数在指定位置输出 GameOver!、Press

3、 ESC to exit,any other key to retry!,接着通过选择是否继续游戏,如 果是,通过引用库函数中的跳跃函数,回到指定位置循环程序;如果否,则结束游 戏。g. 食物输出函数:通过引用库函数中的随机数函数随机输出食物,并当蛇吃到食物 时,控制蛇长度增长,同时使用递归函数循环输出食物。h. 游戏实现过程函数:调用以上函数,实现蛇的移动、增长、死亡的具体游戏实现 过程。(5) 函数的调用关系(1) 调用了 gotoxy ()函数的有:boundary()函数,getscoresys()函数,isdead()函数,play ()函数。(2) play()函数调用的函数有:g

4、otoxy()函数,boundary()函数,getscoresys()函数,isdead ()函数。(3) 主函数ma in ()调用了 play ()函数。3、任务实现(1) 在程序中,首先调用蛇的初始化函数 initialization() 得到蛇,再通过食物输出函 数getfood()随机输出一个食物,然后经过使用一个 do-while循环。在这个循环中先 调用边界及界面显示函数和界面光标位置函数控制边界及食物的显示,然后判断食 物是否被吃掉,如果是,那么继续输出食物;如果否,那么通过调用库函数 _kbhit() 输入使蛇移动的指令w、a s、d,以及当输入空格键时暂停程序,当输入 E

5、SC键时退出程序。接着通过判断蛇每吃到一次食物使蛇长度增加 1,然后继续通过一个 switch()循环不断控制蛇的移动方向,接着调用控制蛇死亡的函数isdead(),然后判断 当蛇每吃到一个食物分数加 10,长度加 1,食物消失,然后调用分数统计函数在界 面指定位置输出,最后调用库函数控制蛇的移动速度,完成整个屏幕和缓冲区的清 除。经过该 do-while 循环达到该程序中蛇的移动,蛇吃食物增长,分数增长等主要 主要部分功能的实现。 时间复杂度T (n) =0(nT)(3) 源代码#include stdio.h#include windows.h#include time.h#include

6、 setjmp.h#includeconio.h #define MAXN0D 500#define UP 1#define D0WN -1#define LEFT -2#define RIGHT 2#define YES 1#define N0 0jmp_buf retry; /定义 retry 为跳跃状态变量 typedef struct/定义食物类型 int x;int y;int status;Food;typedef struct / 定义蛇类型 int *px;int *py;int direction;int nodlen;int score;Snack;int gotoxy(i

7、nt x, int y)/ 界面光标位置 COORD cd;cd.X=x-12;cd.Y=y;return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd);void initialization(Snack *pss)/ 初始化蛇system(color 0a);pss-px=(int *)malloc(MAXNOD*sizeof(int);pss-py=(int *)malloc(MAXNOD*sizeof(int);/memset(pss-px,0,MAXNOD);/转换为 ASCII 码/memset(pss-py

8、,0,MAXNOD);pss-px0=0;pss-py0=0;pss-px1=1;pss-py1=0;pss-direction=RIGHT;pss-nodlen=2;pss-score=0;void getscoresys(Snack scr)/计分 gotoxy(62,7);cprintf( 分数 : %d,scr.score);int ctrltoi(char ctr)/方向的控制 switch(ctr) case w: return UP; case s: return DOWN;case a: return LEFT; case d: return RIGHT ;void bound

9、ary() int cnt,y;gotoxy(15,3);/边界及界面的显示for (cnt=0;cnt45;cnt+) cprintf(%c,31); gotoxy(15,20);for (cnt=0;cnt45;cnt+) cprintf(%c,30); for (y=4;y20;y+) gotoxy(15,y); cprintf(%c,16);gotoxy(59,y);cprintf(%c,17);gotoxy(62,9);cprintf( 上: W);gotoxy(62,10);cprintf( 下: S);gotoxy(62,11);cprintf( 左: A);gotoxy(62,

10、12);cprintf( 右: D);gotoxy(62,14);cprintf( 暂停 : 空格 );gotoxy(62,15);cprintf( 退出: ESC);int isdead(Snack ts)/蛇死 int i;char select;for(i=0;its.nodlen-1;i+)if(ts.pxi=ts.pxts.nodlen-1&ts.pyi=ts.pyts.nodlen-1)|(ts.pxts.nodlen-142)|(ts.pyts.nodlen-115) system(cls);gotoxy(15,12);cprintf(ttttGame Over! nttPres

11、s ESC to exit, any other key to retry!an); flushall();select=getch(); if(select=27) exit(0);system(cls); longjmp(retry,1);/跳到指定位置void getfood(Snack s,Food *pf)/ 输出食物 int i;cnt: do pf-x=rand()%43; pf-y=rand()%16;for (i=0;ix&s.pyi=pf-y) goto cnt; break;while(1); pf-status=YES;void start()char s;system

12、(color 0e);cprintf(nnnttt 欢迎来玩贪吃蛇经典小游戏! nn); cprintf(nnntttt 请选择关卡! ! nn);cprintf(tttt1 :简单 nn);cprintf(tttt2 :一般 nn);cprintf(tttt3 :困难 nn); s=getche();switch(s)case 1:_sleep(300);break;case 2:_sleep(250);break;case 3:_sleep(200);break;void play() Snack ss;Food foo;int i,j,dire;char ctrl;srand(unsig

13、ned)time(NULL);/设置随机数种子setjmp(retry);/跳跃函数initialization(&ss);getfood(ss,&foo);do boundary();gotoxy(foo.x+16,foo.y+4);if (foo.status=NO)getfood(ss,&foo);cprintf(%c,1);if(_kbhit() ctrl=getch();if (ctrl=w|ctrl=s|ctrl=a|ctrl=d) dire=ctrltoi(ctrl);if(ss.direction=(0-dire) ;else ss.direction=dire;else if (ctrl= )system(pause);else if (ctrl=27)exit(0);for (i=0;iss.nodlen-1;i+) ss.pxi=ss.pxi+1;ss.pyi=ss.pyi+1;switch(ss.direction) case UP: ss.pyss.nodlen-1=ss.pyss.nodlen-1-1; break; case DOWN: ss.pyss.nodlen-1=ss.pyss.nodlen-1+1; break; case LEFT: ss.pxss.nodlen-1=ss.pxss.nodlen-1-1; break; case RIG

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号