// gcc snake.c -lpthread
#include
#include
#include
#include
#include
#include
#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)
tcsetattr(kfd, tcsanow, &cooked);//在程式結束時在恢復原來的配置
dir = c;
}unsigned char map[17][17] = ; // 遊戲地圖
unsigned char snake[50] = ; // 初始化蛇座標,遊戲開始的時候蛇在(8,5)這個位置
unsigned char food = 67; // 食物的座標,遊戲開始的時候在(4,3)這個位置
int len = 1; // 儲存蛇的當前長度
// 將 數字 轉化為座標系
void num_to_xy(unsigned char num, unsigned char *x, unsigned char *y)
// 更新地圖資料
void update_map()
else
}
}// 初始化食物
unsigned char x,y; // 座標
num_to_xy(food, &x, &y); // 獲取食物的座標 (4,3)
map[y][x] = '!'; // 設定食物
// 初始化蛇
for (i = 0; i < len; i++)
// 列印地圖
void print_map()
printf ("\n");
}
usleep(500000/(len/4+1)); // 讓程式睡眠1秒
system("clear"); // 清屏
// 生成食物
unsigned char generate_food()
} }while (x == 0 || x == 16 || y == 0 || y == 16 || insnake);
return new_food;// 移動蛇
void move_snake(char dir)
unsigned char last = snake[0]; // 儲存原蛇頭的值
snake[0] = (unsigned char)(x << 4) + y; // 更新蛇頭座標
int i;
// 移動蛇的身體
unsigned char current;
for (i = 1; i < len; i++)
// 如果蛇頭和食物的座標重合,證明蛇吃到食物
// len 是蛇的長度 0 -- len-1 snake[len]
if (snake[0] == food)
// 判斷蛇是否應該存活,如果返回值是0代表應該存活,1代表不應該存活
int isalive()
// 判斷蛇頭有沒有咬到它自己
int i;
for (i = 1; i < len; i++)
}return 0;// 父程序工作: 檢測方向鍵
int father_do()
msg;
int msgid = msgget((key_t) 456, ipc_creat);
if (msgid == -1)
while (1)
return 0;
// 子程序工作:負責遊戲執行
int child_do()
msg;
char dir;
int msgid = msgget((key_t) 456, ipc_creat);
if (msgid == -1)
while (1)
move_snake(dir);
update_map();
print_map();
if (isalive() == 1)
}
int main()
printf (「遊戲結束\n」);
return 0;
}
C語言貪吃蛇
include include include include include include define screen width 40 遊戲螢幕寬度 define screen length 15 遊戲螢幕長度 define start x 16 螢幕起始x座標 define start y ...
C語言 貪吃蛇
include include include define framewidght 22 define frameheight 22 short generaterandnumber short a,short b void posconsolecursor short x,short y voi...
C語言貪吃蛇
親測devc 編譯器完美執行 define crt secure no warnings include include include include void readini file fphead,int score,char argv 建立或開啟乙個和執行檔案對應的ini檔案,讀取最高紀錄 ...