完整word版贪吃蛇实验报告.docx

上传人:b****0 文档编号:16921760 上传时间:2023-07-19 格式:DOCX 页数:57 大小:79.51KB
下载 相关 举报
完整word版贪吃蛇实验报告.docx_第1页
第1页 / 共57页
完整word版贪吃蛇实验报告.docx_第2页
第2页 / 共57页
完整word版贪吃蛇实验报告.docx_第3页
第3页 / 共57页
完整word版贪吃蛇实验报告.docx_第4页
第4页 / 共57页
完整word版贪吃蛇实验报告.docx_第5页
第5页 / 共57页
完整word版贪吃蛇实验报告.docx_第6页
第6页 / 共57页
完整word版贪吃蛇实验报告.docx_第7页
第7页 / 共57页
完整word版贪吃蛇实验报告.docx_第8页
第8页 / 共57页
完整word版贪吃蛇实验报告.docx_第9页
第9页 / 共57页
完整word版贪吃蛇实验报告.docx_第10页
第10页 / 共57页
完整word版贪吃蛇实验报告.docx_第11页
第11页 / 共57页
完整word版贪吃蛇实验报告.docx_第12页
第12页 / 共57页
完整word版贪吃蛇实验报告.docx_第13页
第13页 / 共57页
完整word版贪吃蛇实验报告.docx_第14页
第14页 / 共57页
完整word版贪吃蛇实验报告.docx_第15页
第15页 / 共57页
完整word版贪吃蛇实验报告.docx_第16页
第16页 / 共57页
完整word版贪吃蛇实验报告.docx_第17页
第17页 / 共57页
完整word版贪吃蛇实验报告.docx_第18页
第18页 / 共57页
完整word版贪吃蛇实验报告.docx_第19页
第19页 / 共57页
完整word版贪吃蛇实验报告.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

完整word版贪吃蛇实验报告.docx

《完整word版贪吃蛇实验报告.docx》由会员分享,可在线阅读,更多相关《完整word版贪吃蛇实验报告.docx(57页珍藏版)》请在冰点文库上搜索。

完整word版贪吃蛇实验报告.docx

完整word版贪吃蛇实验报告

 

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

 

课题名称贪吃蛇游戏

 

班级

 

学号

 

姓名

 

指导教师

 

设计时间至

 

设计地点

 

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

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

 

1

需求解析...................................................................................

1

2

系统解析和设计......................................................................

1

数据构造的设计和选择的原因......................................

1

系统模块区分和模块构造..............................................

2

流程图..............................................................................

2

数据种类、全局变量和函数说明..................................

3

3

程序测试和运转结果..............................................................

4

4

课程报告小结..........................................................................

5

分数重叠显示...................................................................

5

速度太快...........................................................................

5

食品可能出此刻蛇身上...................................................

5

附录A:

程序源代码...................................................................

6

《C程序设计》课程设计

 

1需求解析

【论述课程设计应当达成的功能】

使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

 

2系统解析和设计

2.1数据构造的设计和选择的原因

本游戏中波及的主要数据构造是怎样表示运动的蛇、食品状态等问题。

2.1.1从游戏参照画面中我们能够看到,贪吃蛇的身体是一节节的,由一个个大小同样的方

块构成,那么我们能够用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。

为表示连续的多节身体,那么我们能够采纳数组(或链表,或线性表)等数据构造来表示。

下边以数组方式为例:

structPoint{

intx,y;

}

 

structPointnodes[MAX_LENGTH];//蛇身数组,MAX_LENGTH为最大蛇长

 

贪吃蛇是在不停的运动的,我们研究蛇的运动能够发现这样的特色:

1.蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用intdirection;表示)

2.运动时,蛇身后边一节挪动到前面一节的地点。

当我们用nodes[0]表示蛇头的时候,nodes[1]

运动到nodes[0]处;nodes[2]运动到nodes[1]处...。

3.吃到一个食品此后,蛇身会增添一节。

即该数组中的有效数据个数加一。

(用intlength;

表示)

 

依据上边的状况,我们能够设计蛇的数据构造以下:

structSnake{

structPointnodes[MAX_LENGTH];//蛇身数组,保留每节蛇身的坐标。

MAX_LENGTH

为最大蛇长

intlength;//目前蛇长

intdirection;//蛇头运动方向

intlive;//蛇活的,仍是已经死了?

}

 

2.1.2对于食品,有两个属性:

1.坐标地点

2.状态:

存在,或被吃。

故我们用以下构造表示:

structFood{

structPointposition;//食品的地点

intexist;//存在?

仍是被吃?

}

 

1

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

 

2.2系统模块区分和模块构造

voidmain(){

init();

/*初始化*/

l=1;

while(l)

/*循环游戏

*/

{

select();

gamePlay();

/*游戏速度和结束的选择菜单

/*游戏主程序*/

*/

}

close();

/*封闭游戏

*/

}

2.3流程图

《C程序设计》课程设计

 

2.4数据种类、全局变量和函数说明

2.4.1数据种类

structPoint{

/*一个寄存点坐标的构造体

*/

intx,y;

/*被多个构造体调用的基本参数,因此一致用

point构造体来表示*/

};

structSnake{

/*用来模拟蛇状态的构造体

*/

structPointnodes[MAX_LENGTH];

/*用来寄存蛇每一节的地点

*/

intlength;

/*蛇长*/

intdirection;

/*蛇挪动的方向*/

intlive;

/*蛇能否活着*/

}snake;

/*比较形象的把蛇抽象为一个数据种类

*/

structFood{

/*用来模拟食品状态的构造体

*/

structPointposition;

/*食品的地点*/

intexist;

/*食品能否存在*/

}food;

2.4.2全局变量

Score

得分

left,top,right,bottom

游戏地区范围

lastx,lasty

用来保留最后一节蛇的地点

keyCode

用来保留按下的键

2.4.3函数说明

voidinit(void);

初始化程序,给一些初始值赋值

voidgamePlay(void);

游戏主循环

voidclose(void);

封闭游戏

voiddrawWall(void);

画墙

voidcreateFood(void);

创办一个食品

voiddrawFood(void);

画出食品

voiddrawSnake(void);

画出蛇

voiddrawScore(void);

画出分数

inttouchWall(void);

判断能否碰到墙

inttouchSelf(void);

判断能否碰到自己

voidgameOver(void);

游戏结束

voidmoveSnake(void);

挪动蛇

intoppositeDirection(intkeyCode);

判断能否方向有误

intfoodEat(void);

判断能否吃到食品

voidexpandSnake(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食品可能出此刻蛇身上

解决方法:

挨次判断,若重叠则从头生成食品

voidcreateFood(){

inti;

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)

gotolabel;

 

5

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

 

}

附录A:

程序源代码

 

/*writer:

neolone(LB)*/

#include

#include

#include

#include

#include

#include

#include

 

#defineTRUE1

#defineFALSE0

 

#defineUP0x4800

#defineDOWN0x5000

#defineLEFT0x4B00

#defineRIGHT0x4D00

#defineESC0x011B

#defineSPEED10x0231

#defineSPEED20x0332

#defineSPEED30x0433

#defineQUIT0x0B30

#defineENTER0x1C0D

 

#defineMAX_LENGTH100#defineGAME_SPEED100

 

/*maxlengthofsnakenodess*/

/*gamespeed*/

 

/*datastructure*/

structPoint{

intx,y;

};

 

structSnake{

structPointnodes[MAX_LENGTH];

intlength;

intdirection;

intlive;

}snake;structFood{

structPointposition;

《C程序设计》课程设计

 

intexist;

}food;

 

int

score=0,max,max1,max2,max3,left=200,top=200,right=300,bottom=300,lastx,lasty,keyCode,keyC

ode2,sp,l,sel,times=1;

chartext[80];

 

/*functionsdeclaration*/

voidinit(void);

voidgamePlay(void);

voidclose(void);

voiddrawWall(void);

voidcreateFood(void);

voiddrawFood(void);

voiddrawSnake(void);

voiddrawScore(void);

inttouchWall(void);

inttouchSelf(void);

voidgameOver(void);

voidmoveSnake(void);

intoppositeDirection(intkeyCode);

intfoodEat(void);

voidexpandSnake(void);

voidselect(void);

/*------------------------*/

voidmain(){

init();

l=1;

while(l)

{

select();

gamePlay();

}

close();

}

 

voidinit(){

 

intgdriver=VGA,gmode=VGAHI;

 

7

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

 

snake.nodes[0].x=250;

snake.nodes[0].y=250;

snake.nodes[1].x=250;

snake.nodes[1].y=260;

snake.length=2;

snake.live=1;

snake.direction=UP;

 

score=0;

food.exist=0;

initgraph(&gdriver,&gmode,"C:

\\tc20\\BGI");

 

randomize();/*suijishufashengqi*/

 

drawWall();

 

}

 

voidclose(){

FILE*fp;

closegraph();

if((fp=fopen("data.txt","w"))==NULL)/*封闭时保留最高分*/

{

exit(0);

}

else

{

fprintf(fp,"%d,%d,%d",max1,max2,max3);

fclose(fp);

}

printf("pessanykeytocontinue");

}

 

voidgamePlay(){

 

intkeyCode,d;

getch();

while(TRUE){

drawScore();

drawWall();

if(touchWall()||touchSelf()){

《C程序设计》课程设计

 

gameOver();

return;

}

if(!

food.exist)createFood();

food.exist=1;

drawFood();

drawSnake();

for(d=0;d

delay(GAME_SPEED);

if(bioskey

(1)!

=0){

keyCode=bioskey(0);

switch(keyCode){

caseESC:

gameOver();

return;

default:

lastx=snake.nodes[snake.length-1].x;

lasty=snake.nodes[snake.length-1].y;

if(!

oppositeDirection(keyCode)){

snake.direction=keyCode;

}

}

}

moveSnake();

if(foodEat()){

food.exist=FALSE;

score+=10;

expandSnake();

}

}

}

 

voiddrawWall(){

rectangle(left,top,right+10,bottom+10);

}

 

voidcreateFood(){

inti;

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)

 

9

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

 

gotolabel;

}

 

}

 

voiddrawFood(){

 

setfillstyle(1,2);

bar(food.position.x,food.position.y,food.position.x+10,food.position.y+10);

 

}

 

voiddrawSnake(){

intj;

 

setfillstyle(1,4);

for(j=0;j<=snake.length-1;j++)

{

bar(snake.nodes[j].x,snake.nodes[j].y,snake.nodes[j].x+10,snake.nodes[j].y+10);

 

}

 

}

 

voiddrawScore(void){

 

setfillstyle(1,16);

bar(45,45,150,80);

 

setcolor(WHITE);

sprintf(text,"writer:

neolone");

outtextxy(170,50,text);

sprintf(text,"score:

%5d",score);

outtextxy(50,50,text);

 

}

 

inttouchWall(){

intx1=snake.nodes[0].x;

inty1=snake.nodes[0].y;

if(x1right||y1bottom)

returnTRUE;

《C程序设计》课程设计

 

else

returnFALSE;

 

}

 

inttouchSelf(){

inti;

for(i=3;i

{

if(snake.nodes[0].x==snake.nodes[i].x&&snake.nodes[0].y==snake.nodes[i].y)

returnTRUE;

 

}

returnFALSE;

 

}

 

voidgameOver(){

FILE*fp;

intx2,y2;

x2=180;

y2=250;

 

setcolor(WHITE);

sprintf(text,"Gameover!

!

yourscoreis%d,%d",score,sel);

outtextxy(x2,y2,text);

delay(1000);

getch();

switch(sel%4)

{

case1:

if(score>max1)

{

max1=score;

}

break;

case2:

if(score>max2)

{

max2=score;

}

break;

case3:

 

11

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

 

if(score>max3)

{

max3=score;

}

break;

default:

{

break;

}

}

}

 

voidmoveSnake(){

intk;

setfillstyle(1,16);

lastx=snake.nodes[snake.length-1].x;

lasty=snake.nodes[snake.length-1].y;

 

bar(snake.nodes[snake.length-1].x,snake.nodes[snake.length-1].y,snake.nodes[snake.length-1].x+10,snake.nodes[snake.length-1].y+10);

for(k=snake.length-2;k>=0;k--)

{

snake.nodes[k+1].x=snake.nodes[k].x;

snake.nodes[k+1].y=snake.nodes[k].y;

}

if(snake.direction==UP)

snake.nodes[0].y-=10;

elseif(snake.direction==DOWN)

snake.nodes[0].y+=10;

elseif(snake.direction==LEFT)

snake.nodes[0].x-=10;

elseif(snake.direction==RIGHT)

snake.nodes[0].x+=10;

else

;

}

 

intoppositeDirection(intkeyCode){

if(keyCode==UP&&snake.direction==DOWN){

return1;

}

elseif(keyCode==DOWN&&snake.direction==UP){

return1;

}

《C程序设计》课程设计

 

elseif(keyCode==LEFT&&snake.direction==RIGHT){

return1;

}

elseif(keyCode==RIGHT&&snake.direction==LEFT){

return1;

}

else

return0;

}

 

intfoodEat(){

if(snake.nodes[0].x==food.position.x&&snake.nodes[0].y==food.position.y)

return1;

else

return0;

}

 

voidexpandSnake(){

if(keyCode==UP){

lastx-=10;

}

elseif(keyCode==DOWN){

lastx+=10;

}

elseif(keyCode==LEFT){

lasty-=10;

}

elseif(keyCode==RIGHT){

lasty+=10;

}

else

;

 

snake.nodes[snake.length].x=lastx;

snake.nodes[snake.length].y=lasty

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2