小小项目4:贪吃蛇

最近好久没有写博客了,主要忙于网络编程的学习和聊天室项目的编写,怕忘了这个好习惯,只能拿点以前的东西了
/**********************************************
time : 2017年8月10日16:04:59
filename: snack_1.c
maker: Leo
explain:little sncak game
***********************************************/

//要制作一个贪吃神游戏,首先我必须要有蛇,墙和食物。老师的看不懂。不管了,先敲一遍

//gcc snake_1.c -lpthread
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define KEYCODE_U 0x41 //向上移动
#define KEYCODE_D 0x42 //向下移动
#define KEYCODE_L 0x44 //向左移动
#define KEYCODE_R 0x43 //向右移动

int kfd = 0;
struct termios cooked,raw;
char dir = KEYCODE_U;  //默认向上移动

//获取键盘响应:上下左右键
void* get_dir(void *a)
{
	while(1)
	{
		char c;
		tcgetattr(kfd,&cooked);  //得到termios结构体保存,然后重新配置终端
		//memcpy内存拷贝函数
		memcpy(&raw, &cooked,sizeof(struct termios));
		raw.c_lflag &=~ (ICANON | ECHO);
		raw.c_cc[VEOL] = 1;
		raw.c_cc[VEOF] = 2;
		tcsetattr(kfd, TCSANOW, &raw);
		
		//读取失败
		if(read(kfd, &c,1)<0) 
		{
			perror("read");
			exit(-1);   //表示非正常关闭
		}
		tcsetattr(kfd,TCSANOW,&cooked); //程序结束时在恢复原来的配置
		dir = c;
	}
}

unsigned char map[17][17] = {0};   //游戏地图
unsigned char snake[50] = {133};   //初始化蛇坐标,游戏开始的时候在(8,5)这个位置
unsigned char food = 67;     //食物的长度,游戏开始的时候在(4,3)的位置
int len = 1;                //保存蛇当前的长度

//将数字转化为坐标
void num_to_xy(unsigned char num,unsigned char *x,unsigned char *y)
{
	*x = num>>4;    //右移了四位,及用一个字节的四位地址保存x
	*y = (unsigned char)(num<<4) >> 4;    //清空四位地址值,及用四位高地质保存y
}     //因为需要改变x,y的值,所以用指针

//更新地图数据
void update_map()
{
	int i,j;
	
	//初始化地图
	for(i=0;i<17;i++)
	{
		for(j=0;j<17;j++)
		{
			if(i == 0 || i == 16 || j == 0 || j==16)  //设置边界
			{
				map[i][j] = '#';
			}
			else
			{
				map[i][j] = ' ';
			}
		}
	}
	
	//初始化食物
	unsigned char x,y;
	num_to_xy(food,&x,&y);  //获取食物坐标(4,3) 0100 0011 及67
	map[y][x] = '!';
	
	//初始化蛇
	for(i=0;i

你可能感兴趣的:(沙僧取金:第一站,Linus,c)