發(fā)布時間:2023-11-27 02:07:18 瀏覽量:135次
這篇連連看教程我嘗試換一種方式,多講一些算法思路和編程思想,少貼一些代碼。
大家應(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 就可以完成初始化。
斷點運行觀察數(shù)組數(shù)據(jù),和我們設(shè)計的一樣:
貼上圖片看起來還不錯:
現(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)折連接:
代碼碼完了,添上圖片和鼠標檢測的代碼跑一跑試試。
右邊顯示臨時顯示字符用于測試連通性,多次測試沒有問題。
最后加上連線,并清除被點擊的兩個格子,就完成了連連看的核心邏輯。你學會了嗎?
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點擊咨詢報名。
2. 手機游戲如何開發(fā)(如何制作傳奇手游,都需要準備些什么?)
?如何制作傳奇手游,都需要準備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白。快來試試!
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟體系揭秘,不同玩家角色的經(jīng)濟活動
Bigtime加密游戲經(jīng)濟模型分析,探討游戲經(jīng)濟特點,幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當提到3D動畫軟件或動畫工具時,指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
7. 3D動漫建模全過程,不是一般人能學的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準備設(shè)計圖片,我從雕刻進入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨立游戲開發(fā)技巧都可以幫助您更好地設(shè)計下一款游戲。無論你對游戲有著什么樣的概念,都
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅固
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計技巧,讓你輕松掌握!
最新文章
同學您好!