[c]**庫
#include
#include
#include
#include
#include
/// 遊戲活動區域
#define game_w 20
#define game_h 14
/// 方向
#define up 72
#define down 80
#define left 75
#define right 77
#define gotoxyingameandprint(x, y, color, ch) gotoxyandprint(x + 1, y + 1, color, ch)
/// 蛇結點
typedef struct
int x;
int y;
}node;
/// 遊戲相關資料
typedef struct
int map [game_h][game_w]; // 二維陣列,用於碰撞檢測
node snake [game_h * game_w]; // 蛇身
double speed; // 速度
int length; // 蛇身長度
int director; // 蛇頭當前方向
node food; // 食物(座標)
bool pause; // 遊戲暫停
bool dead; // 是否死亡
}data;
/// 控制代碼
handle g_hconsolehandl;
data gamedata;
// 函式宣告
void gotoxyandprint (int x, int y, unsigned color, char* ch); // 設定游標位置並列印
void onenter (); // 遊戲開始前的處理
void gamemenu (); // 遊戲選單
void lostgame (); // 遊戲失敗
void drawgameborder (int w, int h); // 繪製遊戲邊界
void printprompting (); // 顯示提示資訊
void printgamedata (data* data); // 顯示遊戲資料
void initgame (data* data); // 初始化遊戲資料
void rungame (data* data); // 執行遊戲
void keydowncontrol (data* data, char key); // 鍵盤按鍵控制
node getnewpos (data* data);
void move (data* data); // 移動蛇
void updatemap (data* data); // 更新 map
void repaint (data* data); // 重新整理畫面
void createfood (data* data); // 生成食物
bool iseatdood (data* data); // 判斷前方是否有食物可吃
void eatfood (data* data); // 吃食物
bool isdead (data* data); // 是否死亡(結束遊戲)
// 主函式 main()
int main ()
onenter ();
while ( true ) ; // 游標資訊
setconsolecursorinfo (g_hconsolehandl, &cursorinfo); // 隱藏游標
system ("title gamesnake"); // 設定控制台視窗標題
// 設定游標位置
void gotoxyandprint (int x, int y, unsigned color, char* ch)
coord pos;
pos.x = x << 1;
pos.y = y;
// 移動到目標
setconsoletextattribute (g_hconsolehandl, color);
// 設定顏色
setconsolecursorposition (g_hconsolehandl, pos);
printf ("%s", ch);
// 遊戲選單
void gamemenu ()
gotoxyandprint (15, 5, 0x0f, "┏━━━━━┓");
gotoxyandprint (15, 6, 0x0f, "");
printf ("┃ %s ┃", "貪食蛇");
gotoxyandprint (15, 7, 0x0f, "┗━━━━━┛");
gotoxyandprint (14, 10, 0x0f, " 按任意鍵開始遊戲 ");
while ( _getch () ) while ( data->map [y][x] );
// 設定食物座標
data->food.x = x;
data->food.y = y;
// 繪製食物
gotoxyingameandprint (data->food.x, data->food.y, 0xa, "■");
// 判斷前方是否有食物可吃
bool iseatdood (data* data)
node pos = getnewpos (data); // 獲取蛇頭的下乙個位置座標
// 判斷是否和食物座標重合
return ( pos.x == data->food.x && pos.y == data->food.y );
// 吃食物
void eatfood (data* data)
// 增加蛇身長度
data->snake [data->length + 1] = getnewpos (data);
data->length++; // 蛇長度 + 1
updatemap (data); // 更新 map
// 繪製新的節點
gotoxyingameandprint (data->snake [data->length].x, data->snake [data->length].y, 0xc, "■");
printgamedata (data); // 重新整理遊戲資料
// 執行遊戲
void rungame (data* data)
char key;
clock_t clocklast, clocknow;
clocklast = clock (); // 獲取第一次計時
while ( !data->dead ) {
// 獲取鍵盤輸入
while ( _kbhit () ) {
key = _getch ();
// todo: 相關鍵盤控制**
keydowncontrol (data, key);
// 暫停
if ( data->pause ) {
continue;
clocknow = clock (); // 獲取當前計時
// 如果時間間隔 > speed
if ( clocknow - clocklast > data->speed * clocks_per_sec )
clocklast = clocknow;
// todo: 相關遊戲邏輯**
move (data);
// 鍵盤控制處理
void keydowncontrol (data* data, char key)
// 暫停
if ( key == 13 ) {
data->pause = !data->pause;
// 不處理
if ( data->pause ) {
return;
switch ( key ) {
case 72: /* 上 */
if ( data->director != down ) {
data->director = up;
break;
case 80: /* 下 */
if ( data->director != up ) {
data->director = down;
break;
case 75: /* 左 */
if ( data->director != right ) {
data->director = left;
break;
case 77: /* 右 */
if ( data->director != left ) {
data->director = right;
break;
case ' ':
data->speed -= 0.05;
break;
c語言小遊戲 精簡 簡易版C語言貪吃蛇小遊戲
c 庫 include include include include include 遊戲活動區域 define game w 20 define game h 14 方向 define up 72 define down 80 define left 75 define right 77 def...
C語言簡易版小遊戲 flappy bird
假期在家無聊,想隨便碼點東西,故有此簡陋的小遊戲誕生。覺著可能對初學c語言的小夥伴練習有點幫助,故寫此部落格。遊戲介面如下 首先,先畫出整個小遊戲實現的流程圖,如下 思路很簡單,整個遊戲介面是由乙個大的char型別陣列構成,更新陣列的值然後不停的列印出來就形成了動態效果。由上圖看,大迴圈是保證遊戲一...
c語言小遊戲 精簡 C語言開發簡易版掃雷小遊戲
c 語言開發簡易版掃雷小遊戲 c語言開發的命令列下的簡易版掃雷小遊戲,本身沒有什麼太 多的技術含量,只不過是筆者的 作,希望對大家學習 c能夠有所 幫助。前言 想起來做這個是因為那時候某天知道了原來黑框框裡面的游標是可以控制的,而且又經 常聽人說起這個,就鍛鍊一下好了。之前就完成了那 1.0的版本,...