跳到主要內容

很讚的遊戲編輯器

簡介

good是一個輕量的2D遊戲編輯器,中文名稱叫作很讚的遊戲編輯器!

剛開始的時候其實也沒有想的太多,只想到要作到可以用來編輯鋤草機這個遊戲的一個關卡就夠了。而現在也的確達到了這個目標。廢話不多說,我們直接開始,透過編輯一個簡單的遊戲關卡來看看good能作到什麼,也等於對good作一個很簡單的介紹。


開新專案

首先把good執行起來,可以看到如下圖所示的畫面。


點擊一下左側上半部的資源樹上的Project項目。可以看到資源樹下方的屬性檢視器跟著產生變化。


在Name欄位填上專案的名稱:鋤草機,其它欄位保留預設值不動。你可以發現到編輯器視窗的標題列產生了變化,標題變成了good - (鋤草機),同時工具列上的存檔鈕也致能了。點擊存檔鈕,給一個檔名把專案存到一個你想要的地方。你可以發現,編輯器的標題又改變了,這次加上了專案檔的路徑及檔案名稱。



新增圖形資源


接著我們要新增鋤草機需要使用到的圖形資源,一共是二張圖。點擊工具列上的新增圖形資源鈕叫出視窗介面。


Name欄位填不填無所謂,重點是File欄位。點擊File欄位最右側的鈕叫出開啟舊檔對話盒視窗,挑選我們想要加入的圖形檔案加入到專案裡。


點擊資源樹上的tex2,再點擊一下屬性檢視器上的KeyColor欄位。點擊KeyColor欄位後,在欄位的右側會出現一個小鈕,再點擊這個小鈕叫出顏色選擇介面,接著選擇RGB值為R:253 G:0 B:255的顏色值後按下確定。


以上的動作是因為我們的tex2需要使用到鏤空色的功能而作的鏤空色設定。而tex1(如下圖)只作為靜態背景圖,就不需要作鏤空色的設定。


這裡補充說明一下,每一個資源項目無論是那種類別都會有幾個共同的屬性。從屬性檢視器裡面可以看到最上面的Id以及Name屬性就是共用的屬性。Id是用來辨別不同資源的,每一個Id都是唯一的,對於Id這個屬性以後我們還會再提到。再來是Name屬性,這是個可有可無的欄位,也因此這個欄位也不需保證是唯一的。


編輯地圖

接下來點擊工具列上的新增地圖鈕叫出介面視窗。


我們現在要新增一個6X6個Tile的地圖,所以在Width及Height各填上6。每一個Tile的大小是32X32,這剛好是預設值。最後在Tileset的Texture欄位最右側點擊選擇圖形鈕叫出介面視窗來,選取剛剛加入的tex2圖形資源作為我們用來編輯地圖的Tileset。


點擊下一步,可以看到輔助線設定介面,這邊我們暫時跳過,直接點擊完成。如下圖所示,點擊完成後成功加入一個新的空白地圖。


接著使用地圖編輯器完成如下圖的地圖編輯。


新增精靈

如圖所示,點擊工具列上的新增精靈鈕叫出介面視窗。


Tile Width及Tile Height指定的是精靈的大小,預設值是32X32正好也是我們想要的大小。和新增地圖時一樣,在Tileset的Texture欄位最右側點擊選擇圖形鈕叫出介面視窗來,選取tex2作為我們用來編輯精靈的Tileset。最後點擊完成加入一個新的空白精靈資源。


一個精靈是由一個以上的Frame所組成,每一個Frame包含了顯示Frame所需要的對應到Tileset的Tile編號,以及一個顯示延遲時間。Tile的選擇方法和在編輯地圖一樣,從編輯器上的Tileset檢視區上作選取。可以單選,也可以一次選取一個矩形區域範圍。而顯示延遲時間的單位則是畫格數(Frame)。

我們屬性檢視器裡看過Project項目的屬性,其中有一個叫作Frame Rate的欄位。這個欄位所指定的是每一秒鐘裡面,畫面更新的次數,60表示每秒60個畫面的更新速率。而Frame的顯示延遲時間單位也是以同樣的方法定義,所以一個精靈的Frame顯示延遲時間是30的話,在每秒60個畫面的更新速率設定下,就是顯示0.5秒的意思。相對的如果是在每秒30個畫面的更新速率設定下,就是顯示1秒的意思。

接著加入並編輯以下12個精靈,每個精靈的播放速度都設定為60個Frame。加入的同時,順便指定如圖中的名稱。

完成後如下圖所示。


編輯關卡

終於要進入正題編輯關卡了。編輯關卡需要的操作和編輯地圖並不會有太大差異,一個是在種物件另一個是在塗地磚。

首先點擊工具列上的新增關卡鈕,和前面介紹過的像是地圖資源或精靈資源等的新增操作不同的時,新增關卡時不需要作什麼參數設定,當你一點擊新增關卡鈕立刻就可以新增一個空白的關卡。


完成後如下圖所示,你可以得到一個空白的關卡。關卡的大小預設和Project所設定的視窗大小相同,你可以再關據你的需求作調整。ClearColor屬性是用在當關卡要成像之前使用來作背景清除的一個顏色值,你可以指定也可以不指定。而Script和ScriptParam欄位我們暫時先不去管它,以後會再作說明。


編輯關卡時我們可以在空白關卡上面種植三種類型的物件,使用如下圖中所示的三個鈕,可以分別加入貼圖物件、地圖物件和精靈物件。顧名思義,當我們要種植一個地圖物件到關卡上面時,首先就要從我們已編輯好的地圖裡面選取一個出來,然後種到關卡上面指定的位置。

首先加入一個貼圖物件,完成後如下圖所示。


關卡上的物件常常需要重新定位,需要移動到我們預期的位置。要移動物件是一件很簡單的事,只需使用滑鼠拖曳著物件到喜歡的位置再放開就可以了。或者也可以在點選物件後,在屬性檢視器上改變物件的PosX和PosY欄位值也能達到改變坐標的目的。

和關卡相同,每個物件都擁有Script和ScriptParam欄位,這邊我們也暫時先忽略不看,以後再提。除此之外還可以看到一個叫Visible的屬性,這個屬性是用來指定這個物件在執行時是否是可見的。有一點要注意的是,即使你把Visible屬性設為False不可見,但在編輯器裡仍然是可見的。

如下圖所示,完成我們的第一個關卡。


最後點擊工具列上的紅色驚嘆號鈕,或者由選單Project裡點選Play...,又或者按下快速鍵F5執行我們的關卡看看。你可以發現到不像是編輯器那樣都是靜態的圖形,關卡上的精靈物件都會動了。

可是這遊戲還不能玩啊!這是怎麼回事,從頭到尾都只是在編輯資料,沒見到什麼地方可以編輯GamePlay,這是黑心遊戲編輯器嗎!?的確,其實這個編輯器的確只能編輯資料不能編輯GamePlay,所以把它叫作遊戲編輯器是比較誇大的說法,而且還叫作很讚的遊戲編輯器,真夠黑心。

不過別急,我們還是有辨法可以作GamePlay,只不過你需要寫點Script。我們選擇了Lua來作為good的Script語言。可以在編輯器裡作遊戲邏輯的編輯的話,雖然可以讓編輯器變的更強大,但相對的編輯器就會變複雜了,至少在開發上會變的複雜。所以為了讓事情簡單才作出這樣的決定。也許以為會再加強也說不定。

下回我們再來說明如何使用Script來為我們的關卡加上GamePlay完成這個超小品遊戲!

留言

這個網誌中的熱門文章

KillSudoku 4顆星精彩數獨詳解 - 鍊技巧

這題數獨(sudoku)題目估計為4+顆星,有點難度。解題需要應用多種技巧,過程非常精彩有趣,是個好題。 底下使用 KillSudoku 作詳細圖解。 1,使用基本排除法則,可以簡單填入6個數字。到此為止,開始使用 候選數法 來解題。如下所示,為填入6個數字後的狀態圖。 2,如下圖,使用進階排除法,在第9列和第4行可以先排除幾個候選數。 3,如圖,在第2行有一個 Naked Subset (3,4),可以對3,4候選數作排除。附帶提一下,反過來看在同一行裡面也可以說有另一個Hidden Subset(2,5,8)存在。Naked Subset和Hidden Subset常是一體二面同時存在,只不過對我們來說,Naked Subset是相對比較容易看的出來。 排除第2行的3,4後,又可以對第2列以外的3作排除,如下圖。 4,接著,在第5行又發現了一個 Naked Subset (3,7,8)。 對第5行三個Subset以外的候選數3,7,8作排除後,又接著產生可以對第5行以外的3作排除。 5,這一題解到此為止,開始進入高潮。大部份能解到3顆星題目的人,猜想應該就此卡住。以下開始需要應用更高級的鍊技巧,才能夠繼續進行。 應用X-Chains鍊技巧,可以找到一條由4條強連結組成的鍊,可以排除候選數2。這裡的鍊指的是由2條以上的強連結組成,而所謂的強連結是指在同一行、或同一列或同一個Box裡,由唯二的候選數構成的連結。如上圖中的第9行中,只有二個2,這二個2構成一條強連結。為什麼說這是一條強連結?因為在這條連結的AB二個端點中,肯定會有一個2存在,要麼是A點要麼是B點。鍊技巧就是將多條強連結串連起來作候選數排除的技巧,而X-Chains是高級的鍊技巧裡面的基本技巧。 接上圖,這樣一來就又可以應用基本排除方法,填入3個數字,如下圖所示。 6,接下來就是本題最精彩的部份,以下需要連續找到3條鍊,才能繼續往下解。 7,找出3條鍊後,剩下來的部份就沒什麼特別的了,只需要應用基本法就能把所有剩餘數字填完。

猜數字遊戲 (電腦猜人)

前幾天午睡時突然被告知要參加公司內部的程式設計比賽,題目是用C寫一支文字模式的4位數字猜數字遊戲,由使用者來猜電腦的數字。在上星期時其實就已經有公佈了,但我沒有注意到所以是臨時加入,還好這是個簡單的題目,不用花多少時間就可以寫出來。 規則: - 這是一對一比賽,雙方各選擇一4位數字,不讓對方知道。 - 4位數字由數字0至9組成,每位數不得重複。 - 雙方輪流猜對方的數字,直到一方猜中為止。 - A方猜B方的數字後,B方根據A方的猜測回答幾A幾B。 - 一個A表示猜中一個數字且位置正確,一個B表示猜中一個數字但位置不正確。 - 當一方猜中4A0B時即表示猜中對方全部4個數字且位置正確,贏得比賽。 - 例:B的謎底是4208,底下箭頭左測是A的猜測,箭頭右測是B的回答。    1234 ==> 1A1B    5678 ==> 1A0B    2406 ==> 1A2B    ...    4208 ==> 4A0B ; 寫個程式讓玩家來猜電腦的數字不難,不過我從來沒有寫過讓電腦來猜玩家數字的版本,所以花了點時間想想怎麼寫。 研究後歸納出二個點。 1, 使用窮舉法將所有可能數字組合列出。 2, 每次猜測後根據結果排除不可能是答案的組合,重複這個動作直到猜中答案為止。 第1點只是實作問題,第2點概念也很簡單,但要過濾不是答案的組合根據的是什麼?乍看之下沒什麼頭緒,不過想通之後就非常簡單了。 它的基本原理如下:假如謎底是4561,如果猜1524則會得到1A2B。從相反的角度來看,如果謎底是1524,則猜4561時也會得到1A2B的回答。 利用這個方法,每一次猜測一個數字X後,再以這個數字當作答案,來和所有剩下來的候選答案作比對,如果得到的結果(幾A幾B)和數字X是一樣的話,就把這個數字保留下來繼續作為候選答案,否則就過把這個數字過濾掉。下一把,繼續從候選答案裡選一個出來猜,重複上面的動作,直到猜中為止。 ; C++ STL的algorithm裡有個叫作next_permutation的函數,可以用來生成排列。 #include <iostream> #include <algorithm> using namespace std; int main () {   int myints[] = {1,2,3};  ...

生成小鎮1010 - 用 Ollama 製作一個在本機執行的生成式文字冒險小遊戲

  生成小鎮 1010 是一個利用在本機執行的大語言模型,動態的生成遊戲地圖及根據玩家互動生成故事劇情及任務內容的文字冒險小遊戲。 完成環境建置後,就可以到  Ollama 官網  下載模型,在本機開始測試遊戲。 處理器(CPU) 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 記憶體(RAM) 40.0 GB 顯示卡 Intel(R) Iris(R) Xe Graphics 128 M 系統 Windows 11 家用版 24H2 這是我的筆電規格。在我的筆電上跑  gemma3:4b-it-q4_K_M  模型,勉強可以玩。如果你有更強的硬體,就能夠利用更大的模型,得到更好的遊戲內容體驗。 gemma 是 Google 的開放的整合了視覺理解能力多模態大語言模型。4b: 是模型參數大小,表示 40 憶個參數。q4_K_M: 是一種減少模型大小和提高效率的技術,它涉及到將模型中的數值精度降低,並減少了對記憶體和計算資源的需求。 你也可以根據自己的需要或喜好,選擇下載不同模型。 [ GitHub ] 1. 準備工作 1.1 什麼是 Ollama Ollama 是一個可以在本機運行大型語言模型(LLM)如 LLaMA、Mistral、Gemma 等的開源工具。它的目的是讓開發者和使用者可以更輕鬆地在自己的電腦上執行和使用這些 AI 模型,而不需要依賴雲端服務。Ollama 的特點是: 本地運行模型  你可以直接在 Windows、macOS 或 Linux 上下載並運行語言模型,無需連網使用 API。 簡單的 CLI 工具  安裝後只需要輸入像 ollama run llama3 這樣的指令就可以開始對話。 支援多種模型  包含 Meta 的 LLaMA、Mistral、Gemma、Deepseek 等模型,也可以自訂模型。 開發整合容易  提供簡單的 API(RESTful),方便整合到你自己的應用程式、網頁或手機 App 中。 節省成本與提高隱私  不用連接 OpenAI、Anthropic 或其他雲端 LLM,降低使用成本,也不會洩漏資料。 1.2 安裝 Ollama 訪問  Ollama 官網 ,根據你的作業系...