アイストマトバズーカのゲーム制作日記

いろいろ超初心者がゲーム制作に挑戦。現在RPGツクールMZでフリーゲーム制作中。フリー素材も作って置いてます。

MENU

アイテム合成の組み合わせを考える(。-`ω-) 重複を許す組み合わせと EXCEL VBAで表作成

こんにちは。

 

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種の料理名と効果を考えてさらにアイコンをどうにかしなければ。

 

これは半年はかかるな…。