资源简介

用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)
          {

评论

共有 条评论