小游戏"/>
单片机实现一个贪吃蛇小游戏
#include <reg52.h>
#define uchar unsigned char
#define SNAKE 22 //最大长度
#define TIME 40 //显示延时时间
#define SPEED 88 //速度控制
#define keyenable 1sbit led = P0^0;
sbit up=P3^2;
sbit down=P3^4;
sbit right=P3^3;
sbit left=P3^1;uchar x[SNAKE+1];
uchar y[SNAKE+1];
uchar time,n,i,e; //延时时间,当前蛇长,通用循环变量,当前速度
char fx,fy; //位移偏移量/***************************延时程序
****************************/
void delay(char MS)
{char us,usn;while(MS!=0){usn = 0;while(usn!=0){us=0xff;while (us!=0){us--;};usn--;}MS--;}
}
/****************************判断碰撞
*****************************/
bit knock()
{bit k;k=0;if(x[1]>7||y[1]>7)k=1; //撞墙for(i=2;i<n;i++)if((x[1]==x[i])&(y[1]==y[i]))k=1; //撞自己return k;
}
/*****************************上下左右键位处理
******************************/
void turnkey()
{if(keyenable){if(left){fy=0;if(fx!=1)fx=-1; else fx=1;}if(right){fy=0;if(fx!=-1)fx=1; else fx=-1;}if(up){fx=0;if(fy!=-1)fy=1; else fy=-1;}if(down){fx=0;if(fy!=1)fy=-1; else fy=1;}}
}
/*******************************乘方程序
********************************/
uchar mux(uchar temp)
{if(temp==7) return 128;if(temp==6) return 64;if(temp==5) return 32;if(temp==4) return 16;if(temp==3) return 8;if(temp==2) return 4;if(temp==1) return 2;if(temp==0) return 1;return 0;
}
/*******************************显示时钟 显示程序
*******************************/
void timer0(uchar k)
{while(k--){for(i=0;i<SNAKE+1;i++){P2=mux(x[i]);P1=255-mux(y[i]);turnkey(); //上下左右键位处理delay(TIME); //显示延迟P2=0x00;P1=0xff;}}
}
/*******************************主程序
*******************************/
void main(void)
{e=SPEED;P0=0x00;P1=0xff;P2=0x00;P3=0x00;while(1) {for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100; //初始化x[0]=4;y[0]=4; //设置食物 n=3; //贪吃蛇长x[1]=1;y[1]=0; //贪吃蛇头x[2]=0;y[2]=0; //贪吃蛇尾fx=0;fy=0; //位移偏移while(1){if(keyenable)break;timer0(1);}while(1) {timer0(e);if(knock()){e=SPEED;break;} //判断碰撞if((x[0]==x[1]+fx)&(y[0]==y[1]+fy)) //是否吃东西{n++;if(n==SNAKE+1){n=3;e=e+10;for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;}x[0]=x[n-2];y[0]=y[n-2];}for(i=n-1;i>1;i--){x[i]=x[i-1];y[i]=y[i-1];} x[1]=x[2]+fx;y[1]=y[2]+fy; //移动} }
}
代码有少许缺陷,比如食物只会从蛇的尾部出来
更多推荐
单片机实现一个贪吃蛇小游戏
发布评论