贪吃蛇课程设计Word格式.docx

上传人:b****2 文档编号:5825569 上传时间:2023-05-05 格式:DOCX 页数:19 大小:20.50KB
下载 相关 举报
贪吃蛇课程设计Word格式.docx_第1页
第1页 / 共19页
贪吃蛇课程设计Word格式.docx_第2页
第2页 / 共19页
贪吃蛇课程设计Word格式.docx_第3页
第3页 / 共19页
贪吃蛇课程设计Word格式.docx_第4页
第4页 / 共19页
贪吃蛇课程设计Word格式.docx_第5页
第5页 / 共19页
贪吃蛇课程设计Word格式.docx_第6页
第6页 / 共19页
贪吃蛇课程设计Word格式.docx_第7页
第7页 / 共19页
贪吃蛇课程设计Word格式.docx_第8页
第8页 / 共19页
贪吃蛇课程设计Word格式.docx_第9页
第9页 / 共19页
贪吃蛇课程设计Word格式.docx_第10页
第10页 / 共19页
贪吃蛇课程设计Word格式.docx_第11页
第11页 / 共19页
贪吃蛇课程设计Word格式.docx_第12页
第12页 / 共19页
贪吃蛇课程设计Word格式.docx_第13页
第13页 / 共19页
贪吃蛇课程设计Word格式.docx_第14页
第14页 / 共19页
贪吃蛇课程设计Word格式.docx_第15页
第15页 / 共19页
贪吃蛇课程设计Word格式.docx_第16页
第16页 / 共19页
贪吃蛇课程设计Word格式.docx_第17页
第17页 / 共19页
贪吃蛇课程设计Word格式.docx_第18页
第18页 / 共19页
贪吃蛇课程设计Word格式.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

贪吃蛇课程设计Word格式.docx

《贪吃蛇课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《贪吃蛇课程设计Word格式.docx(19页珍藏版)》请在冰点文库上搜索。

贪吃蛇课程设计Word格式.docx

(1)通过编写“贪吃蛇游戏“程序,掌握结构化、模块化程序设计的思想,培养解决实际问题的能力。

(2)设计好数组元素与蛇、食物对应关系。

(3)随机产生食物。

(4)有分数统计、分数存储、声音等效果。

2.修要掌握和运用的知识点:

(1)数组的应用。

(2)全局变量的使用。

(3)按键处理。

(4)结构体的应用。

(5)文件的基本操作。

(6)结构化、模块化的设计方法。

3具体完成的设计内容

在本次课程设计中,刘兴阳设计开头动画和音乐播放;

李奉泽设计玩游戏的具体过程;

郭强设计读取和写入文件函数;

刘宏设计对五个人的数据进行排序的函数并存放到指定为文件中;

我设计的是设计的是排行榜界面并填入指定文件中对应的数据;

文件共同设计的有全局变量的定义和宏定义,函数声明以及主函数。

二·

需求分析

1操作方法

(1)进入游戏进入游戏后是游戏片头。

可听见同步音乐。

(2)游戏界面游戏左上边生命和分数,右边是难度。

(3)游戏操作在游戏中,用上下左右控制蛇行动,按ESC键结束游戏。

三·

总体设计

1模块化分

(1)主控模块

主控模块有main函数实现,主要用来依次调用哥哥下层模块,从而控制整个程序的功能。

主控模块

动画音乐

图形驱动

画主题界面

游戏过程

退

结束处理

写入文件

成绩排序

排行榜

读取记录

(2)动画音乐模块模块

该模块用来同步播放下雪的动画和简单的音乐,并在屏幕的中间输出颜色不断变化的欢迎词语。

(3)画主界面模块

画主界面模块由函数DrawK实现,它画出一个封闭的围墙。

(4)游戏过程模块。

该模块是整个程序的核心模块,它完成整个游戏过程,用GamePlay实现。

(5)游戏结束处理模块。

当游戏结束时,调用ENDPLAY函数进行游戏结束处理。

(6)读取记录模块

该模块由ReadFiles函数实现即用来读取排行榜信息记录。

(7)成绩排序模块

该模块由CompareScore函数实现。

(8)写入文件模块

该模块由WriteFiles函数实现,即将新的排行榜信息写入文件

(9)排行榜模块

该模块由Pain_board函数实现。

主要功能是建立排行榜界面,输出五个最高分的玩家姓名和成绩。

(该部分由我设计)

(10)退出

显示排行榜后,返回main函数,按任意键关闭图形系统,并退出程序。

2总体数据结构设计

(1)食物与蛇的数据结构。

Life=0表示蛇死了,不等于零活着。

(2)符号常量的宏定义。

#defineTIME1/就是延长时间,也就是生命/

#defineMARK02500/就是过关分数/

(3)全局变量的定义

Intlife=4/初始化生命4/

四详细设计(主要介绍下主函数和游戏的具体过程以及我设计的排行榜部分)

1主控模块main函数。

主函数是程序的主控模板。

首先初始化图形系统,然后调用DrawSnow函数播放动画和音乐,接着调用Init函数初始化图形系统,之后调用DrawK函数画出游戏开始画面,在调用GamePlay函数,即开始了游戏的具体过程,游戏结束后调用EndPlay函数进行游戏结束处理:

从文件中读取记录信息、排序、显示排行榜信息,最后关闭图形系统,结束程序。

主模块的算法流程图如图所示。

其中带有两个竖线的矩形框表示对自定义函数的调用。

关闭图形系统

画游戏开始界面

开始

结束

进入游戏

具体过程

结束处理,

关闭

初始化图形系统

4

3游戏过程

初始化

按键

蛇移动

上、下、左、右控制

碰到食物

食物消失,得分

蛇加长,出现新食物

上下左右开始

撞墙,或撞到自己,生命减一。

Esc退出

是、否四次

退出

退出游戏

5

五实验与总结

实践出真知,通过对贪吃蛇游戏的制作过程,让我们认识到了许多,比如循环函数的应用、指针函数的应用,在加同步音乐时,总是不能正常的运行,但经过全组成员的努力,

总结:

我们的这款游戏软件基本上达到了设计题目的要求,功能上只是开场界面不是动画稍微负缺,界面有菜单、音乐和进入游戏的提示,游戏中界面美观,游戏操作正确,并能显示分数,并能正确退游戏。

我们希望在下次的程序设计中能更进一步,设计出更好的游戏。

在这次程序设计中我们充分认识到了集体合作的力量,如果一个人我想是无法完成这么大的一个工程量的,因为查代码和修改是很不容易的,没有多方的努力和老师的努力,不知道结果会怎么样。

所以我们组总结出的一句话是:

团结就是力量。

六程序清单

#include<

stdio.h>

string.h>

bios.h>

time.h>

graphics.h>

conio.h>

stdlib.h>

dos.h>

#defineN200

#defineLEFT0x4b00

#defineRIGHT0x4d00

#defineDOWN0x5000

#defineUP0x4800

#defineESC0x011b

#defineFILENAME"

c:

\\person.dat"

structperson

{

charname[20];

intscore;

};

structpersonper[5];

structSnow

intx;

inty;

intspeed;

}snow[100];

intsnownum=0;

intsize;

intchange=10;

intscore=0;

void*save;

inti,key;

intgamespeed=400;

structFood

{

intyes;

}food;

structSnake

intx[N];

inty[N];

intnode;

intdirection;

intlife;

}snake;

voidDrawSnow();

voidReadFiles();

voidWriteFiles(structperson*);

voidInitScoreFiles();

voidCompareScore(structperson);

voidEndPlay();

voidpain_board();

voidPr()

{ints[15]={0,100,150,200,150,200,250,150,250,300,250,150,100,250,350};

setcolor(change/10);

settextstyle(0,0,4);

outtextxy(20,200,"

WELCOMETOOURGAME!

!

"

);

sound(s[change/10]);

}

voidDrawSnow()

{inti;

intsx[62];

setlinestyle(SOLID_LINE,0,THICK_WIDTH);

line(1,1,9,9);

line(0,5,10,5);

line(9,1,1,9);

save=malloc(200);

getimage(0,0,10,10,save);

cleardevice();

randomize();

for(i=0;

i<

62;

i++)

sx[i]=(i+2)*10;

while(!

kbhit())

{Pr();

if(snownum!

=100)

{snow[snownum].speed=2+random(5);

i=random(62);

snow[snownum].x=sx[i];

snow[snownum].y=10-random(100);

}

snownum;

putimage(snow[i].x,snow[i].y,save,COPY_PUT);

delay(100);

Pr();

=100)snownum++;

setfillstyle(SOLID_FILL,15);

{snow[i].y+=snow[i].speed;

if(snow[i].y>

500)snow[i].y=10-random(200);

change++;

if(change==140)change=10;

nosound();

voidInit(void)

{intgd=DETECT,gm;

initgraph(&

gd,&

gm,"

C:

\\tc30\\BGI"

voidDrawK(void)

setcolor(11);

for(i=50;

=600;

i+=10)

rectangle(i,40,i+10,49);

rectangle(i,451,i+10,460);

for(i=40;

=450;

rectangle(50,i,59,i+10);

rectangle(601,i,610,i+10);

outtextxy(20,5,"

GreedySnakeGame1.4.0_1"

outtextxy(480,10,"

scorelevel"

voidGamePlay(void)

intlevel=1;

charbuffer[10];

food.yes=1;

snake.life=0;

snake.direction=1;

snake.x[1]=100;

snake.y[1]=100;

snake.x[0]=110;

snake.y[0]=100;

snake.node=2;

while

(1)

{while(!

{if(food.yes==1)

{food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!

=0)

food.x++;

while(food.y%10!

=0)food.y++;

food.yes=0;

if(food.yes==0)

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

setfillstyle(1,1);

bar(475,18,590,35);

setcolor(15);

itoa(score,buffer,10);

outtextxy(480,20,buffer);

itoa(level,buffer,10);

outtextxy(560,20,buffer);

for(i=snake.node-1;

i>

0;

i--)

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

switch(snake.direction)

case1:

snake.x[0]+=10;

break;

case2:

snake.x[0]-=10;

case3:

snake.y[0]-=10;

case4:

snake.y[0]+=10;

for(i=3;

snake.node;

if(snake.x[i]==snake.x[0]&

&

snake.y[i]==snake.y[0])

{snake.life=1;

break;

}

if(snake.x[0]<

55||snake.x[0]>

595||snake.y[0]<

55||snake.y[0]>

455)

snake.life=1;

if(snake.life==1)

break;

if(snake.x[0]==food.x&

snake.y[0]==food.y)

setcolor(0);

snake.node++;

score+=10;

if(score%50==0)

level+=1;

gamespeed-=50;

setcolor(4);

for(i=0;

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

delay(gamespeed);

setcolor(0);

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

if(snake.life==1)break;

key=bioskey(0);

if(key==ESC)break;

elseif(key==UP&

snake.direction!

=4)

snake.direction=3;

elseif(key==RIGHT&

=2)

elseif(key==LEFT&

=1)

snake.direction=2;

elseif(key==DOWN&

=3)

snake.direction=4;

voidReadFiles()

FILE*fpread;

if((fpread=fopen(FILENAME,"

ab+"

))==NULL)

printf("

can'

topenthefileperson.dat!

exit(0);

if(fgetc(fpread)==EOF)InitScoreFiles();

rewind(fpread);

fread(per,sizeof(structperson),5,fpread);

fclose(fpread);

voidWriteFiles(structperson*tmp)

{FILE*fpwrite;

if((fpwrite=fopen(FILENAME,"

wb+"

{printf("

exit(0);

fwrite(tmp,sizeof(structperson),5,fpwrite);

fclose(fpwrite);

voidInitScoreFiles()

structpersona[5];

5;

{a[i].score=0;

strcpy(a[i].name,"

nobody"

WriteFiles(a);

voidCompareScore(structpersondes)

{inti,j;

{if(des.score>

=per[i].score)

{if(i<

5)

{for(j=4;

j>

=i+1;

j--)

per[j]=per[j-1];

per[i]=des;

voidpain_board()

inti;

charstring[10];

ReadFiles();

setfillstyle(1,9);

bar(482,227,599,239);

outtextxy(490,230,"

Highestboard"

rectangle(480,225,600,240);

setcolor(8);

rectangle(481,226,601,241);

setfillstyle(1,7);

bar(475,257,610,426);

line(475,257,610,257);

line(475,257,475,426);

setcolor

(1);

outtextxy(480,265,"

namescore"

{setcolor(4);

outtextxy(480,290+i*30,per[i].name);

itoa(per[i].score,string,10);

setcolor(14);

outtextxy(580,290+i*30,string);

line(476,280+i*30,609,280+i*30);

line(476,281+i*30,609,281+i*30);

getch();

voidEndPlay()

{structpersonCurPerson;

if(score>

per[4].score)

{setfillstyle(1,9);

bar(14,14,447,419);

outtextxy(50,250,"

Refueling!

YourScoreEntertheBoard!

outtextxy(50,270,"

pleaseenteryourname:

gotoxy(7,19);

"

scanf("

%s"

CurPerson.name);

CurPerson.score=score;

CompareScore(CurPerson);

WriteFiles(per);

elseouttextxy(70,250,"

YourScoreisnotenoughontheBoard!

pain_board();

voidmain()

intgd=DETECT,gm;

\\TC30\\BGI"

DrawSnow();

PressEnterkeytocontinue...\n"

getchar();

Init();

DrawK();

GamePlay();

EndPlay();

closegraph();

}8

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

当前位置:首页 > 解决方案 > 学习计划

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

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