需要注意的是,在函式命名的時候要注意清晰明了,還有就是注意模組的劃分要清晰,該是哪個模組的任務就由哪個模組去做,不要混亂結果,打個比方,如蛇身的繪畫,可以是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。在相應位置列印出蛇,初始化蛇為五個節點 初始化蛇頭的移動方向為右,根據按鍵來確定蛇的移動狀態,要是吃到食物,就讓食物為蛇頭,然後隨機...