激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

趣味數(shù)字游戲: 2048程序挑戰(zhàn)!C語(yǔ)言編程實(shí)戰(zhàn)小游戲,一起來(lái)玩吧!

發(fā)布時(shí)間:2024-07-29 16:27:21 瀏覽量:145次

《2048》是目前非常流行的數(shù)字游戲,它首次發(fā)布于github,原作者是Gabriele Cirulli。這款游戲是在《1024》和《小3傳奇》(Threes!)的基礎(chǔ)上開(kāi)發(fā)的全新數(shù)字游戲。

游戲規(guī)則

游戲的規(guī)則非常簡(jiǎn)單,你需要控制所有方塊朝同一個(gè)方向移動(dòng),相同數(shù)字的方塊碰撞后會(huì)合并為它們的和,每次操作后會(huì)在空白方塊處隨機(jī)生成2或4(生成2的概率更大),最終合成一個(gè)“2048”的方塊即可獲勝。

核心算法

1、方塊移動(dòng)和合并算法

主要思想是將游戲面板抽象成4行4列的二維數(shù)組,值為0的位置表示空方塊,其他位置表示對(duì)應(yīng)的數(shù)字方塊。通過(guò)遍歷每一行,將移動(dòng)合并算法應(yīng)用到每一行,實(shí)現(xiàn)所有行的移動(dòng)合并算法。具體操作是,根據(jù)不同情況進(jìn)行數(shù)字方塊的移動(dòng)與合并。

2、判斷游戲是否結(jié)束算法

核心思想是遍歷二維數(shù)組,檢查是否存在橫向和縱向相鄰的兩個(gè)相同數(shù)字,若存在則游戲繼續(xù),否則游戲結(jié)束。

3、生成隨機(jī)數(shù)算法

核心思想是根據(jù)一定概率生成2或4的隨機(jī)數(shù),用于在游戲面板空格處生成數(shù)字。在本游戲中,設(shè)置生成2的概率是4的兩倍。

4、繪制界面的算法

繪制界面并不是游戲的核心,操作界面刷新效果,使用控制臺(tái)界面清屏功能,利用控制制表符位置實(shí)現(xiàn)游戲數(shù)字面板的繪制。

源碼示例:

#include #include  /* 包含設(shè)定隨機(jī)數(shù)種子所需要的time()函數(shù) */#include  /* 包含Windows平臺(tái)上完成輸入字符不帶回顯和回車確認(rèn)的getch()函數(shù) */#include  /* 包含Windows平臺(tái)上完成設(shè)定輸出光標(biāo)位置達(dá)到清屏功能的函數(shù) */void start_game(); /* 開(kāi)始游戲 */void reset_game(); /* 重置游戲 *//* 往左右上下四個(gè)方向移動(dòng) */void move_left();void move_right();void move_up();void move_down();void refresh_show(); /* 刷新界面顯示 */void add_rand_num(); /* 生成隨機(jī)數(shù),本程序中僅生成2或4,概率之比設(shè)為2:1 */void check_game_over(); /* 檢測(cè)是否輸?shù)粲螒颍O(shè)定游戲結(jié)束標(biāo)志 */int get_null_count(); /* 獲取游戲面板上空位置數(shù)量 */int board[4][4]; /* 游戲數(shù)字面板,抽象為二維數(shù)組 */int score; /* 游戲的分 */int best; /* 游戲最高分 */int if_need_add_num; /* 是否需要生成隨機(jī)數(shù)標(biāo)志,1表示需要,0表示不需要 */int if_game_over; /* 是否游戲結(jié)束標(biāo)志,1表示游戲結(jié)束,0表示正常 */int main(){start_game();}void start_game(){reset_game();char cmd;while (1){cmd = getch(); /* 接收標(biāo)準(zhǔn)輸入流字符命令 */if (if_game_over){if (cmd == 'y' || cmd == 'Y'){reset_game();continue;}else if (cmd == 'n' || cmd == 'N'){return;}else{continue;}}if_need_add_num = 0; /* 先設(shè)定默認(rèn)需要生成隨機(jī)數(shù),需要時(shí)再設(shè)定為1 */switch (cmd){case 'a':case 'A':case 75 :move_left();break;case 's':case 'S':case 80 :move_down();break;case 'w':case 'W':case 72 :move_up();break;case 'd':case 'D':case 77 :move_right();break;}score > best ? best = score : 1; /* 打破得分紀(jì)錄 */if (if_need_add_num){add_rand_num();refresh_show();}}}void reset_game(){score = 0;if_need_add_num = 1;if_game_over = 0;int n = rand() % 16;for (int i = 0; i  0){if (board[i][k] == board[i][j]){score += board[i][k++] = 0; j--){if (board[i][j] > 0){if (board[i][k] == board[i][j]){score += board[i][k--]  0){if (board[k][i] == board[j][i]){score += board[k++][i] = 0; j--){if (board[j][i] > 0){if (board[k][i] == board[j][i]){score += board[k--][i] >= 1;if (n == 1){printf("2^%02d│", k);break;}}}}else printf(" │");}if (i 

效果示例:

希望大家能夠很好地利用所學(xué)知識(shí)完成本項(xiàng)目!

寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!

編程學(xué)習(xí)書籍分享:

編程學(xué)習(xí)視頻分享:

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定