8乘8点阵贪吃蛇源代码.docx

上传人:b****0 文档编号:12768158 上传时间:2023-04-22 格式:DOCX 页数:15 大小:2.03MB
下载 相关 举报
8乘8点阵贪吃蛇源代码.docx_第1页
第1页 / 共15页
8乘8点阵贪吃蛇源代码.docx_第2页
第2页 / 共15页
8乘8点阵贪吃蛇源代码.docx_第3页
第3页 / 共15页
8乘8点阵贪吃蛇源代码.docx_第4页
第4页 / 共15页
8乘8点阵贪吃蛇源代码.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

8乘8点阵贪吃蛇源代码.docx

《8乘8点阵贪吃蛇源代码.docx》由会员分享,可在线阅读,更多相关《8乘8点阵贪吃蛇源代码.docx(15页珍藏版)》请在冰豆网上搜索。

8乘8点阵贪吃蛇源代码.docx

8乘8点阵贪吃蛇源代码

//writer:

neolone

//bug:

当蛇身全部在第二列上时,第四列会同时显示

//问题1:

蛇的最大长度是33,因为51存储空间不足了,其实可以用一位uchar存储两个数,用它//的十位个位就行

//问题2:

随着蛇的增长速度会减慢,因为每显示一节就会delay

(2),这样就会增加时间,可以把151行的延时做成随length增加减少的量

//我懒得改了,如果你改好的话希望发一份到我邮箱lllllbbbbbsz@,在此先谢过了~

#include

#include

#defineucharunsignedchar

#defineTRUE1

#defineFALSE0

#defineMAX_LENGTH33/*maxlengthofsnakenodess*/

#defineGAME_SPEED100/*gamespeed*/

#defineUP1

#defineDOWN2

#defineLEFT3

#defineRIGHT4

sbitKEY_UP=P2^3;/*定义按键*/

sbitKEY_DOWN=P2^1;

sbitKEY_LEFT=P2^6;

sbitKEY_RIGHT=P2^2;

sbitSTART=P2^7;

unsignedcharzong[8]={0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};//点阵P0=zong[k]就能让k位为高

unsignedchargreen[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

unsignedcharred[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

/*datastructure*/

structPoint{

ucharx,y;

};

structSnake{

structPointnodes[MAX_LENGTH];

ucharlength;

uchardirection;

ucharlive;

}snake;

structFood{

structPointposition;

ucharexist;

}food;

int/*score=0,*/lastx,lasty,keyCode,keyCode2,sp=10,l;

ucharleft=0,top=0,right=7,bottom=7;

/*functionsdeclaration*/

voidinit(void);

voidgamePlay(void);

//voidclose(void);

voiddrawWall(void);

voidcreateFood(void);

voiddrawFood(void);

voiddrawSnake(void);

//voiddrawScore(void);

uchartouchWall(void);

uchartouchSelf(void);

voidgameOver(void);

voidmoveSnake(void);

intoppositeDirection(intkeyCode);

intfoodEat(void);

voidexpandSnake(void);

voidselect(void);

uchargetKey(void);

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

voidmain(){

init();

l=1;

while(l)

{

gamePlay();

}

//close();

gameOver();

}

voiddelay(ucharz)

{

ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--)

;

}

voiddelay_50us(unsignedchart)

{

unsignedcharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

voidinit(){

snake.nodes[0].x=3;

snake.nodes[0].y=3;

snake.nodes[1].x=4;

snake.nodes[1].y=3;

snake.length=2;

snake.live=1;

snake.direction=UP;

//score=0;

food.exist=0;

srand(5);/*suijishufashengqi*/

}

/*voidclose(){

while

(1)

{

P0=0xff;

P1=0x0;

}

}*/

voidgamePlay(){

intd;

ucharkeyCode;

while(START);//等待按开始键

while(TRUE){

//drawScore();

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

gameOver();

return;

}

if(!

food.exist)createFood();

food.exist=1;

for(d=0;d<(sp*36);d++)

{

drawFood();

drawSnake();

}

keyCode=getKey();

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

}

}

}

uchargetKey()

{

if(!

KEY_UP)

{

delay_50us

(2);

if(!

KEY_UP)

{

returnUP;

}

}

if(!

KEY_DOWN)

{

delay_50us

(2);

if(!

KEY_DOWN)

{

returnDOWN;

}

}

if(!

KEY_LEFT)

{

delay_50us

(2);

if(!

KEY_LEFT)

{

returnLEFT;

}

}

if(!

KEY_RIGHT)

{

delay_50us

(2);

if(!

KEY_RIGHT)

{

returnRIGHT;

}

}

returnsnake.direction;//什么都没按

}

voidcreateFood(){

inti;

label:

food.position.x=((int)rand()%8);

food.position.y=((int)rand()%8);

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

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

gotolabel;

}

//food.position.x=1;

//food.position.y=1;

}

voiddrawFood(){

P0=zong[food.position.x];

P1=green[food.position.y];

delay

(2);

P0=0;

P1=0xff;

}

voiddrawSnake(){

intj;

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

{

P0=zong[snake.nodes[j].x];

P3=red[snake.nodes[j].y];

delay

(2);

P3=0xff;

P0=0;

}

}

uchartouchWall(){

ucharx1=snake.nodes[0].x;

uchary1=snake.nodes[0].y;

if(x1right||y1bottom)

returnTRUE;

else

returnFALSE;

}

uchartouchSelf(){

uchari;

for(i=3;i

{

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

returnTRUE;

}

returnFALSE;

}

voidgameOver(){

while

(1)

{

P3=0xff;

P0=0xff;

P1=0x0;

}

}

voidmoveSnake(){

intk;

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

//P0=zong[snake.nodes[snake.length-1].x];

//P3=red[snake.nodes[snake.length-1].y];

//P0=0;

//P3=0xff;

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-=1;

elseif(snake.direction==DOWN)

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

elseif(snake.direction==LEFT)

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

elseif(snake.direction==RIGHT)

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

else

;

}

intoppositeDirection(intkeyCode){

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

return1;

}

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

return1;

}

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-=1;

}

elseif(keyCode==DOWN){

lastx+=1;

}

elseif(keyCode==LEFT){

lasty-=1;

}

elseif(keyCode==RIGHT){

lasty+=1;

}

else

;

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

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

snake.length++;

}

以下是测试效果图

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

当前位置:首页 > 初中教育 > 政史地

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

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