*
*
C 语言实现贪吃蛇
*****************************************************************
************************************************************
贪吃蛇实现原理:
贪吃蛇游戏在理论上是可以无限的进行下去的(除了撞墙和 咬到自己),那么游戏主体就一定是个循环。
蛇是如何动起来的?在这里就是通过不断改变蛇的坐标,然 后根据蛇的坐标不断刷新屏幕在视觉上形成蛇的移动效果。
食物出现在随机位置(当然不能出现在障碍物和蛇身上)
蛇能吃到食物其实就是蛇头的坐标与食物的坐标重合时。
当蛇咬到自己或者撞到墙的时候游戏结束(坐标判断)
******************************************************************
************************************************************/#incl ude
#include
#include
#include
#include //72,80,75,77 是方向键对应的键值
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define SNAKE 1
#define SNAKE 1
//蛇的坐标标识
#define FOOD 2
#define FOOD 2
//食物的坐标标识
#define BAR 3
#define BAR 3
// 墙的坐标标识 //初始化地图 17*17
char map[17][17] = {0};
//初始化蛇头坐标 unsigned char snake[50] = {77};
//初始化食物坐标 unsigned char food = 68;
//蛇长 char len = 1;// 存储坐标数字与 x、 y 的转换函数
void tran(unsigned char num,unsigned char * x,unsigned char * y);
//打印游戏 void print_game(void);
//获取方向函数(注意当蛇身长度超过一节时不能回头) int get_dir(int old_dir);
//移动蛇身函数 (游戏大部分内容在其中 void move_snake(int dir);
//生产食物的函数 unsigned char generate_food(void);
//判断蛇死活的函数 (判断了蛇是否撞到边界或者自食) int isalive(void);int main(void){
int dir = UP;//初始方向默认向上, UP 是我们定义的
//按道理该游戏是可以无限继续下去的,因此是个循环
while(1){
print_game();//打印游戏dir = get_dir(dir);//获取方向 (
print_game();
//打印游戏
dir = get_dir(dir);
//获取方向 (我们摁下的方
向)
move_snake(dir);
//移动蛇身
if(!isalive()){
//判断蛇的生命状态
break;printf("Game Over!\n");
break;
printf("Game Over!\n");
return
return 0;
// void tran(unsigned char num,unsigned char * x,unsigned char * y){
//注*x = num >>
//注
*y = (unsigned char)(num << 4) >> 4;
意这里要做个强制类型转换
//根据汇
编,如果不做强制转换,y
编,如果不做强制转换,
y 的值与 num 的值相同
}void print_game(void){
int i,j;
}
}
}
}
//根据地图上每点的情况绘制游戏(i 表示 x 轴, j 表
示 y 轴),按行打印, j 表示行, i 表示列
for(j = 0;j < 17;j ++){
for(i = 0;i < 17;i ++){
//空白地方 if(map[i][j] == 0){
putchar(' ');
//蛇身 else if(map[i][j] == SNAKE){
putchar(