前回「ほぼ最終仕様」と書いてから、ゲーム本来の部分はテストのみで、メニュー「ゲーム」「セルの情報」表示でバタバタした以外は「もうこれで行くかな?」という状態になりました。(

:実は「人口爆発」時、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"

//解説:ビットマップは纏めて示します。↓これです。

 

上記をコンパイルしてプログラムに取り入れます。出来上がりは次の通り。