エクセルやスプレッドシートでゲームの面エディットみたいなことを目標に「エクセルで構造体をVBA出力」

VBAを使って出力
まずはC++の構造体だけ

ファイルを別名保存してマクロ付きの .xlsmにしておく
エクセルにVBAを追加する


ついでにデータ型などの選択肢が扱いづらいので 文字の頭に数字をつけておく   "1;" とか


標準モジュールに追加


標準モジュールに入れた内容
'   出力


'------------------------------------
Const struct_h_filename As String = "struct_system.h"
Const struct_name As String = "STRUCT_SYSTEM"

'------------------------------------
Dim book_this As Workbook
Dim sheet_system As Worksheet


'------------------------------------
'   項目
Type 項目
    要素数 As Integer
    変数名 As String
    型 As Integer
End Type
Dim 項目リスト() As 項目


'------------------------------------
'   出力
Sub 全出力()
    Dim w1 As Long
    Set book_this = ActiveWorkbook
    If book_this Is Nothing Then Exit Sub
    Set sheet_system = book_this.Sheets("#system")
    If sheet_system Is Nothing Then Exit Sub
    '
    ReDim 項目リスト(0)
    w1 = 解析_system(sheet_system)
    'w2 = UBound(項目リスト)
    出力_system struct_h_filename, struct_name
End Sub

'------------------------------------
'   解析
Function 解析_system(sh As Worksheet) As Long
    Dim y As Long
    Dim w As Long
    解析_system = 0
    w = 0
    Dim t要素数 As Integer
    Dim t変数名 As String
    Dim t型 As Integer
    '
    For y = 1 To sh.UsedRange.Rows.Count + 10
        If sh.Cells(y, "A") <> "" And sh.Cells(y, "B") <> "" And sh.Cells(y, "C") <> "" Then
            t要素数 = Val(sh.Cells(y, "A").Value)
            t変数名 = sh.Cells(y, "B").Value
            t型 = Val(sh.Cells(y, "C").Value)
            If t要素数 > 0 And t型 > 0 Then
                w = w + 1
                ReDim Preserve 項目リスト(w)
                項目リスト(w).要素数 = t要素数
                項目リスト(w).変数名 = t変数名
                項目リスト(w).型 = t型
            End If
        End If
    Next y
    '
    解析_system = w
End Function

'------------------------------------
'   出力
Sub 出力_system(fn As String, vn As String)
    Dim y As Long
    Dim ym As Long
    Dim st As String
    ym = UBound(項目リスト)
    '
    '
    Open fn For Output As #1
    '
    Print #1, "#pragma once"
    Print #1, "/**"
    Print #1, "    @brief   項目リスト"
    Print #1, "    @author  " & book_this.Name
    Print #1, "*/"
    Print #1, ""
    Print #1, "/** ---  項目リスト --- */"
    Print #1, "struct " & vn & "{"
    For y = 1 To ym
        st = "    "
        With 項目リスト(y)
            If .型 = 1 Then st = st & "char  "
            If .型 = 2 Then st = st & "short "
            If .型 = 4 Then st = st & "long  "
            st = st & .変数名
            If .要素数 > 1 Then
                st = st & "[" & .要素数 & "]"
            End If
            Print #1, st & ";"
        End With
    Next y
    Print #1, "};"
    Print #1, "#define " & vn & "_MAX " & ym
    Close #1
End Sub


C++用の構造体を作成



結果


struct_system.h
#pragma once
/**
    @brief   項目リスト
    @author  ステージ設定.xlsm
*/

/** ---  項目リスト --- */
struct STRUCT_SYSTEM{
    short ステージサイズ[2];
    short プレイヤーの位置[2];
    char  プレイヤーの向き;
    char  終了条件;
    char  禁止キー[6];
    char  弾数;
    char  操作説明番号;
    char  黒の明るさ;
};
#define STRUCT_SYSTEM_MAX 8

各面ごとの設定を保存する予定のバイナリーデータ
それを読み込むための構造体

(設定項目を増やしたり減らしたりの都度ゲームのソースを変更しなくてすむように)




次は面ごとのバイナリーデータの保存

コメント