课程设计贪吃蛇小游戏程序设计.docx
- 文档编号:14898203
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:13
- 大小:95.18KB
课程设计贪吃蛇小游戏程序设计.docx
《课程设计贪吃蛇小游戏程序设计.docx》由会员分享,可在线阅读,更多相关《课程设计贪吃蛇小游戏程序设计.docx(13页珍藏版)》请在冰点文库上搜索。
课程设计贪吃蛇小游戏程序设计
信息技术学院本科课程设计报告
课程设计题目
学生姓名:
李雪
学院:
信息技术学院
专业:
信息治理与信息系统
班级:
B1102
学号:
0911110201
指导教师:
王浩涌
完成日期:
辽东学院
EasternLiaoningUniversity
一、题目(问题)描述
贪吃蛇小游戏程序设计
图1贪吃蛇系统界面
二、功能分析
贪吃蛇游戏是一个经典小游戏,一条蛇在封锁围墙里,围墙里随机显现一个食物,通过按键盘四个光标键操纵蛇向上下左右四个方向移动,蛇头撞倒食物,那么食物被吃掉,蛇躯体长一节,同时记10分,接着又显现食物,等待蛇来吃,若是蛇在移动中撞到墙或躯体交叉蛇头撞倒自己躯体游戏终止。
三、系统设计
1.程序整体结构
图2贪吃蛇程序系统的构图
2.界面设计
如图,通过W、S、A、D、space键进行操作
3.输入方式设计
A用W、S、A、D、键操纵蛇的上下左右移动,space键停止,esc键终止。
B游戏目标:
操纵屏幕上那条可爱的小蛇,在方框中不断吃豆豆,而每吃一个豆豆,蛇的躯体都变的更长一些,即增加一颗星星。
游戏的难度也会随之加大。
C游戏终止:
终止条件1——蛇头撞到墙上;终止条件2——蛇身形成一个圈,也确实是蛇头碰着自身的任何一处
4.重要数据的数据结构设计
5.函数设计
6.函数挪用图
7.实体属性图
四、关键技术、难点及其解决方式
五、测试方式
六、总结
附录1
程序源代码
#include
#include
#include
#include
#include
#include
#defineN21
intapple[3];
charscore[3];
chartail[3];
voidgotoxy(intx,inty)//输出坐标
{
COORDpos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
voidcolor(intb)//颜色函数
{
HANDLEhConsole=GetStdHandle((STD_OUTPUT_HANDLE));
SetConsoleTextAttribute(hConsole,b);
}
intBlock(charhead[2])//判定出界
{
if((head[0]<1)||(head[0]>N)||(head[1]<1)||(head[1]>N))
return1;
return0;
}
intEat(charsnake[2])//吃了苹果
{
if((snake[0]==apple[0])&&(snake[1]==apple[1]))
{
apple[0]=apple[1]=apple[2]=0;
gotoxy(N+44,10);
color(13);
printf("%d",score[0]*10);
color(11);
return1;
}
return0;
}
voidDraw(char**snake,intlen)//蛇移动
{
if(apple[2]){
gotoxy(apple[1]*2,apple[0]);
color(12);
printf("●");
color(11);
}
gotoxy(tail[1]*2,tail[0]);
if(tail[2])
{color(14);
printf("★");
color(11);
}
else
printf("■");
gotoxy(snake[0][1]*2,snake[0][0]);
color(14);
printf("★");
color(11);
putchar('\n');
}
char**Move(char**snake,chardirx,int*len)//操纵方向
{
inti,full=Eat(snake[0]);
memcpy(tail,snake[(*len)-1],2);
for(i=(*len)-1;i>0;--i)
memcpy(snake[i],snake[i-1],2);
switch(dirx)
{
case'w':
case'W':
--snake[0][0];break;
case's':
case'S':
++snake[0][0];break;
case'a':
case'A':
--snake[0][1];break;
case'd':
case'D':
++snake[0][1];break;
default:
;
}
if(full)
{
snake=(char**)realloc(snake,sizeof(char*)*((*len)+1));
snake[(*len)]=(char*)malloc(sizeof(char)*2);
memcpy(snake[(*len)],tail,2);
++(*len);
++score[0];
if(score[3]<16)
++score[3];
tail[2]=1;
}
else
tail[2]=0;
returnsnake;
}
voidinit(charplate[N+2][N+2],char***snake_x,int*len)//初始化
{
inti,j;
char**snake=NULL;
*len=3;
score[0]=score[3]=3;
snake=(char**)realloc(snake,sizeof(char*)*(*len));
for(i=0;i<*len;++i)
snake[i]=(char*)malloc(sizeof(char)*2);
for(i=0;i<3;++i)
{
snake[i][0]=N/2+1;
snake[i][1]=N/2+1+i;
}
for(i=1;i<=N;++i)
for(j=1;j<=N;++j)
plate[i][j]=1;
apple[0]=rand()%N+1;apple[1]=rand()%N+1;
apple[2]=1;
for(i=0;i { gotoxy(0,i); for(j=0;j { switch(plate[i][j]) { case0: color(12);printf("□");color(11);continue; case1: printf("■");continue; default: ; } } putchar('\n'); } for(i=0;i<(*len);++i) { gotoxy(snake[i][1]*2,snake[i][0]); printf("★"); } putchar('\n'); *snake_x=snake; } voidManual() { gotoxy(N+30,2); color(10); printf("按WSAD移动方向"); gotoxy(N+30,4); printf("按space键暂停"); gotoxy(N+30,8); color(11); printf("历史最高分为: "); color(12); gotoxy(N+44,8); printf("%d",score[1]*10); color(11); gotoxy(N+30,12); printf("你此刻得分为: 0"); } intFile_in()//取记录的分数 { FILE*fp; if((fp=fopen("C: \\tcs.txt","a+"))==NULL) { gotoxy(N+18,N+2); printf("文件不能打开\n"); exit(0); } if((score[1]=fgetc(fp))! =EOF); else score[1]=0; return0; } intFile_out()//存数据 { FILE*fp; if(score[1]>score[0]) {gotoxy(10,10); color(12); puts("闯关失败加油耶"); gotoxy(0,N+2); return0; } if((fp=fopen("C: \\tcs.txt","w+"))==NULL) { printf("文件不能打开\n"); exit(0); } if(fputc(--score[0],fp)==EOF) printf("输出失败\n"); gotoxy(10,10); color(12); puts("恭喜您打破记录"); gotoxy(0,N+2); return0; } voidFree(char**snake,intlen)//释放空间 { inti; for(i=0;i free(snake[i]); free(snake); } intmain(void) { intlen; charch='g'; chara[N+2][N+2]={{0}}; char**snake; srand((unsigned)time(NULL)); color(11); File_in(); init(a,&snake,&len); Manual(); while(ch! =0x1B)//按ESC终止 { Draw(snake,len); if(! apple[2]){ apple[0]=rand()%N+1; apple[1]=rand()%N+1; apple[2]=1; } Sleep(200-score[3]*10); setbuf(stdin,NULL); if(kbhit()) { gotoxy(0,N+2); ch=getche(); } snake=Move(snake,ch,&len); if(Block(snake[0])==1) { gotoxy(N+2,N+2); puts("你输了"); File_out(); Free(snake,len); getche(); exit(0); } } Free(snake,len); exit(0); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 贪吃 小游戏 程序设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)