基于MSP430的游戏开发(贪吃蛇和是男人就下一百层).doc
uchar a= 0;uchar big=0;uchar big2=0;uchar flg=0;uchar levelcnt=0;uchar dir_last=KEY_RIGHT;void tanchishe();/贪吃蛇实现函数void man();/是男人就下一百层实现函数void gamer() char jt=36; Set_Draw(); jiantou(20,jt,1); drawpicfree(3,0,7,13,*mulu); drawpicfree(2,15,7,28,*menutcs); drawpicfree(2,30,4,43,*menuman); / drawpicfree(2,45,9,58,*mubiao); Delay(50000); Delay(50000);while(1) switch(key()case 5: if(jt>34)jt-=15;jiantou(20,jt+15,0);jiantou(20,jt,1);Delay(100000);break; case 3: if(jt<32)jt+=15;jiantou(20,jt-15,0);jiantou(20,jt,1);Delay(100000);break; case 9: if(jt=21) goto tcs1; else if(jt=36) goto mn; break; /case 0:/goto ;break;mn:man();推荐精选tcs1:tanchishe();void tanchishe()int xx=0 ; int yy=0 ; uint speed=22001; Set_Drawq(); drawpicfree(0,0,15,63,*SNAKE); track.trackend=3 ; while(1) if(a) LPM3; uint i,j ; keypad.key=key(); /-keypad case- switch(keypad.key) case 11: if(speed>1000)speed-=1000; else if(speed>500) speed-=500;break; case 10:speed+=1000;break; case 7 : if(flag.direction!=KEY_LEFT)flag.direction=KEY_RIGHT ; break ; case 1 : / if(flag.direction!=KEY_RIGHT)flag.direction=KEY_LEFT ; break ; 推荐精选 case 5: if(flag.direction!=KEY_DOWN)flag.direction=KEY_UP;break ; case 3: if(flag.direction!=KEY_UP)flag.direction=KEY_DOWN;break ; case 9: /LCD_INT(); /LCD_CLR(); Set_Draw(); track.trackend=3 ; bean.number=0 ; xx=0 ; yy=0 ; flag.start=1 ; flag.clear=1 ; flag.direction=KEY_LEFT ; flag.gameover=0 ; / speed=2000 ; break ; case 4: if(flag.start=0) /LCD_INT(); /LCD_CLR(); Set_Draw(); track.trackend=3 ; bean.number=0 ; xx=0 ; yy=0 ; flag.start=1 ; flag.clear=1 ; flag.direction=KEY_RIGHT ; flag.gameover=0 ; / speed=2000 ; break ; /-draw snake-推荐精选 / if(drawcnt>speed) / /if(flag.direction) / drawRectangle(xx+0,yy+0,xx+3,yy+3,2,0);/ /-draw bean begin- if(bean.number<1) bean.coor0=rand()/1024*4 ; bean.coor1=rand()/2048*4 ; bean.number=1; levelcnt+; if(levelcnt=15) if(speed>2000)speed-=2000; else if(speed>500) speed-=500; levelcnt=0; flg = 0; WriteCom(0x01); /清屏 drawpicfree(0,0,15,63,*sj); while(flg < 8); Set_Draw(); big+; if(big=5) big=0; big2+; if(big2=11) big2=0; if(flag.start) if(big=3) drawRectangle(bean.coor0+0,bean.coor1+0,bean.coor0+3,bean.coor1+3,1,1); else if(big2=10) drawyuan(bean.coor0+1,bean.coor1+0,bean.coor0+1,bean.coor1+3,2,1); else drawRectangle(bean.coor0+0,bean.coor1+0,bean.coor0+2,bean.coor1+2,1,1); /-清楚头部- switch(dir_last)推荐精选 case KEY_RIGHT : headright(xx,yy+0,0); break ; case KEY_LEFT : headleft(xx,yy+0,0); break ; case KEY_UP : headup(xx,yy,0); break ; case KEY_DOWN : headdown(xx+0,yy,0); break ; if(flag.direction) switch(flag.direction) case KEY_RIGHT: /drawRectangle(xx,yy-2,xx+7,yy+5,4,0); shenx(xx,yy+0,1);break; case KEY_LEFT: / drawRectangle(xx-4,yy-2,xx+3,yy+5,4,0); shenx(xx,yy+0,1);break; case KEY_UP: / drawRectangle(xx-2,yy-5,xx+5,yy+3,4,0); sheny(xx+0,yy,1);break; case KEY_DOWN: / drawRectangle(xx-2,yy,xx+5,yy+7,4,0); sheny(xx+0,yy,1);break; /draw snake head /-eat bean- if(xx=bean.coor0&&yy=bean.coor1) if(big=3) track.trackend+=2; else if(big2=8) track.trackend+=4; else track.trackend+; bean.number-; else 推荐精选 for(i=0;i<track.trackend-1;i+) if(xx=track.tracki0&&yy=track.tracki1&&(xx!=0&&yy!=0) if(flag.gameover=0) Lcd_flash(500,5); drawpicfree(0,0,15,63,*over); flag.direction=KEY_HOLD ; flag.gameover=1 ; flag.start=0 ; for(j=0;j<4;j+) track.trackij=track.tracki+1j;/ 后一节获得前一节的坐标 /-save snake track- track.tracktrack.trackend-10=xx+0 ; track.tracktrack.trackend-11=yy+0 ; track.tracktrack.trackend-12=xx+3 ; track.tracktrack.trackend-13=yy+3 ; / /- /drawcnt=0 ; /-move snake- switch(flag.direction) case KEY_RIGHT : / headright(xx+0,yy+0,0); xx+=4 ; /drawRectangle(xx,yy,xx-1,yy+3,2,0); headright(xx,yy+0,1); break ; case KEY_LEFT : / headleft(xx+4,yy+0,0);推荐精选 xx-=4 ; / drawRectangle(xx+4,yy,xx+7,yy+3,2,0); headleft(xx,yy+0,1); break ; case KEY_UP : / headup(xx,yy,0); yy-=4 ; / drawRectangle(xx,yy+4,xx+3,yy+7,2,0); headup(xx,yy,1); break ; case KEY_DOWN : yy+=4 ; / drawRectangle(xx,yy-4,xx+3,yy-1,2,0); headdown(xx+0,yy,1); break ; /-draw bean end- if(track.track00|track.track01|track.track02|track.track03) if(flag.direction) drawRectangle(track.track00,track.track01,track.track02,track.track03,2,0); if(big!=4&&big2!=9) drawRectangle(track.track10,track.track11,track.track12,track.track13,2,0); if(track.track10=track.track20+4) /shenx(track.track10,track.track11,0); tailleft(track.track10,track.track11,1); /drawRectangle(track.track00+3,track.track01,track.track02+3,track.track03,2,0); else if(track.track20=track.track10+4) /shenx(track.track10,track.track11,0); tailright(track.track10,track.track11,1); /tailright(track.track00,track.track01,0); 推荐精选 else if(track.track11=track.track21+4) /sheny(track.track10,track.track11,0); tailup(track.track10,track.track11,1); /tailup(track.track00,track.track01,0); else if(track.track21=track.track11+4) /sheny(track.track10,track.track11,0); taildown(track.track10,track.track11,1); /taildown(track.track00,track.track01,0); / clearn(track.track00,track.track01,track.track02,track.track03,0); /clear snake tail if(xx=128)xx=0 ; if(yy=64)yy=0 ; if(flag.direction=KEY_LEFT&&xx=-4)xx=124; if(flag.direction=KEY_UP&&yy=-4)yy=60; /if(xx=252)xx=124 ; / if(yy=252)yy=60 ; if(flag.start=0)flag.direction=KEY_HOLD ; if(flag.clear=1) LCD_CLR(); flag.clear=0 ; dir_last=flag.direction; Delay(speed); /* 是男人就下一百层*/*2010.11.5*/*by one*/*v0.1 beta*void man()uchar guanstart=1;推荐精选 DCOCTL |= 0X60; uchar mannum=1; uchar life=5; uchar i=0;uchar scocnt=0;uchar guan=0;uint guancnt=0;uint cnt=0;uint score=0;char xx=0,yy=0;uint sban=3,sdown=2; Set_Drawq(); ban.number=2; drawpicfree(0,0,15,63,*manface);while(1) if(a) LPM3;keypad.key=key();/*keypad case* switch(keypad.key) case 11: if(sban>5)speed-=1; break; case 10:sban+=1;break;/*start game*one case 9:if(flag.start=0) Set_Draw(); score=0; guan=1 ; xx=50 ; yy=0 ; flag.start=1 ; flag.clear=1 ; 推荐精选 flag.gameover=0 ; ban.number=2 ; ban.coor10=rand()%46 +33; ;ban.coor20=rand()%46 +33; ban.coor11=40 ; ban.coor21=20 ; drawRectangle(ban.coor10+0,ban.coor11,ban.coor10+16,ban.coor11+2,1,1); drawRectangle(ban.coor20+0,ban.coor21,ban.coor20+16,ban.coor21+2,1,1); drawman(xx,yy,1); WriteCom(0x01); drawpicfree(0,0,15,63,*manui); drawpicfree(0,18,3,25,*clearnmin);drawnum2(14,18,guan,1); break ; /*/*过关重画* if(guanstart=0) / Set_Draw(); /score=0; / guan=1 ; xx=50 ; yy=0 ; guanstart=1 ; / flag.clear=1 ; / flag.gameover=0 ; ban.number=2 ; ban.coor10=rand()%46 +33; ;ban.coor20=rand()%46 +33;推荐精选 ban.coor11=40 ; ban.coor21=20 ; drawRectangle(ban.coor10+0,ban.coor11,ban.coor10+16,ban.coor11+2,1,1); drawRectangle(ban.coor20+0,ban.coor21,ban.coor20+16,ban.coor21+2,1,1); drawman(xx,yy,1); WriteCom(0x01); drawpicfree(0,0,15,63,*manui); drawpicfree(0,18,3,25,*clearnmin);drawnum2(14,18,guan,1);/* /-draw ban begin- if(mannum<1) xx=rand()%56+33; yy=4; drawman(xx,yy,1); mannum=1; if(ban.number<3) ban.coor00=rand()%46 +33; ban.coor01=62; ban.number=3; drawRectangle(ban.coor00+0,ban.coor01,ban.coor00+16,ban.coor01+2,1,1); /* big+; if(big=15) big=0; big2+;推荐精选 if(big2=35) big2=0; */*人走动*one switch(keypad.key) case 1: if(xx>33) drawman(xx,yy,0); xx-=2; drawman(xx,yy,1); break;/*if(yy=ban.coor01-1&&xx>=ban.coor00&&