C 實現2048小遊戲(使用ncurses庫)

2021-09-26 15:07:14 字數 2697 閱讀 7699

一次只能合併相鄰的兩個數字,例如 [2 2 2 2] ,向右合併以後是 [空 空 4 4] ,不是 [空 空 空 8]

每次合併的時候,合併方向優先順序高,例如 [空 2 2 2],向右合併以後是 [空 空 2 4],不是 [空 空 4 2]

判斷遊戲勝利或者失敗

每次合併以後隨機新出4的概率10%

引入curses庫

繪製遊戲介面

遊戲狀態切換

重啟初始化遊戲

向左移動

向其他方向移動

遊戲勝負判定

記錄最高分

#include #include #include // srand() rand()

#include // ?

#include #include using namespace std;

// 格仔數

#define n 4

// 每個格仔的字元長度

#define width 5

// 遊戲狀態

#define s_fail 0

#define s_win 1

#define s_normal 2

#define s_quit 3

// 勝利條件

#define target 2048

class game2048

int getstatus()

// 處理按鍵輸入

void processinput()

else if (ch == 'd')

else if (ch == 'w')

if (updated)

}if (ch == 'q')

status = s_quit;

else if (ch == 'r')

restart();

//else

// status = (status + 1) % 3; // 遍歷其他三種狀態

} // 繪製遊戲介面

void draw()

}// 提示文字

mvprintw(2 * n + 2, (5 * (n - 4) - 1) / 2, "w(up),s(down),a(left),d(right),r(restart),q(quit)");

mvprintw(2 * n + 3, 12 + 5 * (n - 4) / 2, "");

// 輸贏顯示

if (status == s_fail)

mvprintw(n, 5 * n / 2 - 1, "you fail,press r to restart");

if (status == s_win)

mvprintw(n, 5 * n / 2 - 1, "you win,press r to restart");

} // 設定測試資料

void settestdata()

}}private:

// 判斷遊戲是否已經結束

bool isover()

}return true;

} // 增加判斷每次移動後是否發生變化

bool moveleft()

else

++currentwriteindex;

}data[i][j] = 0; // 把查過的值賦0

}if (lastvalue != 0)

data[i][currentwriteindex] = lastvalue;

} for (int i = 0; i < n; ++i)

}return false;

} // 逆時針旋轉90度

void rotate()

}for (int i = 0; i < n; ++i)

}} // 重新開始

void restart()

}randnew();

randnew();

status = s_normal;

} // 產生乙個隨機數

bool randnew()

}if (emptypos.empty())

return false;

// 隨機取乙個空的位置

int value = emptypos[rand() % emptypos.size()];

// 新產生2或4,4的概率為10%

data[value / n][value % n] = rand() % 10 == 1 ? 4 : 2;

return true;

} // 左上角為(0,0),在指定位置畫乙個字元

void drawitem(int row, int col, char c)

// 遊戲裡的數字是右對齊,row col是數字最後一位所在的位置

void drawnum(int row, int col, int num) }

private:

int data[n][n]; // 對映陣列

int status;

};void initialize()

void shutdown()

int main()

while (game.getstatus() != s_quit);

shutdown();

return 0;

}

用c++開發2048小遊戲

C 實現2048小遊戲

1 define crt secure no warnings 去掉編譯器內部擴增問題 2 include3 include4 include5 include 6 include7 include8 include 9 include10 include11 include12 using nam...

C 自實現2048小遊戲

include include using namespace std const int n 5 地圖為4 4 int map n n 存圖 inline void generate rand 在隨機位置產生2或4 map x y rand 2?2 4 inline void build star...

js實現2048小遊戲

頁面class hidden id end id endspan id table colspan 4 id s1 id s2 id s3 id s4 id s5 id s6 id s7 id s8 id s9 id s10 id s11 id s12 id s13 id s14 id s15 id...