单片机在上玩起来贪吃蛇.docx
- 文档编号:1259372
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:32
- 大小:27.59KB
单片机在上玩起来贪吃蛇.docx
《单片机在上玩起来贪吃蛇.docx》由会员分享,可在线阅读,更多相关《单片机在上玩起来贪吃蛇.docx(32页珍藏版)》请在冰豆网上搜索。
/*用你身边的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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 起来 贪吃
![提示](https://static.bdocx.com/images/bang_tan.gif)