前回「ほぼ最終仕様」と書いてから、ゲーム本来の部分はテストのみで、メニュー「ゲーム」「セルの情報」表示でバタバタした以外は「もうこれで行くかな?」という状態になりました。(注)
注:実は「人口爆発」時、C++ STLのvectorを使ったセルの登録(push_back)や、全セルの情報をstring文字列に集約する辺りで、メモリー侵害が起きているらしく、フッと落ちたりすることが有ります。ダイナミックデバッガーを持っていないのと、毎回同じように起こるわけではないので、匙を投げて「その時は、その時でやり直してください。」という感じで(実害はないので、無責任に)リリースしたいと思います。
ということで、今も動作試験は続けていますが、話が長いのでボチボチとCell.exeについて書き始めたいと思います。
さて、何度か書きましたが、BCCSkeltonによるC++プログラミングのスタートはリソース設計を固める事でした。今回もCell.rcファイル(その整数値定義のヘッダーファイル、ResCell.hは省略します)から説明します。
【Cell.rc】
//-----------------------------------------
// BCCForm Ver 2.41
// An Easy Resource Editor for BCC
// Copyright (c) February 2002 by ysama
//-----------------------------------------
#include "ResCell.h" //解説:上記の通り、説明は省略します。
#define TBSTYLE_TOOLTIPS 0x0100 //解説:どういう訳か、Embarcadero C++にはこの定義がないので、手書き追加
#define SBT_TOOLTIPS 0x0800 //解説:Ditto
//----------------------------------
// ダイアログ (IDD_DLG)
//----------------------------------
//IDD_DLG DIALOG DISCARDABLE 0, 0, 853, 396 //(Times New Roman)80 x 40の16 x 16ビットマップサイズ
IDD_DLG DIALOG DISCARDABLE 0, 0, 732, 348 //(Noto Serif JP Medium)80 x 40の16 x 16ビットマップサイズ
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_DLGFRAME | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | DS_SETFONT | DS_CENTER
CAPTION "Cell"
MENU IDM_FORM_MENU
//FONT 8, "Times New Roman"
FONT 8, "Noto Serif JP Medium"
{
CONTROL "StatusBar", IDC_STATUSBAR, "MSCTLS_STATUSBAR32", WS_CHILD | WS_VISIBLE | CCS_TOP | SBT_TOOLTIPS | CCS_NOMOVEY, 0, 498, 555, 12
CONTROL "ToolBar", IDC_TOOLBAR, "TOOLBARWINDOW32", WS_CHILD | WS_VISIBLE | WS_BORDER | TBSTYLE_SEP | TBSTYLE_TOOLTIPS, 0, 0, 555, 18
}
//解説:メインダイアログです。最初フォントをTimes New Romanにしたのですが、日本語表示が出来ないので、Noto Serif JPへ変更しました。その結果、寸法取りを変更することになりました。
//----------------------------------
// ダイアログで使用するメニュー
//----------------------------------
IDM_FORM_MENU MENU DISCARDABLE
{
POPUP "ファイル(&F)"
{
MENUITEM "データを開く(&O)", IDM_OPEN
MENUITEM SEPARATOR
MENUITEM "終了(&X)", IDM_EXIT
}
POPUP "ゲーム(&G)"
{
MENUITEM "ゲーム開始(&S)", IDM_START
MENUITEM SEPARATOR
MENUITEM "Cellの情報(&C)", IDM_CELLS, GRAYED //解説:最初は殺しておきます
MENUITEM SEPARATOR
MENUITEM "ゲーム中止(&A)", IDM_ABORT, GRAYED //解説:Ditto
}
POPUP "ヘルプ(&H)"
{
MENUITEM "バージョン情報(&V)", IDM_VERSION
}
}
//----------------------------------
// ダイアログ (IDD_INPUT)
//----------------------------------
IDD_INPUT DIALOG DISCARDABLE 0, 0, 96, 84
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION "Cellの生成数を指定"
FONT 8, "MS 明朝"
{
CONTROL "", IDC_COMBOBOX, "COMBOBOX", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWNLIST, 9, 6, 78, 72
CONTROL "異種族間婚許可", IDC_INTMARG, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, 12, 30, 78, 12
CONTROL "決定", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON, 30, 60, 36, 18
}
//解説:ゲームを開始するときにパラメーター(初期セル数と異種族間婚の許可)を入力するダイアログです。
//----------------------------------
// ダイアログ (IDD_SHOWTEXT)
//----------------------------------
IDD_SHOWTEXT DIALOG DISCARDABLE 0, 0, 436, 240
EXSTYLE WS_EX_DLGMODALFRAME //WS_EX_CLIENTEDGE //WS_EX_STATICEDGE, WS_EX_TOOLWINDOW
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME | WS_SYSMENU | WS_MINIMIZEBOX | DS_3DLOOK | DS_CENTER
CAPTION "セル情報一覧"
FONT 8, "Noto Serif JP Medium"
{
CONTROL "", IDC_EDIT, "EDIT", WS_CHILD | WS_BORDER | WS_VISIBLE | ES_READONLY | ES_MULTILINE | ES_WANTRETURN | WS_HSCROLL | WS_VSCROLL | ES_LEFT, 4, 4, 427, 216, WS_EX_CLIENTEDGE
CONTROL "終了", IDOK, "BUTTON", WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON, 198, 224, 40, 12
}
//解説:全セルの詳細情報はゲーム終了(中断)時にログ出力されますが、それをゲーム中に観る場合に使用するダイアログです。しかし、エディットコントロールの文字数が32,767バイトに制限されているので、「人口爆発」時には使えません。
//----------------------------------
// ダイアログ (IDD_VERSION)
//----------------------------------
IDD_VERSION DIALOG DISCARDABLE 0, 0, 160, 54
EXSTYLE WS_EX_DLGMODALFRAME
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | DS_MODALFRAME | DS_3DLOOK | DS_CENTER
CAPTION "バージョン情報"
FONT 9, "Times New Roman"
{
CONTROL IDI_ICON, 0, "STATIC", WS_CHILD | WS_VISIBLE | SS_ICON, 6, 8, 32, 32
CONTROL "Cell Version 1.0\r\nCopyright (c) 2025\r\nBy Ysama", IDC_VERTXT, "STATIC", SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 32, 4, 106, 26
CONTROL "OK", IDOK, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 66, 38, 26, 12
}
//解説:バージョン情報ダイアログです。
//--------------------------
// イメージ(IDI_ICON)
//--------------------------
IDI_ICON ICON DISCARDABLE "Cell.ico"
//解説:↓これです。

//--------------------------
// イメージ(IDI_TOOLBAR)
//--------------------------
IDI_TOOLBAR BITMAP DISCARDABLE "ToolBar.bmp"
//--------------------------
// イメージ(IDI_MOUNT)
//--------------------------
IDI_MOUNT BITMAP DISCARDABLE "Mountain.bmp"
//--------------------------
// イメージ(IDI_RIVER)
//--------------------------
IDI_RIVER BITMAP DISCARDABLE "River.bmp"
//--------------------------
// イメージ(IDI_FOOD)
//--------------------------
IDI_FOOD BITMAP DISCARDABLE "Food.bmp"
//--------------------------
// イメージ(IDI_FIELD)
//--------------------------
IDI_FIELD BITMAP DISCARDABLE "Field.bmp"
//--------------------------
// イメージ(IDI_CELLP)
//--------------------------
IDI_CELLP BITMAP DISCARDABLE "Cell-P.bmp"
//--------------------------
// イメージ(IDI_CELLB)
//--------------------------
IDI_CELLB BITMAP DISCARDABLE "Cell-B.bmp"
//--------------------------
// イメージ(IDI_CELLG)
//--------------------------
IDI_CELLG BITMAP DISCARDABLE "Cell-G.bmp"
//--------------------------
// イメージ(IDI_CELLD)
//--------------------------
IDI_CELLD BITMAP DISCARDABLE "Cell-D.bmp"
//解説:ビットマップは纏めて示します。↓これです。
上記をコンパイルしてプログラムに取り入れます。出来上がりは次の通り。

