この記事はGPT先生と相談しながら書いています。
Godot4でローグライクゲームの作成を行うので、復習がてら解説記事を書いてみることに・・
1.ゲーム概要
まだ作り始めなので、あまり決まってません。
作りながら、追加・変更していくと思われます。
- ジャンル: シレン風ローグライク
- 開発環境: Godot Engine v4.2.1
- 常に追っかけているわけではありませんが、新バージョンが出たら変更するかもしれません。
- 画面サイズ: 256×224をそれぞれ4倍にして表示
- ファミコンを意識した解像度。PCなど現代のディスプレイだと小さすぎる為、4倍に引き伸ばしている。
- ダンジョン: 自動生成
- 部屋の配置: 階層マス目状
- マス目状の階層に自動配置される部屋。部屋は直接隣接し、通路はなし。
- ゲームプレイ: ターン制
- 各プレイヤーと敵の行動はターン制で進行。
2.現在の状況
- ダンジョンの自動生成:
- プレイごとに一意のダンジョンが生成される機能を実装。
- ダンジョンマップの表示:
- 現在のダンジョンのレイアウトを示すマップを表示。
- プレイヤーの表示と移動:
- ゲーム内にプレイヤーキャラクターを表示し、キーボード入力による移動を実装。
- モンスター・アイテム: 未実装
- 敵キャラクターやアイテムは今後追加する予定。
3.ファイル構成
Roguelike_Test_v0_1
+-- main.tscn/.gd:ゲームのメインシーンとそのスクリプト。
+-- assets:ゲームで使用される各種アセット。
| (地形チップ、マップ画像、プレイヤーチップなど)
+-- src
+-- common
| +-- gamesettings.gd:ゲーム全体の設定や定数を定義するスクリプト。
+-- dungeon
| +-- dungeon.tscn/.gd:ダンジョン生成のメインロジックとシーン。
| +-- dungeon_map.tscn/.gd:ダンジョンマップの表示を扱うシーンとスクリプト。
| +-- dungeon_rooms.tscn/.gd:ダンジョンの部屋配置を管理するシーンとスクリプト。
| +-- mappin.tscn/.gd:マップ上のピンやプレイヤー位置を示すシーンとスクリプト。
+-- player
+-- player.tscn/.gd:プレイヤーの表示と動作を定義するシーンとスクリプト。4.プロジェクト設定
ここからは実際にgodot4の画面になります。
このゲームでのプロジェクト設定では、ウィンドウサイズと自動読み込みの設定を行っています。
プロジェクトの設定画面はメニューの「プロジェクト」以下の「プロジェクト設定…」から開きます。

まずは画面の設定
プロジェクト設定画面を開いたら一般タブを出し、高度な設定をONにします。

赤線で囲んだところが変更箇所になります。
プロジェクト設定画面に限らず(インスペクターなど)、規定値から変更すると反時計回りの矢印が付くみたいなので後から見てもどこを変更したのかわかりやすいと思います。
・ビューポートの幅と高さ:ここは実際の解像度になります。
・サイズを変更可能:プレイ中のウィンドウのサイズを変更不可にしています。
・ウィンドウの広さと高さのオーバーライド:ここは「高度な設定」をONにしないと表示されません。
ここで縦横4倍の値を設定しています。
・ストレッチのモードとスケールモードは画面を引き伸ばすときの画像の引き伸ばし方法の設定です。
正直よくわかっていませんが(汗、公式ドキュメントの複数の解像度を参考にしています。
ドット絵のドットが潰れないように設定しています。
次は自動読み込みの設定
自動読み込みのタブを出します

自動読み込み(オートロード)は、Godotエンジンにおいて特定のスクリプトやシーンをゲーム全体で共有し、常にアクセス可能にする機能です。これにより、ゲームのどのシーンからも簡単に共通のデータや関数にアクセスできるようになります。
今回はゲーム内で使用する定数や列挙型を設定しています。
# GameSettings.gd
# 共通コード
# ゲーム内の共通的な定数などを設定
extends Node
const TILE_SIZE = 16 # タイルサイズ
const DUNGEON_WIDTH = 4 # 階層の広さ(幅)
const DUNGEON_HEIGHT = 4 # 階層の広さ(高さ)
const NUMBER_OF_ROOMS = 13 # 階層の部屋数
const DIG_ROOMS_NUM = 4 # 連続して生成する部屋数
# 部屋の中の広さ(壁込み)
const ROOM_WIDTH = 11
const ROOM_HEIGHT = 9
# プレイヤーの初期位置
const PLAYER_START_POS = Vector2(5, 4)
# ゲームの状態を表す列挙型
enum GameState {
MENU,
PLAYING,
PAUSED,
GAME_OVER
}
enum RoomType{ # 部屋の種類
Start, # スタート地点
Goal, # ゴール地点
Others # その他
}
enum RoomObj{
NON, # 無し
WALL, # 壁
EXITL, # 出口(左側)
EXITU, # 出口(上側)
EXITR, # 出口(右側)
EXITD # 出口(下側)
}
enum Direction { # 向き
LEFT,
UP,
RIGHT,
DOWN
}
GDScript5.終わりに
一応Githubにプロジェクトをアップロードしました。
- ライセンスについて
- 本プロジェクトは [MITライセンス](LICENSE) の下で公開されています。
- 使用しているフリー素材
- このプロジェクトにはKenney (https://kenney.nl/) から提供されたアセットが含まれています。これらのアセットはCreative Commons Zero (CC0) ライセンスの下で提供されています。
これらの素晴らしいリソースを提供してくださったクリエイターの皆様に感謝します。
コードの出し方とかブログ自体の設定などを変更しながら書いていたら、えらい時間がかかってしまいました(笑
なかなか時間が取れずに進みませんが、なんとか完成までこじつけたい所です。