ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:159.96KB ,
资源ID:9954070      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9954070.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告模板.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

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

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

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

6、fine MAXNOD 500 #define UP 1 #define DOWN -1 #define LEFT -2 #define RIGHT 2 #define YES 1#define NO 0 jmp_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(int x, int y) /界

7、面光标位置 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,0,MA

8、XNOD); 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

9、 boundary() /边界及界面的显示 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(左

10、: A); gotoxy(62,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

11、(ttttGame Over! nttPress 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

12、=YES; void start() char s; system(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; i

13、nt i,j,dire; char ctrl; srand(unsigned)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.di

14、rection=(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

15、: ss.pxss.nodlen-1=ss.pxss.nodlen-1-1; break; case RIGHT: ss.pxss.nodlen-1=ss.pxss.nodlen-1+1; for(i=0;iss.nodlen;i+) gotoxy(ss.pxi+16,ss.pyi+4); cprintf(%c,2); isdead(ss); if (ss.pxss.nodlen-1=foo.x&ss.pyss.nodlen-1=foo.y) for (j=0;jss.nodlen;j+) ss.pxss.nodlen-j=ss.pxss.nodlen-j-1; ss.pyss.nodlen-

16、j=ss.pyss.nodlen-j-1; ss.score +=10; ss.nodlen+; foo.status=NO; getscoresys(ss); system(cls); /清除屏幕 flushall(); /清除所有缓冲区 while(1); int main() /贪吃蛇游戏的主函数 start(); /开始界面,关卡选择 play(); 4、调试分析 开始界面:游戏进程:暂停界面:游戏结束:5、不足和改进不足1:蛇运行速度过快或过慢。 解决方案:设置一个可调变量,使得可以根据个人喜好改变速度。不足2:程序开始运行时,会出现蛇与随机出现的食物重叠的情况。 解决方案:去除掉食

17、物随机输出时与蛇重叠位置的食物的输出。不足3:纵向边界无法封闭,有间距。 解决方案:暂无。不足4:蛇死了之后无法跳回最初程序继续执行。 解决方案:使用库函数的非局部跳跃函数实现操作。3.算法改进设想:我希望在该程序中使蛇变为可实现变速的,即吃掉一个食物速度加快一定的值;另外希望该程序可以实现选择关卡的能力;还有希望该程序可以进行全屏模式。三、 设计收获及心得体会(1).收获通过这次的课程设计我收获了许多,也更加让我认识到数据结构这门课程的重要,同时也巩固和加深了我对数据结构的理解,提高了综合利用本课程所学知识的能力。另外还培养了我独立思考,深入研究,分析问题,解决问题的能力,以及查阅文献资料的

18、能力,并且提高了我调试程序和对编译器使用的能力。通过这次的课程设计,也培养了我严肃认真的工作作风,以及团队协作的意识和能力。此外,通过这次的课程设计也使我理解了之前在数据结构课上没能理解的一些问题,使我认识到理论来源于实践,实践是检验真理的唯一标准。(2).心得体会 通过这次的课程设计,不仅让我在知识上得到了很大程度的提高,认识到数据结构对我们这个专业的重要性,而且在精神上也使我丰收甚多,让我清楚的认识到学无止境。这次当程序成功运行时我激动的心情其他人很难理解,而其中的挫折也只有我一个人深有体会,这次的课程设计经历让我感受很多,也让我受益匪浅,我相信在以后的课程设计中我会更加自信,也会更加高质量的完成。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1