标题:
大神们,可以看下我单片机贪吃蛇代码,为什么我的蛇不能运行啊
[打印本页]
作者:
tangdashao
时间:
2020-11-25 15:37
标题:
大神们,可以看下我单片机贪吃蛇代码,为什么我的蛇不能运行啊
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uint unsigned int
#define uchar unsigned char
#define SHAKE 20//蛇的最大长度
sbit SHANG=P3^4;
sbit XIA=P3^5;
sbit ZUO=P3^6;
sbit YOU=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code ly[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //P0控制y亮
uchar code lx[]={0xfe,0xfd,0xfb,0xf7,0x7f,0xbf,0xdf,0xef};//P2控制x亮
uchar xx[20]={0};//用来存蛇的x坐标
uchar yy[20]={0};//用来存蛇的y坐标
uchar length;//蛇的长度
uchar direction;//蛇的方向
uchar foodx,foody;
void delay(uchar z)//延迟函数
{
uchar x,y;
for(x=z;x>0;x--)
{
for(y=110;y>0;y--)
{};
}
}
void close()//关掉数码管
{
dula=1;
P0=0x00;
dula=0;
}
void init()//蛇的初始化
{
length=1;
xx[0]=0;
yy[0]=0;
direction=2;
}
void move()//蛇的移动
{
uchar L=length-1;
for(L;L>0;L--)
{
xx[L]=xx[L-1];
yy[L]=yy[L-1];
}
switch(direction)//根据运动方向控制坐标
{
case 1:
yy[0]++;
break;
case 2:
yy[0]--;
break;
case 3:
xx[0]--;
break;
case 4:
xx[0]++;
break;
default:
break;
}
}
void keyword()//通过按键控制运动方向
{
if(SHANG==0)//上
{
delay(1000);
if(SHANG==0)
{
if(direction==3|direction==4)
direction=1;
}
while(!SHANG);
}
if(XIA==0)//下
{
delay(1000);
if(XIA==0)
{
if(direction==3|direction==4)
direction=2;
}
while(!XIA);
}
if(ZUO==0)//左
{
delay(1000);
if(ZUO==0)
{
if(direction==1|direction==2)
direction=3;
}
while(!ZUO);
}
if(YOU==0)//右
{
delay(1000);
if(YOU==0)
{
if(direction==1|direction==2)
direction=4;
}
while(!YOU);
}
}
void food()//创造食物
{
uchar i;
foodx=rand()%7;
foody=rand()%7;
for(i=0;i<length;i++)
{
if((xx[i]==foodx)&&(yy[i]==foody))
{
food();
}
}
}
void grow()//蛇的增长函数
{
if((xx[0]==foodx)&&(yy[0]==foody))
{
food();
xx[length]=xx[length-1];
yy[length]=yy[length-1];
length++;
}
}
void light()//点亮蛇和食物
{
uchar i;
for(i=0;i<length;i++)
{
P2=lx[xx[i]];
P0=ly[yy[i]];
delay(10);
P2=lx[foodx];
P0=ly[foody];
delay(10);
}
}
void pick()//判断蛇是否撞墙和撞到自己
{
uchar i;
if(xx[0]>7||yy[0]>7)
{
while(1);
}
for(i=4;i<length;i++)
{
if(xx[0]==xx[i]&&yy[0]==yy[i])
{
while(1);
};
}
}
void main()
{
init();
move();
while(1)
{
close();
light();
food();
pick();
grow();
keyword();
}
}
复制代码
作者:
51hei团团
时间:
2020-11-25 15:50
你这个程序没有错误,可能是你硬件的问题吧,由于没有电路图也不好分析
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1