Linux下基於C語言的貪吃蛇(訊息佇列)

2021-09-11 03:02:02 字數 2563 閱讀 1286

// 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檔案,讀取最高紀錄 ...