⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 arm7+proteus仿真实现的贪吃蛇
💻 C
字号:
#include "config.h"

#define LCD_DISP_COLOR 1                        //marco定义LCD的前景色和背景色
#define LCD_BACK_COLOR 0

#define upv 1                                   
#define downv 9
#define leftv 4
#define rightv 6

extern int *map[];      						//32*16


#define m 50    
                         
int snake[m][2]={{4*4,7*4},{3*4,7*4},{2*4,7*4},{1*4,7*4},{0*4,7*4}};
uint8 cur=5;    /* 蛇的节数 */
int food[2]={60,28};
int score=0;
int key,keylast=leftv,keyp=6; 

void up(void);
void down(void);
void left(void);
void right(void);
void pause(void);
void move(void);
void clean(int x,int y);
void priout(int x,int y);
void Delay_Display(uint8 num);
void food_f(void);
void judge_f(void);
void game_over(void);
void die_f(void);
void change_food(void);


void food_f() /* 随机产生一个方块*/
{
     
     food[0]=(int)rand()%32*4;
     food[1]=(int)rand()%16*4;

     priout(food[0],food[1]);
}
void judge_f()       /*     判断是否吃到一个方块 */
 {
    if(snake[0][0]==food[0]&&snake[0][1]==food[1])
      {
        food_f();
        cur++;        /*    吃到一个方块自动增加一节  */
        score=score+100;
       }
 }
 
void game_over()      /*      判断蛇是否死亡    */
 {  
  
 }
void die_f()                
  {
    int i;
    for(i=0;i<cur-2;i++)
      {
    	 	if(snake[0][0]==snake[i+2][0]&& snake[0][1]==snake[i+2][1])
        		game_over();
      }
    if(snake[0][0]<0)
      {
       		snake[0][0]=124;
      }
    else if(snake[0][0]>124)
      {
        	snake[0][0]=0;
      }
    else if(snake[0][1]<0)
      {
            snake[0][1]=60;
      }
    else if(snake[0][1]>60)
      {
           	snake[0][1]=0;
      }
       
  }
     
  void change_food()       /* 判断随机产生的方块是否与蛇重合 */
     {
       int i;                  /*这个涵数里面有一个问题是:没有达到效果*/
       for(i=0;i<cur;i++)
       {
       if(snake[i][0]==food[0]&&snake[i][1]==food[1])
         {
         food_f();
         }
       }

      }
    
void clean(int x,int y)
{
	GUI_LoadPic1(x, y,(uint8 *)map[0], 4, 4);
}
void priout(int x,int y)
{
	GUI_LoadPic(x, y,(uint8 *)map[0], 4, 4);
}	    

void up()
{
	int i;
    clean(snake[cur-1][0],snake[cur-1][1]);
    for(i=cur-1;i>0;i--)
      {
       snake[i][0]=snake[i-1][0];
       snake[i][1]=snake[i-1][1];
       }
     snake[0][1]-=4;
     priout(snake[0][0],snake[0][1]);
     Delay_Display(10);
     keylast=downv;
     keyp=upv;
}
void down()
{
	int i;
    clean(snake[cur-1][0],snake[cur-1][1]);
    for(i=cur-1;i>0;i--)
      {
       snake[i][0]=snake[i-1][0];
       snake[i][1]=snake[i-1][1];
       }
     snake[0][1]+=4;
     priout(snake[0][0],snake[0][1]);
     Delay_Display(10);
     keylast=upv;
     keyp=downv;
}
void left()
{
	int i;
    clean(snake[cur-1][0],snake[cur-1][1]);
    for(i=cur-1;i>0;i--)
      {
       snake[i][0]=snake[i-1][0];
       snake[i][1]=snake[i-1][1];
       }
     snake[0][0]-=4;
     priout(snake[0][0],snake[0][1]);
     Delay_Display(10);
     keylast=rightv;
     keyp=leftv;
}
void right()
{
	int i;
    clean(snake[cur-1][0],snake[cur-1][1]);
    for(i=cur-1;i>0;i--)
      {
       snake[i][0]=snake[i-1][0];
       snake[i][1]=snake[i-1][1];
       }
     snake[0][0]+=4;
     priout(snake[0][0],snake[0][1]);
     Delay_Display(10);
     keylast=leftv;
     keyp=rightv;
}
void pause()
{
	;
}	
void move()
{
	 int i;
    clean(snake[cur-1][0],snake[cur-1][1]);
    for(i=cur-1;i>0;i--)
      {
       snake[i][0]=snake[i-1][0];
       snake[i][1]=snake[i-1][1];
       }
     switch(keyp)
     {
     	case 1:snake[0][1]-=4;break;
     	case 4:snake[0][0]-=4;break;
     	case 6:snake[0][0]+=4;break;
     	case 9:snake[0][1]+=4;break;
     	default:  break;
     }
     priout(snake[0][0],snake[0][1]);
     Delay_Display(10);
                       
}
/****************************************************************************
* 名称:Delay_Display()
* 功能:延时显示
****************************************************************************/ 
void Delay_Display(uint8 num)
 {
   int i,j;
   for(i=0;i<=num;i++)
    {
      for(j=0;j<10000;j++)
         ;
     }
 }
 
void Key_Process(uint8 num)
{
    
  switch(num)
	 {
		
	    case 1:up();break;		
		case 4:left();break;
		case 5:pause();break;
		case 6:right();break;		
		case 9:down();break;		
	   default:move();break;
	 }
	
}    
	   	    
/****************************************************************************
* 名称:main()
* 功能:入口涵数
****************************************************************************/
 
int main()
{ 
    GUI_Initialize();                               // 初始化LCM
	Keyboard_Initialize();
	
	GUI_SetColor(LCD_DISP_COLOR,LCD_BACK_COLOR);	// 设置前景色和背景色		
	
	
	 while(1)
	 {
	  key=Keyboard_Scan();

	   Key_Process(key);
	    priout(food[0],food[1]);
        judge_f();      /*     判断是否吃到一个方块 */
        die_f() ;     /*      判断蛇是否死亡    */
     }   
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -