资源简介
用51单片机在16*16的led点阵上实现贪吃蛇游戏
代码片段和文件信息
#include
#include
#define uint unsigned int
#define uchar unsigned char
//基本功能部分变量
sbit k0=P3^7; //下面的开关,锁定用 和k1同时按下时解锁
sbit k1=P3^5; //中间的开关,左移(回移)用 和k0同时按下时解锁
sbit k2=P3^6; //左边的开关,右移(顺移)用
sbit g1=P3^0; //重力感应1
sbit g2=P3^1; //重力感应2
sbit ksnack=P3^4; //自锁式按键 贪吃蛇开关
uchar *p; //指向table的指针
uchar code X[]={0x000x010x020x030x040x050x060X07};//选列
uchar code Y[]={0x800x400x200x100x080x040x020X01};//选行
uint n=0; // 指针使用(选行)
uint num=0; // 中断计数使用
uint j=0; // 每次左右移计数停止时使用
uint t=0; // 重力选定使用
uint s1=0; // 锁定
uint s2=0; // 解锁
uint s3=0; // 左移(回移)
uint s4=0; // 右移(顺移)
uint s5=0; // 待机
uint s6=0; // 贪吃蛇
uint s7=0; //
//贪吃蛇部分
#define MAX_LENGTH 33 //蛇的最大长度
struct Point
{
uchar x y;
};
struct Snake
{
struct Point nodes[MAX_LENGTH];
uchar length;
uchar direction;
uchar live;
} snake;
struct Food
{
struct Point position;
uchar exist;
} food;
uint left=0top=0right=15bottom=15jfood=0;
int lastxlasty;
void delay_ms(uint xms) //延时程序
{
uint ij;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void delay()
{
uint i;
for(i=160;i>0;i--);
}
//贪吃蛇
void init() {
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=0;
food.exist=0;
}
int oppositeDirection(int t) {
if(t==0&&snake.direction==2){
return 1;
}
else if(t==2&&snake.direction==0) {
return 1;
}
else if(t==1&&snake.direction==3){
return 1;
}
else if(t==3&&snake.direction==1){
return 1;
}
else
return 0;
}
void gameOver()
{
uint im;
while(1)
{
for(i=0;i<8;i++)
{
P2=0xff;
P1=0xff;
P0=X[i]|0x40;
m++;
}
for(i=0;i<8;i++)
{
P2=0xff;
P1=0xff;
P0=X[i]|0x80;
m++;
}
}
}
void createFood()
{
int i;
label:
jfood+=3;
if(jfood>=500) jfood=0;
srand(jfood);
food.position.x=((int)rand()%16);
food.position.y=((int)rand()%16);
for(i=0;i<=snake.length-1;i++){
if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)
goto label;
}
}
void draw()
{
uint ij;
for(j=0;j<8;j++)
{
P1=0x00;
P2=0x00;
if(food.position.x==j)
{
if(food.position.y<8) P2=Y[food.position.y];
else P1=Y[food.position.y-8];
}
for(i=0;i if(snake.nodes[i].x==j)
{
相关资源
- 数据结构课程设计贪吃蛇
- 四按键五花样流水灯
- c51单片机点亮第一个led灯的程序keil文
- 51流水灯仿真加代码
- 51单片机获取DS18B20序列号LCD显示
- 51单片机实现密码锁(带proteus仿真)
- 51单片机转速表实现
- 超声波避障小车简易版本51单片机
- 51单片机舵机角度控制
- 51单片机4路红外寻迹小车源码+hex
- STM32制作的贪吃蛇小游戏
- 51单片机直流电机PID闭环调速
- 51单片机18B20
- 基于51单片机呼吸灯
- 基于51单片机3x4按键拨号
- 基于51单片机的音乐播放器,源码详细
- 51单片机课设.zip
- 51单片机驱动ov7670
- 基于51单片机的智能循迹小车制作
- 基于51单片机电子琴程序
- 51单片机测量方波频率proteus仿真
- 基于51单片机的自动加热散热系统,采
- 51单片机——门禁系统
- 51单片机程序.zip
- 基于51单片机的闹钟设计
- 51单片机数码管显示时钟
- 51单片机T2定时器控制舵机程序源码(
- 两超声波模块测量角度
- 51单片机闹钟
- 51单片机 心形花样流水灯程序
评论
共有 条评论