C語言 貪吃蛇遊戲

2021-09-26 05:30:56 字數 4440 閱讀 7483

需要注意的是,在函式命名的時候要注意清晰明了,還有就是注意模組的劃分要清晰,該是哪個模組的任務就由哪個模組去做,不要混亂結果,打個比方,如蛇身的繪畫,可以是snake模組的任務,但是在實際設計上,繪畫並不是蛇本身的屬性,他應該是view模組的任務,這樣這是為了保證資料和操作相互隔離,分工明確。所以在整個程式中會有許多的函式去獲得,snake和food的指標,這樣看似麻煩。但卻是在解決問題時得到了方便。

另外還有注意的是,在編寫程式是要注意模組劃分,盡可能減少全域性變數的使用,如果非要用全域性變數也要避免該變數被其他模組直接操作,這樣就會使**安全性提公升。

當然在後面的程式中有一處變數我使用了extern int去共享,這個設計其實不太好,但是由於那幾個視窗id屬性是庫函式呼叫的結果,所以我在這偷了個懶,希望大家不要學習

其次一點就是在跟新遊戲資料時,這裡採用了掩碼的方式去比對,選擇跟新的選項,這個技巧還是十分有用的

我為了方便給標頭檔案加了很多預編譯,這是個極差的方式,請勿模仿。再此只是為了我除錯的時候方便,是乙個錯誤的做法

那麼接下來整個程式還是分為四個模組,snake,food,view,main

#include

#include

#include

#include

#include

#include

#include

#include

"glconsole.h"

typedef

struct body

body;

typedef

enum _tagdir

movedir;

typedef

struct snake

snake;

typedef

struct _tagfood

food;

//snake

body *

body_make

(int x,

int y, body *next)

;snake*

snake_init()

;void

snake_release()

;bool snake_death()

;void

snake_grow()

;void

snake_update()

;snake *

retrn_snake_info()

;//food

void

food_make()

;bool food_eat_hit()

;food return_food_info()

;//view

void

window_init()

;void

window_release()

;void

window_show_about()

;void

window_show_gameinfo

(int score,

int level,

int speed)

;void

window_draw_wall()

;void

snake_draw()

;void

snake_tail_empty()

;void

food_draw()

;

#include

"snake.h"

extern

int about_window;

// 關於視窗id

extern

int score_window;

// 成績視窗id

extern

int snake_window;

// 遊戲視窗id

snake* snake =

null

;//蛇的全域性變數

body *

body_make

(int x,

int y, body *next)

snake*

snake_init()

void

snake_release()

free

(snake);}

void

snake_update()

int *** =0;

int yyy =0;

switch

(snake->movedir)

snake->head->x +

= ***;

snake->head->y +

= yyy;

}void

snake_grow()

bool snake_death()

return false;

}snake *

retrn_snake_info()

#include

"snake.h"

extern

int about_window;

// 關於視窗id

extern

int score_window;

// 成績視窗id

extern

int snake_window;

// 遊戲視窗id

food food;

void

food_make()

bool food_eat_hit()

food return_food_info()

#include

"snake.h"

int about_window =-1

;// 關於視窗id

int score_window =-1

;// 成績視窗id

int snake_window =-1

;// 遊戲視窗id

void

window_init()

void

window_release()

void

window_show_about()

void

window_show_gameinfo

(int score,

int level,

int speed)

void

window_draw_wall()

for(

int i =

0; i < h; i++)}

void

snake_draw()

glmxconsole_wnddrawtextex

(snake_window, p->x, p->y,8,

"-");}

void

snake_tail_empty()

void

food_draw()

#include

"snake.h"

extern

int about_window;

// 關於視窗id

extern

int score_window;

// 成績視窗id

extern

int snake_window;

// 遊戲視窗id

//更新掩碼

#define update_none 0x00

#define update_score 0x01

#define update_all 0x08

void

update_info

(int

*score,

int*level,

int*speed,

int update)

}int

main()

} food_existence = false;

snake_grow()

;}if(

!food_existence)if(

snake_death()

) time_count =20;

}if(kbhit()

)}sleep

(time);}

getch()

;snake_release()

;window_release()

;glmxconsole_release()

;return0;

}

C語言 貪吃蛇遊戲

相信每個人都接觸過貪吃蛇遊戲,而對於學習c語言的同學來說,一開始是不是覺得c語言寫不出什麼東西來呢?那麼,貪吃蛇應該是第一步,開始了解一些模組化的知識,一些物件導向的思想,一些小專案的編寫。效果 通過 wasd 移動蛇,蛇能夠吃隨機產生的食物,並且變長。基本實現 用兩個陣列snakex,snakey...

C語言 貪吃蛇遊戲

該遊戲不依賴tc環境,任何第三方庫,可以在vc 6.0 vs c free等常見ide中編譯通過。設計貪吃蛇遊戲的主要目的是讓大家夯實c語言基礎,訓練程式設計思維,培養解決問題的思路,領略多姿多彩的c語言。遊戲開始後,會在中間位置出現一條只有三個節點的貪吃蛇,並隨機出現乙個食物,如下圖所示 圖1 遊...

語言貪吃蛇遊戲

加速每個食物得分更高 先列印出遊戲介面,還有初始化蛇,蛇的節點用字串 表示,遊戲背景用 表示,因為這些字串佔兩個位元組的寬度,所以每次x,y座標的對應關係是x y 2。在相應位置列印出蛇,初始化蛇為五個節點 初始化蛇頭的移動方向為右,根據按鍵來確定蛇的移動狀態,要是吃到食物,就讓食物為蛇頭,然後隨機...