贪吃蛇课程设计.docx

上传人:b****7 文档编号:10003245 上传时间:2023-02-07 格式:DOCX 页数:19 大小:20.50KB
下载 相关 举报
贪吃蛇课程设计.docx_第1页
第1页 / 共19页
贪吃蛇课程设计.docx_第2页
第2页 / 共19页
贪吃蛇课程设计.docx_第3页
第3页 / 共19页
贪吃蛇课程设计.docx_第4页
第4页 / 共19页
贪吃蛇课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

贪吃蛇课程设计.docx

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

贪吃蛇课程设计.docx

贪吃蛇课程设计

程序设计基础课程设计

贪吃蛇设计

 

院系:

计算机科学技术学院

班级:

软件11-2

组长:

闫建哲

组员:

别广路,曹家宁,陈小杰,陈阳,崔殿新

指导教师:

贺薪宇

 

2011年12月24日

 

一、概述

1研究的背景及意义…………………………………...3

2设计的任务和需要的知识点…………………………3

3具体完成的设计内容…………………………………3

二、需求分析

2操作方法………………………………………………..3

三、总体设计

1模块化分…………………………………….................4

2总体数据结构设计…………………………………………4

四、详细设计

1主控模块main函数……………………………………4

2背景……………………………………………………5

3游戏过程………………………………………………5

五、实验与总结……………………………………………6

六、程序清单…………………………………………………6

 

一·概述

本课程设计以软件方法为指导,采用了结构化和模块化的设计方法,以C语言技术为基础,使用WIN-TC为主要开发工具,对贪吃蛇进行了需要分析、总体设计、详细设计、最终完成系统的实现与测试。

1究的背景及意义

社会在发展,生活在进步,与日俱增的人加入全球化的世界。

人们不再拘泥在一块小天地,加班、出差成了人不可避免的公务。

此时娱乐小游戏成了不可取少的一部分。

在手机和电脑成为人们日用品的社会,一款能在其上与性的游戏称为卖家的参考点。

此次课程设计完成的贪吃蛇小游戏,正是为了满足上述需求而设计出来的,,希望能给玩家带来娱乐。

贪吃蛇这一界面友好,操作方便,娱乐性较强。

使人们很好的放松工具。

C语言是国际上广泛流传的、很有发展前途的计算机高级语言。

C语言是一种面向过程的高级语言。

所以说此次课程设计的目的就是更好的了解社会的高级语言。

2设计的任务和需要的知识点

1.课程设计的主要完成任务

(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

#include

#include

#include

#include

#include

#include

#include

#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

{

intx;

inty;

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);

}

for(i=0;i

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

delay(100);

cleardevice();

Pr();

if(snownum!

=100)snownum++;

setfillstyle(SOLID_FILL,15);

for(i=0;i

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

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

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

}

change++;

if(change==140)change=10;

}

nosound();

cleardevice();

}

voidInit(void)

{intgd=DETECT,gm;

initgraph(&gd,&gm,"C:

\\tc30\\BGI");

cleardevice();

}

voidDrawK(void)

{inti;

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);

for(i=50;i<=600;i+=10)

{

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

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

}

for(i=40;i<=450;i+=10)

{

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];

randomize();

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(!

kbhit())

{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;break;

case3:

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

case4:

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

}

for(i=3;i

{

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);

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

snake.node++;

food.yes=1;

score+=10;

if(score%50==0)

{

level+=1;

gamespeed-=50;

}

}

setcolor(4);

for(i=0;i

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&&snake.direction!

=2)

snake.direction=1;

elseif(key==LEFT&&snake.direction!

=1)

snake.direction=2;

elseif(key==DOWN&&snake.direction!

=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+"))==NULL)

{printf("can'topenthefileperson.dat!

");exit(0);

}

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

fclose(fpwrite);

}

voidInitScoreFiles()

{inti;

structpersona[5];

for(i=0;i<5;i++)

{a[i].score=0;

strcpy(a[i].name,"nobody");

}

WriteFiles(a);

}

voidCompareScore(structpersondes)

{inti,j;

for(i=0;i<5;i++)

{if(des.score>=per[i].score)

{if(i<5)

{for(j=4;j>=i+1;j--)

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

}

per[i]=des;

break;

}

}

}

voidpain_board()

{

inti;

charstring[10];

ReadFiles();

setfillstyle(1,9);

bar(482,227,599,239);

outtextxy(490,230,"Highestboard");

setcolor(15);

rectangle(480,225,600,240);

setcolor(8);

rectangle(481,226,601,241);

setfillstyle(1,7);

bar(475,257,610,426);

setcolor(15);

line(475,257,610,257);

line(475,257,475,426);

setcolor

(1);

outtextxy(480,265,"namescore");

for(i=0;i<5;i++)

{setcolor(4);

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

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

setcolor(14);

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

setcolor(8);

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

setcolor(15);

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

}

getch();

}

voidEndPlay()

{structpersonCurPerson;

ReadFiles();

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);

printf("");

gotoxy(7,19);

scanf("%s",CurPerson.name);

CurPerson.score=score;

CompareScore(CurPerson);

WriteFiles(per);

}

elseouttextxy(70,250,"YourScoreisnotenoughontheBoard!

");

pain_board();

}

voidmain()

{structpersonCurPerson;

intgd=DETECT,gm;

initgraph(&gd,&gm,"c:

\\TC30\\BGI");

DrawSnow();

printf("PressEnterkeytocontinue...\n");

getchar();

Init();

DrawK();

GamePlay();

EndPlay();

getch();

closegraph();

}8

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

当前位置:首页 > 医药卫生 > 预防医学

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

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