单片机在上玩起来贪吃蛇.docx

上传人:b****2 文档编号:1259372 上传时间:2022-10-19 格式:DOCX 页数:32 大小:27.59KB
下载 相关 举报
单片机在上玩起来贪吃蛇.docx_第1页
第1页 / 共32页
单片机在上玩起来贪吃蛇.docx_第2页
第2页 / 共32页
单片机在上玩起来贪吃蛇.docx_第3页
第3页 / 共32页
单片机在上玩起来贪吃蛇.docx_第4页
第4页 / 共32页
单片机在上玩起来贪吃蛇.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

单片机在上玩起来贪吃蛇.docx

《单片机在上玩起来贪吃蛇.docx》由会员分享,可在线阅读,更多相关《单片机在上玩起来贪吃蛇.docx(32页珍藏版)》请在冰豆网上搜索。

单片机在上玩起来贪吃蛇.docx

/*用你身边的51单片机玩起贪吃蛇,哈哈仅仅是玩玩就好。

大家注意管脚可能不同请根据实际情况改写。

*/

//主程序

#include

#include

#defineup0x21

#definedown0x24

#defineleft0x12

#defineright0x42

#definequit0x81

unsignedcharbdatasnake_flag;

ucharxdatasnake[256][2];

ucharidatasnake_len;

ucharidatasnake_food[2];

sbitgameover=snake_flag^3;

sbitfood=snake_flag^2;

uint marker;

uchar no_counter;

voidtimer0_init(void);

voidsnake_init(void)

{

marker=0;

no_counter=0;

snake_len=3;

fill_point(31,30);

fill_point(32,30);

fill_point(33,30);

snake[0][0]=33;

snake[1][0]=32;

snake[2][0]=31;

snake[0][1]=30;

snake[1][1]=30;

snake[2][1]=30;

snake_flag=0x10;

line_horizon(0,63,0);

line_horizon(0,63,63);

line_vertical(0,0,127);

line_vertical(63,0,127);

timer0_init();

xprintf(64,0,"分数");

printf_number(64,2,0);

xprintf(64,4,"按退出键");

xprintf(64,6,"退出");

}

voidsnake_refresh()

{

uchark;

for(k=snake_len;k>0;k--)

{

snake[k][0]=snake[k-1][0];

snake[k][1]=snake[k-1][1];

}

}

voidsnake_run(void)

{

uchari;

snake_refresh();

switch(snake_flag>>4)

{

case(0x08):

if(snake[0][1]==1) gameover=1;

else snake[0][1]--;

break;

case(0x04):

if(snake[0][1]==62) gameover=1;

else snake[0][1]++;

break;

case(0x02):

if(snake[0][0]==1) gameover=1;

else snake[0][0]--;

break;

case(0x01):

if(snake[0][0]==62) gameover=1;

else snake[0][0]++;

break;

default:

break;

}

for(i=(snake_len);i>0;i--)

{

if((snake[0][0]==snake[i][0])&&(snake[0][1]==snake[i][1]))

{

gameover=1;

break;

}

}

if(!

gameover)

{

if((snake[0][0]==snake_food[0])&&(snake[0][1]==snake_food[1]))

{

food=0;

snake_len++;

no_counter++;

marker=no_counter*100;

printf_number(64,2,marker);

}

else

{

clear_point(snake[snake_len][0],snake[snake_len][1]);

fill_point(snake[0][0],snake[0][1]);

}

}

if(no_counter>9)

gameover=1;

}

uchargetkey(void)

{

ucharcol_code,row_code;

P1=0xf0;

if(P1!

=0xf0)

{

delayms(5);

if(P1!

=0xf0)

{

row_code=0xfe;

while(row_code&0x10)

{

P1=row_code;

if(P1!

=row_code)

{

col_code=(P1&0xf0)|0x0f;

return((~row_code)|(~col_code));

}

else row_code=(row_code<<1)|0x01;

}

}

}

return(0);

}

bitcompare(ucharx,uchary)

{

ucharcounter;

for(counter=0;counter

{

if((snake[counter][0]==x)&&(snake[counter][1]==y))return(0);

}

return

(1);

}

voidset_food(void)

{

uchari,j;

bitcompare_flag;

i=TL0&0x3f;

j=TH0&0x3f;

if(i==0) i++;

if(i==0x4f) i--;

if(j==0x4f)j--;

if(j==0) j++;

do{

compare_flag=compare(i,j);

if(!

compare_flag)

{

i++;

j++;

if(i>63)i=1;

if(j>63)j=1;

}

}

while(!

compare_flag );

fill_point(i,j);

snake_food[0]=i;

snake_food[1]=j;

food=1;

}

voidtimer0(void)interrupt1using3

{

TH0=0x00;

TL0=0x00;

TR0=1;

}

voidtimer0_init(void)

{

TMOD=0x01;

TH0=0x00;

TL0=0x00;

TR0=1;

ET0=1;

EA=1;

}

voiddelay()

{

unsignedinti;

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

}

voidlongdelay(uchari)

{

ucharx;

for(x=0;x

delay();

}

voidsnake_game(void)

{

ucharkey_code;

cls();

xprintf(24,0,"贪吃蛇游戏");

xprintf(50,2,"ver0.1");

xprintf(50,4,"by无业游民");

xprintf(16,6,"按任意键开始");

while(getkey()==0);

cls();

snake_init();

do{

if(!

food)set_food();

key_code=getkey();

switch(key_code)

{

case0:

break;

caseup:

if((snake_flag&0xf0)==0x40)

break;

snake_flag=(snake_flag&0x0f)|0x80;

break;

casedown:

if((snake_flag&0xf0)==0x80)

break;

snake_flag=(snake_flag&0x0f)|0x40;

break;

caseleft:

if((snake_flag&0xf0)==0x10)

break;

snake_flag=(snake_flag&0x0f)|0x20;

break;

caseright:

if((snake_flag&0xf0)==0x20)

break;

snake_flag=(snake_flag&0x0f)|0x10;

break;

casequit:

cls();

return;

default:

break;

}

snake_run();

delay();

if(gameover&&(no_counter!

=10))

{

cls();

xprintf(24,3,"GAMEOVER");

xprintf(0,5,"按任意键重新开始");

while(getkey()==0);

return;

}

if(gameover&&(no_counter==10))

{

cls();

xprintf(4,3,"Congratulation!

");

xprintf(0,5,"按任意键重新开始");

while(getkey()==0);

return;

}

}

while

(1);

}

voidmain(void)

{

lcm_init();

draw_graph(graph1);

longdelay(10);

while

(1)

snake_game();

}

其他的

graphcode.h

unsignedcharcodegraph1[]=

{

0x01,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0xd0,0x30,0x30,0x30,0x50,0x60,0xdc,0xb2,0x3a,0xdc,0x20,0xa0,0xa0,0xc0,0x0e,0x30,0x7e,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x60,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

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

当前位置:首页 > 工程科技 > 材料科学

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

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