こんにちは。
RPGツクールMZで自作ゲーム制作中。メインとサブがありますが今はメインが停滞してます。
サブの方は初めて作ったRPGと同じ登場人物がいるのでシリーズってわけじゃないですけど一部システムを踏襲したいと考えてます。
初回作RPGではアイテム合成があって、その合成アイテムを使ってスキルを発動し回復やバフの効果を得るっていうシステムがあったのですが、アイテム合成からのバフはまた取り入れたいのです。
前は合成素材が3種で2つまたは3つの素材を合わせて作る(重複なし)というものだったので 2つの組み合わせが3通り、3つの組み合わせが1通りの4パターンを作ればよかったのです(正確にはフルーツ合成とスパイス合成があって4パターンずつの8パターン)。
こんな感じ↓
制作中のやつはぐっと数を増やして3つの素材を消費する合成にして100パターンくらいに収めたいなと思ったのですが、作るならまず素材の種類をいくつにしたらいいのかを考えなければならないですよね。
たしか高校生のときにこういう計算を習ったハズなのでがんばって思い出しましょう。
よみがえれ青春の日々・・・!!
(゚∀゚)
ダメだったのでネットで調べました。
n個の中からr個選ぶ組み合わせはnCr 。これは順番を考慮しない場合のヤツで、○△と△○は同じとみなす計算方法。△△のような重複はしないものとしています。
順番が違ったときを別とするならnPr。順列の計算というやつです。こちらも重複はないものとしたとき。
具体的な計算方法を知りたい場合はネットで検索してください。
こちらのサイトには自動計算機能があります↓
作りたいものは"重複を許す組み合わせ"なので n+r-1Cr。3つの素材を使って合成するのでrが3。知りたいのは 組み合わせ結果が100以下で一番大きくなるnの値(=作成すべき素材アイテムの種類)。
答えはnが7で組み合わせが84通り。
合成素材を食材、合成後アイテムを料理とします。食材を7種作り、料理を84種類作らねばなりません。
管理するには表が欲しいですね。
表の作成はやはりEXCELが得意とするところなのでEXCELを使います。
以下のvbaを実行すると7つから重複を許して3つ選ぶ全組み合わせがシートに書き出されます。
Sub makeConbinationList() Dim DataArr As Variant Dim itemA As String Dim itemB As String Dim itemC As String Dim i As Integer Dim j As Integer Dim k As Integer Dim cnt As Integer DataArr = Array("a", "b", "c", "d", "e", "f", "g") cnt = 0 For i = 0 To UBound(DataArr) itemA = DataArr(i) For j = i To UBound(DataArr) itemB = DataArr(j) For k = j To UBound(DataArr) itemC = DataArr(k) Call inputItems(itemA, itemB, itemC, cnt + 1) cnt = cnt + 1 Next Next Next End Sub Sub inputItems(AA As String, BB As String, CC As String, row As Integer) Dim wb As Workbook Dim ws As Worksheet Set wb = ThisWorkbook Set ws = wb.Sheets(1) ws.Cells(row, 1) = AA ws.Cells(row, 2) = BB ws.Cells(row, 3) = CC Set ws = Nothing Set wb = Nothing End Sub
途中にある DataArr = Array("a", "b", "c", "d", "e", "f", "g")のところ、()の中が素材名・素材数にあたる部分なので変えたい場合はここを弄ります。
例えば素材を4つにしたいならDataArr = Array("肉", "魚", "野菜","米") とか。
実行方法↓
①EXCELを開いたらAlt+F11でエディタを開く
②挿入→標準モジュールを選ぶ
③中央あたりの空白部分に上のコードをコピー&ペースト
④コードを編集したい場合は編集する
⑤先頭行、Sub makeConbinationList()の下にカーソルを置く(クリック)
⑥F5キーで実行
Excelファイルを保存するときは拡張子を.xlsmにして保存しましょう。さもなくばコードは消えます( ゚Д゚)
3つ選ぶ、というのを2つ選ぶ、にしたい場合は以下のコードを消します。
Dim itemC As String
Dim k As Integer
For k = j To UBound(DataArr)
itemC = DataArr(k)
Call inputItems~の itemC, の部分
Next (cnt = cnt + 1の直後のやつを1つだけ消す)
Sub inputItems~ の CC As String, の部分
ws.Cells(row, 3) = CC
Excelがあったら最初の組み合わせ計算はいらんかったんだけどね。一応ね。
さて84種の料理名と効果を考えてさらにアイコンをどうにかしなければ。
これは半年はかかるな…。