程序代码是这样的:添加了库文件的
#include
extern byte X_MAX=82;
extern byte Y_MAX=46;
extern unsigned char TinyFont[];
extern unsigned char SmallFont[];
byte DotX,DotY;
byte SnakeBody[100][2]={{10,16},{10,18},{10,20}};
byte EatSelf=0;
byte NewFood=0;
byte SnakeLength=3;
long score=0;
byte FoodX=30,FoodY=30;
byte Direct=2;
byte LastDirect=2
byte Steptine=5;
#define A digitalRead(2)
#define B digitalRead(3)
#define C digitalRead(4)
#define D digitalRead(5)
#define BL 6
LCD5110 LCD(9,10,11,13,12);
void setup()
{
analogWrite(BL,0);
LCD.InitLCD();
LCD.setFont(SmallFont);
DisplayStart();
PrintFrame();
randomSeed(analogRead(7));
CreatFood();
}
void loop()
{
MoveSnack();
JudgeEatSelf();
}
void DisplayStart()
{
LCD.clrScr();
LCD.print("Snake",CENTER,20);
LCD.update();
delay(2000);
LCD.clrScr();
}
void DisplayGameOvor()
{
LCD.clrScr();
for(byte y=48;y>20;y--)
{
LCD.print("GameOvor",CENTER,y);
LCD.update();
delay(50);
}
delay(5000);
LCD.clrScr();
}
void PrintFrame()
{
LCD.clrScr();
LCD.drawRect(0,6,83,47);
LCD.drawRect(1,7,82,46);
LCD.setFont(TinyFont);
LCD.print("Score:",0,0);
LCD.printNumI(0,24,0,3,'');
LCD.update();
}
void CreatDot(byte x,byte y)
{
LCD.drawRect(x,y,+1,y+1);
LCD.update();
}
void ClearDot(byte x,byte y)
{
LCD.clrRect(x,y,+1,y+1);
LCD.update();
}
byte IsFoodFit(byte X,byte Y)
{
byte WhetherFit=1;
for(int i=0;i
{
if(X=SnakeBody[i][0]&&Y=SnakeBody[i][1]||(X%2!=0)||(Y%2!=0))
{
WhetherFit=0;
break;
}
}
return WhetherFit;
}
void RandomFoodPlace()
{
FoodX=random(2,81);
FoodY=random(8,45);
}
void CreatFood()
{
ClearDot(FoodX,FoodY);
while(!IsFoodFit(FoodX,FoodY))RandomFoodPlace();
CreatDot(FoodX,FoodY);
}
void DisplaySnake()
{
int i;
for(i=0;i
{
CreatDot(SnakeBody[i][0],SnakeBody[i][1]);
}
}
void ClearSnake()
{
int i;
for(i=0;i
{
ClearDot(SnakeBody[i][0],SnakeBody[i][1]);
}
}
void MoveSnake()
{
if(A==0) Direct=0;
elseif(B==0) Direct=1;
elseif(C==0) Direct=2;
elseif(D==0) Direct=3;
if((LastDirect+Direct)%2==0)
Direct=LastDirect;
LastDirect=Direct;
if(SnakeBody[SnakeLength-1][0]==FoodX&&SnakeBody[SnakeLength-1][1]==FoodY)
{
SnakeLength++;
score++;
NewFood=1;
}
if(NewFood==1)
{
CreatFood();
NewFood=0;
switch(Direct)
{
case 0: SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-2][0];
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-2][1]-2;
break:
case 1: SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-2][0]+2;
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-2][1];
break:
case 2: SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-2][0];
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-2][1]+2;
break:
case 3: SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-2][0]-2;
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-2][1];
break:
}
}
else
{
switch(Direct)
{
case 0:
{
for(int i=0;i
{
SnakeBody[i][0]=SnakeBody[i+1][0];
SnakeBody[i][1]=SnakeBody[i+1][1];
}
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-1][1]-2;
}
break;
case 1:
{
for(int i=0;i
{
SnakeBody[i][0]=SnakeBody[i+1][0];
SnakeBody[i][1]=SnakeBody[i+1][1];
}
SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-1][0]+2;
}
break;
case 2:
{
for(int i=0;i
{
SnakeBody[i][0]=SnakeBody[i+1][0];
SnakeBody[i][1]=SnakeBody[i+1][1];
}
SnakeBody[SnakeLength-1][1]=SnakeBody[SnakeLength-1][1]+2;
}
break;
case 3:
{
for(int i=0;i
{
SnakeBody[i][0]=SnakeBody[i+1][0];
SnakeBody[i][1]=SnakeBody[i+1][1];
}
SnakeBody[SnakeLength-1][0]=SnakeBody[SnakeLength-1][0]-2;
}
break;
}
}
for(byte i=0;i
DisplaySnake();
LCD.printNumI(score,24,0,3,'');
ClearSnake();
}
void JudgeEatSelf()
{
for(int i;i
{
if(SnakeBody[SnakeLength-1][0]==SnakeBody[i][0]&&SnakeBody[SnakeLength-1][1]==SnakeBody[i][1])
{
DisplayGameOver();
break;
}
}
if((SnakeBody[SnakeLength-1][0]<=0)||(SnakeBody[SnakeLength-1][0]>=X_MAX)||(SnakeBody[SnakeLength-1][1]<=6)||(SnakeBody[SnakeLength-1][1]>=Y_MAX))
{
DisplayGameOver();
}
}
不知道为什么有错误,并且实现不了想要的内容