单片机实现一个贪吃蛇小游戏

编程入门 行业动态 更新时间:2024-10-08 06:24:27

单片机实现一个贪吃蛇<a href=https://www.elefans.com/category/jswz/34/1769974.html style=小游戏"/>

单片机实现一个贪吃蛇小游戏

#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;                     //移动}									    }			
}

 

代码有少许缺陷,比如食物只会从蛇的尾部出来

 

更多推荐

单片机实现一个贪吃蛇小游戏

本文发布于:2024-03-07 21:44:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718984.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小游戏   单片机   贪吃蛇

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!