2025年12月3日水曜日

【Python/PySide6】#1."Pixel Conquest"地図画像ゼロ!計算だけで描画する「自作戦略RTS」開発ログ

 

はじめに

現在、PythonとPySide6を用いて、独自の「戦略RTS(リアルタイムストラテジー)ゲームエンジン」を開発しています。

既存のゲームエンジン(Unityなど)を使わず、GUIライブラリであるPySide6の描画機能だけで、どこまで本格的な戦略シミュレーションが作れるか?という技術的な挑戦でもあります。

今回は、現段階で完成している「マップ自動生成システム」と「内政エンジン」の概要をまとめます。

§1. プロジェクトのコンセプト

「無限に遊べる地図を、ボタン一つで。」

 このゲームの最大の特徴は、画像素材を一切使わず、プログラム(数学)によって地形を動的に生成・描画している点です。 ユーザーは付属の「マップエディタ」で世界を創造し、そのデータを「ゲームエンジン」に読み込ませて遊ぶことができます。

§2. マップシステムの核心技術:ボロノイ図による領域生成

 戦略シミュレーションの命とも言える「プロヴィンス(領土の最小単位)」の作成には、ボロノイ図のアルゴリズムを採用しています。

A. 自動生成の仕組み

  1. 40×40のグリッド上に、ランダムな「核(シード)」を約50〜150個配置。

  2. 各マスを「最も近い核」に所属させることで、不規則で自然な形状の領土を計算。

  3. これにより、作画コストゼロで、何度でも新しい形の世界地図を生み出せます。

B. 階層的な境界線描画

視認性を高めるため、境界線の描画処理をレイヤー分けしています。

  • 国境線(International Border): 太い黒の実線。異なる国同士の境界。

  • 州境(Province Border): 暗い色の点線。国内の行政区画。

これにより、一目で「国の勢力図」と「細かい管理区画」が把握できるUIを実現しました。

C. 面積による「格付け」自動判定

生成されたプロヴィンスのマス数(面積)を自動計測し、土地の価値をランク付けしています。

  • ランク: 市(大) > 町(中) > 村(小)

  • パラメータ算出: ランクに応じて、初期の「人口」や「工業力」をランダム配分。

広い土地は豊かな都市になりやすく、狭い土地は寒村になる……といったリアリティを、計算だけで表現しています。

§3. システム構成:作る「エディタ」と、遊ぶ「エンジン」

システムは大きく2つのモジュールで構成されています。

① マップエディタ (Map Editor)

「神の視点」で世界地図を作成・編集するツールです。

  • 地形リロール: 気に入らなければボタン一つで再生成。

  • 塗り絵機能: 国を選択してクリックするだけで、領土を変更可能。

  • JSON出力: 作成したデータは world_map.json として保存され、ゲーム側に渡されます。

② ゲームエンジン (Game Engine)

エディタで作ったデータを読み込んで遊ぶプレイ環境です。

  • 国力計算: 領有プロヴィンスのデータを合算し、国の総国力(人的資源・IC)を算出。

  • 内政システム: 工業力(IC)をスライダー操作で配分し、「歩兵装備」「戦車」などの生産ラインを稼働させます。

おわりに

開発途中のマップエディタ画面
ダークモードでも見やすくする予定

 現在はマップ生成と基礎的な内政システムまで実装が完了しました。 今後は、この地図の上でユニットを動かす「移動・戦闘アルゴリズム」の実装を進めていく予定です。

0 件のコメント:

コメントを投稿

【Pythonゲーム開発 】#4.ゲームの心臓「メインループ」を作ろう(QTimer編)

 はじめに  前回、画面に四角形を描くことができましたが、まだ動きません。 ゲームとは、パラパラ漫画のように「少しずつ動かした絵」を高速で切り替えることで成立しています。多くの初心者はここで「while Trueループで回せばいいんでしょ?」と考えますが、GUIアプリでそれをやる...