五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

C++游戲開發(fā),超簡單的入門項目,200行代碼搞定開心消消樂

2023-06-08 15:55 作者:愛編程的板板  | 我要投稿

一提到開發(fā)游戲,很多人都會覺得要很高深的技術(shù),有一種望塵莫及的感覺。其實要編一款小游戲也沒有想象的那么難,下面跟著小編一起來看看C++是如何一步步制作游戲的。

本文的代碼下載地址看UP主頁介紹,有需要的同學(xué)自取。

大家應(yīng)該都玩過連連看,游戲規(guī)則不多說了,我們先看看設(shè)計思路。

第一件事要根據(jù)游戲玩法確定程序的數(shù)據(jù)結(jié)構(gòu),不同的數(shù)據(jù)結(jié)構(gòu)決定了不同的算法設(shè)計,用錯了數(shù)據(jù)結(jié)構(gòu)可能直接讓代碼復(fù)雜好幾倍。

連連看中玩家操作的數(shù)據(jù)是一個個的圖片,多個圖片組成一個棋盤式的矩陣界面。程序根據(jù)玩家的點擊位置計算兩個圖片的連接路線,這要求程序以最快、最簡單的方式獲得矩陣中每個格子的數(shù)據(jù)。

用二維數(shù)組表示游戲中的矩陣界面比較合適,因為數(shù)組可以通過索引快速訪問數(shù)據(jù),二維數(shù)組的兩個索引剛好對應(yīng)矩陣界面的(x, y)坐標。例如:

圖中矩陣數(shù)據(jù)在代碼中應(yīng)該這樣表示:

可以用不同的數(shù)字代表不同的圖片,比如:

那么上面的矩陣繪制的時候就會是這樣:

0表示空格,不顯示圖片。初始化時的空格或消除后的空格,都會被設(shè)置為0。

接下來要初始化數(shù)據(jù),我打算用8種不一樣的圖片,每種6張,隨機放入矩陣中,矩陣最外一圈是空的。這個算法可以用標準庫函數(shù) std::random_shuffle 來完成。

std::random_shuffle 用于把容器內(nèi)的數(shù)據(jù)隨機打亂,因此按順序把數(shù)據(jù)放入數(shù)組中,然后調(diào)用 std::random_shuffle 就可以完成初始化。

貼上圖片看起來還不錯:

現(xiàn)在來分析游戲玩法。

這個游戲的難點是兩個圖片連接的判定算法,要求連接線只能轉(zhuǎn)折兩次。

我的第一反應(yīng)這是一個尋路算法,要求找到轉(zhuǎn)折兩次以下的最短路徑。教科書上常見的廣度優(yōu)先搜索、深度優(yōu)先搜索、DijKstra算法或是游戲中常用的A星算法,稍作修改加上兩次轉(zhuǎn)折的限制都能解決這個問題。

但是如果我用這些比較復(fù)雜的算法來教新手,顯然是在勸退。所以還是考慮找一找連線判定的算法有沒有簡單的規(guī)律。

多玩幾次游戲,把不同種類的連線記錄下來,總結(jié)后可以發(fā)現(xiàn)總共有3種連線類型,分別是不轉(zhuǎn)折連接、轉(zhuǎn)折一次和轉(zhuǎn)折兩次。

還是從最簡單的情況開始考慮。這是解決難題的通用方法:從最簡單的情況開始考慮,再逐步增加復(fù)雜的條件。

最簡單的不轉(zhuǎn)折連接,有兩種情況,橫向連線和縱向連線:

這兩種情況很容易處理,橫向、豎向依次檢查每個格子是否被阻擋即可。

最后把這兩個合并就是不轉(zhuǎn)折的情況下:

轉(zhuǎn)折一次:

轉(zhuǎn)折一次的算法也是比較明顯的,像上圖中的兩種情況,找到綠色點的位置,如果這個點可以不轉(zhuǎn)折連到兩個紅色的圖片,那么這兩個紅色的圖片就可以通過一次轉(zhuǎn)折連接。

綠點的位置是由兩個紅點決定的,只有上圖中的兩種可能。

轉(zhuǎn)折兩次的情況就多了,下圖同樣是連接紅色圖片,要繞過綠色圖片。

轉(zhuǎn)折兩次的情況很多,這里無法一一列舉,但是仔細思考可以發(fā)現(xiàn)和轉(zhuǎn)折一次本質(zhì)上是一樣的,就是找到兩個點,這兩個點可以分別和紅色圖片無轉(zhuǎn)折連接,并且這兩個點也可以無轉(zhuǎn)折連接。

這兩個點需要位于經(jīng)過紅色圖片的十字線上,并且只要確定一個了其中一個點,就能對應(yīng)地找到另一個點:

因此只要遍歷其中一個圖片的兩條十字線經(jīng)過的所有的點,并計算出另一個圖片十字線上對應(yīng)點的位置,檢查這兩個點和兩個紅色圖片是否可以無轉(zhuǎn)折連接:

代碼碼完了,添上圖片和鼠標檢測的代碼跑一跑試試。

右邊顯示臨時顯示字符用于測試連通性,多次測試沒有問題。

最后加上連線,并清除被點擊的兩個格子,就完成了連連看的核心邏輯:

文明看帖,點贊+關(guān)注+收藏一波走起~


C++游戲開發(fā),超簡單的入門項目,200行代碼搞定開心消消樂的評論 (共 條)

分享到微博請遵守國家法律
东兰县| 巩留县| 叙永县| 南昌市| 曲松县| 康定县| 分宜县| 闽清县| 宜黄县| 涟水县| 年辖:市辖区| 固阳县| 崇州市| 通州区| 万荣县| 宁蒗| 永城市| 宁都县| 织金县| 汉沽区| 厦门市| 陆河县| 大丰市| 栾川县| 临泉县| 乡城县| 蓬溪县| 古浪县| 枣阳市| 灵宝市| 历史| 杨浦区| 互助| 梁平县| 巴东县| 库尔勒市| 咸宁市| 廊坊市| 宜春市| 昌乐县| 彰化县|