VBAを使って出力
まずはC++の構造体だけ
ファイルを別名保存してマクロ付きの .xlsmにしておく
エクセルにVBAを追加する

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

標準モジュールに追加
標準モジュールに入れた内容
C++用の構造体を作成
結果
struct_system.h
各面ごとの設定を保存する予定のバイナリーデータ
それを読み込むための構造体
(設定項目を増やしたり減らしたりの都度ゲームのソースを変更しなくてすむように)
次は面ごとのバイナリーデータの保存
まずは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 |
それを読み込むための構造体
(設定項目を増やしたり減らしたりの都度ゲームのソースを変更しなくてすむように)
次は面ごとのバイナリーデータの保存
コメント
コメントを投稿