NPC をコーディングして領地運営するゲーム開発(キャラクター初期化時に引数を渡せるようにした)
必須機能は実装し終えたので通しプレイをしながら機能実装してます。
今回は、キャラクターの初期化時に変数を渡せるようにしたのと、パンを生産するための建物を建築したところまでです。
キャラクター初期化時に変数を渡せるようにする
例えば農場が2箇所にあるようなときに、全く同じスクリプトで農民を2人作ると、同じ場所の農場で働いてしまうと思いました。なので、キャラクターを初期化するときに「この設定の人はこっちで働いてね」みたいな処理を実現するために、任意の引数を渡せるようにしました。
建築する人の建築場所を散らせる例(散らせる意味はあまりない)
-- 引数を渡さないときのキャラクター生成コード
local builder = Character:new(edict)
builder:setScript('builder')
-- 1 という引数を渡したキャラクター生成コード
local builder2nd = Character:new(edict)
builder2nd:setScript('builder', 1)
これらの呼び出しでは builder.lua が読み込まれて実行されるわけですが、このスクリプト中で以下のようにすることで、引数を渡さないときには siteIndex が 0, 渡すと 1 になり建築対象をずらすことができます。
return function(args)
local siteIndex = args or 0
(中略)
-- 作業する建築予定地を決める。
local site = sites[1 + (siteIndex % #sites)]
今回は1つの数値を引数として渡しただけですが、Lua の table として渡せば任意個数の値を渡せます。いい感じです。
パンを生産するための建物の建築
建築やキャラクター生成を担当する布告スクリプト edict.lua に、小麦粉を作るための畑を生成する「農場」、小麦粉を粉にする「製粉所」、小麦粉と薪からパンを作るための「キッチン」を建築するように指示して建築させたものがこれです。
↓64倍速での録画
いい感じです。
農場で小麦を収穫して製粉所まで運ぶ人や、小麦粉と薪とを集めてキッチンでパンを作る人のスクリプトはこれから作ります。
まとめと今後の予定
遊びながら必要になった機能を実装する開発方法が、それなりに良く機能していていい感じです。引き続きゲームクリアの条件を満たすまでプレイおよび開発していきます。がんばります。