中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

發布時間:2020-07-12 01:34:12 來源:網絡 閱讀:1067 作者:C語言豆子 欄目:編程語言

今天閑來無聊,帶著大家編寫黑窗口版本的2048,效果如下:

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

一、游戲介紹

《2048》是最近比較流行的一款數字游戲。原版2048首先在github上發布,原作者是Gabriele Cirulli。它是基于《1024》和《小3傳奇》(Threes!)的玩法開發而成的新型數字游戲。

二、游戲規則

游戲的規則很簡單,你需要控制所有方塊向同一個方向運動,兩個相同數字的方塊撞在一起之后合并成為他們的和,每次操作之后會在空白的方格處隨機生成一個2或者4(生成2的概率要大一些),最終得到一個“2048”的方塊就算勝利了。

三、核心算法

1、方塊移動和合并算法。

主要思想:把游戲數字面板抽象成4行4列的二維數組a[4][4],值為0的位置表示空方塊,其他表示對應數字方塊。把每一行同等對待,只研究一行的移動和合并算法,然后可以通過遍歷行來實現所有行的移動合并算法。在一行中,用b[4]表示一行的一位數組,使用兩個下標變量來遍歷列項,這里使用j和k,其中j總在k的后面,用來尋找k項后面第一個不為0的數字,而k項用于表示當前待比較的項,總是和j項之間隔著若干個數字0,或者干脆緊挨著。不失一般性,考慮往左滑動時,初始事情況下j等于1,而k等于0,接著判斷j項數字是否大于0,若是,則判斷j項和k項數字的關系,分成3種情況處理,分別是P1: ,P2: b[k]==0和P3: b[k]!=0且b[k]!=b[j];若否,則j自加1,然后繼續尋找k項后面第一個不為0的數字。其中P1,P2和P3分別對應如下:

P1:b[k]==b[j],則b[k] = 2 * b[k](說明兩數合并了),且b[j] = 0(合并之后要將殘留的j項值清零),接著k自加1,然后進行下一次循環。

P2:b[k]==0,則表示b[j]之前全是空格子,此時直接移動b[j]到k的位置,也就是b[k] = b[j],然后b[j] = 0(移動后將殘留的j項值清零),接著k值不變,然后進行下一次循環。

P3:b[k]!=0且b[k]!=b[j],則表示兩數不相等且都不為0,此時將兩數靠在一起,也就是b[k+1] = b[j]。接著分兩種小情況,若j!=k+1,則b[j] = 0(移動后將殘留的j項值清零);若否,則表示兩數原先就靠在一起,則不進行特殊處理(相當于未移動)。接著k自加1,然后進行下一次循環。

舉一個P1的例子,流程表示如下:

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

一行內移動合并算法描述如下(此例為左移情況,其他方向與之類似,區別僅僅是遍歷二維數組的行項和列項的方式):

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

2、判斷游戲是否結束算法

核心思想:遍歷二維數組,看是否存在橫向和縱向兩個相鄰的元素相等,若存在,則游戲不結束,若不存在,則游戲結束。

算法代碼描述如下(board表示真正的游戲源碼中使用的二維數組):

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

3、生成隨機數算法

核心思想:根據生成的隨機數,對一定的值進行取模,達到生成一定概率的數。在本游戲中,設定出現2的概率是4的兩倍,于是可以利用系統提供的隨機數函數生成一個數,然后對3取余,得到的數若小于2則在游戲面板空格處生成一個2,若余數等于2,則生成4。在選擇將在哪一個空格出生成數的時候,也是根據系統提供的隨機函數生成一個數,然后對空格數取余,然后在第余數個空格出生成數字。

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼

4、繪制界面的算法

核心思想:利用系統提供的控制臺界面清屏功能,達到刷新界面的效果,利用控制制表符位置,達到繪制游戲數字面板的效果。

由于繪制界面不算是本游戲的本質,且代碼段相對較長,所以算法描述在這里省略,讀者可以參考完整源代碼。

四、完整源代碼如下,代碼過多動圖展示,有興趣可以入駐寒舍獲取:

400行代碼編C語言控制臺界版2048游戲,編寫瘋子一樣的C語言代碼


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会理县| 南木林县| 涪陵区| 东辽县| 石楼县| 土默特左旗| 南召县| 东海县| 山阳县| 上蔡县| 木兰县| 五华县| 察哈| 文水县| 博爱县| 吐鲁番市| 丽水市| 昌吉市| 福安市| 普格县| 肃北| 金塔县| 波密县| 福贡县| 莫力| 景洪市| 布拖县| 内江市| 治县。| 沭阳县| 绥中县| 皋兰县| 兴隆县| 泾阳县| 武陟县| 汽车| 团风县| 繁昌县| 赤水市| 丹东市| 黔西县|