C语言程序设计贪吃蛇程序设计源代码用TC30编译通过Word文件下载.docx
- 文档编号:20850030
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:33
- 大小:21.69KB
C语言程序设计贪吃蛇程序设计源代码用TC30编译通过Word文件下载.docx
《C语言程序设计贪吃蛇程序设计源代码用TC30编译通过Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计贪吃蛇程序设计源代码用TC30编译通过Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
/*usefulMACRO*/
#defineFOOD_SIZE8
#defineSCALE8
#defineUP_KEY0x4800
#defineDOWN_KEY0x5000
#defineLEFT_KEY0x4b00
#defineRIGHT_KEY0x4d00
#defineMOVE_UP1
#defineMOVE_LEFT2
#defineMOVE_DOWN3
#defineMOVE_RIGHT4
#defineINVALID_DIRECTION0
#defineQUIT_KEYC0x1051
#defineQUIT_KEY0x1071
#defineSELECT_KEYC0x1f53
#defineSELECT_KEY0x1f73
#definePAUSE_KEYC0x1950
#definePAUSE_KEY0x1970
#defineDEFAULT_LEVEL1
#defineHELP_COLORWHITE
#defineWELCOME_COLORWHITE
#defineDEFAULT_COLORGREEN
/*definethemacroasfollowstoimprovethegameinfuture*/
#defineFOOD_COLORYELLOW
#defineSNAKE_HEAD_COLORRED
#defineDEFAULT_SNAKE_COLORYELLOW
#defineEXIT_COLORWHITE
#defineSCORE_COLORYELLOW
/*sturctureforsnakebodymainly,andfoodalso*/
typedefstructfood_infor*FOOD_INFOR_PTR;
typedefstructfood_infor{
intposx;
/*positionforeachpieceofsnakebody*/
intposy;
intnext_move;
/*nextmovedirection*/
intpre_move;
/*previousmovedirection,seemsunuseful*/
intbeEaten;
/*xidentifierforsnakebodyorfood*/
FOOD_INFOR_PTRnext;
/*pointertonextpieceofsnakebody*/
FOOD_INFOR_PTRpre;
/*pointertopreviouspieceofsnakebody*/
}FOOD_INFOR;
/*structureforsnakehead*/
typedefstruct_snake_head{
inteatenC;
/*numberoffoodthathavebeeneaten*/
inthop;
/*numberofstepstoeatfood*/
/*pointertothefirstpieceofeatenfood*/
}SNAKE_HEAD;
/*theleft-upcornerandright-downcorner*/
typedefstructpoint{
intx;
inty;
}POINT;
/*standardsforgamespeed
/*beforelevel5,thetimeintervalislevel_b[level-1]/10,andafter*/
/*level5,thetimeintervalis1.00/level_b[level-1]*/
floatlevel_b[9]={10.0,8.0,6.0,3.0,1.0,20.0,40.0,160.0,640.0};
/*availablevarary*/
SNAKE_HEADsnake_head;
FOOD_INFOR*current;
/*alwayspointtofood*/
POINTborder_LT,border_RB;
intdriver,mode;
/*forgraphicsdriver*/
intmaxx,maxy;
/*maxlengthandwidthofscreen,inpixel*/
inteaten;
/*identifierifthefoodiseaten*/
intscore=0;
/*totalscore*/
intlevel=DEFAULT_LEVEL;
/*levelorspeed*/
floatinterval;
/*basedonspeed*/
intsnake_color=DEFAULT_SNAKE_COLOR;
/*snakebodycolor*/
inthopcount=0;
/*theshortestnumberofstepsforsnake*/
/*toeatfood*/
/*allsubfunction*/
voidinit_graphics();
voidgenerate_first_step();
intjudge_death();
intwilleatfood();
voidgenerate_food();
voidaddonefood();
voidredrawsnake();
voidshow_all();
voidsort_all();
voidchange_direction();
voidhelp();
voidshow_score(int);
voidchange_level();
voidshow_level();
voidrelease(SNAKE_HEAD);
intcan_promote();
voidwin();
voidshow_infor_to_level();
voidshow_eaten();
voidcalculate_hop();
/*mainfunctionorentry*/
voidmain()
{
charstr[50]="
YOULOSE!
!
"
;
/*failinformation*/
clock_tstart;
intquerykey;
inttempx,tempy;
/*iffailandwanttoresumegame,gohere*/
retry:
init_graphics();
show_all();
/*showwall*/
generate_first_step();
/*generatefoodandsnakehead*/
show_score(score);
/*showscoretoplayer*/
eaten=0;
/*begintoplaygame*/
while
(1)
if(judge_death()==1)/*die*/
break;
if(willeatfood()==1)
eaten=1;
addonefood();
snake_head.hop++;
if(snake_head.hop==hopcount)
score+=level*2;
else
score+=level;
can_promote();
}
sort_all();
redrawsnake();
show_infor_to_level();
show_eaten();
change_direction();
if(eaten==1)
generate_food();
calculate_hop();
snake_head.hop=0;
if(level<
=5)
interval=level_b[level-1]/10.0;
interval=1.00/level_b[level-1];
start=clock();
while((clock()-start)/CLK_TCK<
interval)
querykey=bioskey
(1);
if(querykey!
=0)
switch(bioskey(0))
caseUP_KEY:
snake_head.next_move=MOVE_UP;
caseLEFT_KEY:
snake_head.next_move=MOVE_LEFT;
caseDOWN_KEY:
snake_head.next_move=MOVE_DOWN;
caseRIGHT_KEY:
snake_head.next_move=MOVE_RIGHT;
caseSELECT_KEYC:
caseSELECT_KEY:
change_level();
score=0;
show_level();
casePAUSE_KEYC:
casePAUSE_KEY:
while(!
bioskey
(1));
caseQUIT_KEYC:
caseQUIT_KEY:
gotoexit_game;
default:
settextstyle(DEFAULT_FONT,0,2);
setcolor(EXIT_COLOR);
tempx=border_LT.x+(border_RB.x-border_LT.x-textwidth(str))/2;
tempy=border_LT.y+(border_RB.y-border_LT.y)/2;
outtextxy(tempx,tempy,str);
strcpy(str,"
press<
R/r>
toretry,orENTERkeytoexit"
);
tempy+=textheight(str)*2;
settextstyle(DEFAULT_FONT,0,1);
select:
querykey=bioskey(0);
if((querykey==0x1372)||(querykey==0x1352))
level=DEFAULT_LEVEL;
release(snake_head);
closegraph();
gotoretry;
=0x1c0d)
gotoselect;
return;
exit_game:
/*subfunctionshow_eaten()*/
/*function:
toshowthetotalnumberpieceoffood*/
/*thathavebeeneatenbysnakeanytime*/
voidshow_eaten()
intsize;
void*buf;
charstr[15];
setcolor(DEFAULT_COLOR);
sprintf(str,"
eaten:
%d"
snake_head.eatenC);
tempx=0;
tempy=border_LT.y+textheight(str)*6;
size=imagesize(tempx,tempy,tempx+textwidth(str)+textwidth("
A"
),
tempy+textheight(str));
buf=malloc(size);
getimage(tempx,tempy,tempx+textwidth(str)+textwidth("
tempy+textheight(str),buf);
putimage(tempx,tempy,buf,XOR_PUT);
free(buf);
/*subfunction:
show_infor_to_level*/
showinformationtoplayerthathowmanypieces*/
/*offoodhavetobeeneatentogettonextlevel*/
/*,andthisisnotrelatedwithscore,butonly*/
/*eatennumberoffood
/*levelstandard:
lethighlevelstandforthenumberof*/
/*piecesoffoodthatcanbeputintthe*/
/*verticaldirectionofplayarea,and*/
/*beforelevel5,aslongasthesnakeeat*/
/*aquarterofhighlevel,itwillgotonext*/
/*level,andbetweenlevel5and7,aslong*/
/*asthesnakeeatonethirdsofhighlevel,*/
/*itwillgotonextlevel,andbetween*/
/*level8and9,thesnakewillgotonext*/
/*levelaslongasiteathalfofhighlevel*/
/*note:
levelisbetween1to9.*/
voidshow_infor_to_level()
inthighlevel;
inttoeat;
charstr[50];
highlevel=(border_RB.y-border_LT.y)/SCALE;
switch(level)
case1:
case2:
case3:
case4:
toeat=(highlevel/4)*level-snake_head.eatenC;
case5:
case6:
case7:
toeat=(highlevel+highlevel/3*(level-4))-snake_head.eatenC;
case8:
case9:
toeat=(highlevel*2+highlevel/2*(level-7))-
snake_head.eatenC;
if(snake_head.next==NULL)
nextlevel"
tempy=border_LT.y+textheight(str)*2;
if(toeat<
0)
toeat=0;
%d:
level+1,toeat);
tempy=border_LT.y+textheight(str)*4;
),tempy+
textheight(str));
textheight(str),buf);
win()*/
iftheplayerpasslevel9,thisfunction*/
/*willbecalled,toshow"
YOUWINinformation*/
/*andafterakeyispressed,thegamewillgo*/
/*on,butallisbacktobegin,exceptethe*/
/*snakebodylength.
voidwin()
charstr[]="
YOUWIN"
settextstyle(DEFAULT_FONT,0,8);
setcolor(WELCOME_COLOR);
tempy=border_LT.y+(border_RB.y-border_LT.y-textheight(str))/2;
can_promote()*/
seeifthesnakecangotonextlevelonbasis*/
/*ofthesnakelength.
standardsofpromotelevelisinstructedabove*/
intcan_promote()
/*compareSCOREwithstandardlevelscore*/
inthigh_level;
staticintlast_score=0;
high_level=(border_RB.y-border_LT.y)/SCALE;
switch(le
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 贪吃 程序设计 源代码 TC30 编译 通过