📄 main.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 + -