最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

開源項(xiàng)目:2048程序!C語言編程練手小游戲,400行源碼分享

2022-03-22 17:01 作者:C語言編程__Plus  | 我要投稿

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


游戲規(guī)則

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

核心算法

1、方塊移動和合并算法

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

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

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

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

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

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

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

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

4、繪制界面的算法

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

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

源碼示例:


效果示例:


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

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

C語言C++編程學(xué)習(xí)交流圈子,【點(diǎn)擊進(jìn)入】微信公眾號:C語言編程學(xué)習(xí)基地

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!

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

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


開源項(xiàng)目:2048程序!C語言編程練手小游戲,400行源碼分享的評論 (共 條)

分享到微博請遵守國家法律
满洲里市| 修水县| 陵水| 昌黎县| 岱山县| 新源县| 安阳县| 永和县| 宜川县| 鄢陵县| 香河县| 阳谷县| 司法| 左贡县| 丹阳市| 东乌珠穆沁旗| 九寨沟县| 雷州市| 儋州市| 武宣县| 治县。| 宁阳县| 灵璧县| 华亭县| 临高县| 佛山市| 淮北市| 丹凤县| 长沙县| 上栗县| 巫山县| 花莲市| 英山县| 隆化县| 甘孜县| 调兵山市| 简阳市| 肥西县| 贡山| 罗山县| 泾川县|