このプロジェクトは、横スクロールのブロック避けゲームです。 プレイヤーはキーボードを使ってキャラクターを操作し、フィールド上のブロックを避けながら進むゲームです。
- Python 3.12.5
- 結果出力用ディレクトリを作成
mkdir result- 各種モジュールのインストール
pip install -r requirements.txt- メインプログラムを実行.
result/[日付][実行時刻]/下に実行結果とログが出力されます.
python main.py- デフォルトのパラメータ設定をjson出力.
python config.py # parameters.jsonというファイルが出力される.- 以下のように,上記で生成されるjsonファイルの数値を書き換えて,実行時のパラメータを指定できます.
python main.py -p parameters.json- 詳しいコマンドの使い方は以下のように確認できます.
python main.py -h- 指定できるパラメータは以下の通り.
{
"param1": 0, # ダミーのパラメータ1
"param2": { # ダミーのパラメータ2
"k1": "v1",
"k2": "v2"
},
"field_size": 12, # フィールドサイズ フィールドの1辺の長さ
"num_blocks": 6 # ブロックの数
}- プロジェクトの構成は以下の通り.
.
├──
block.py # ブロッククラス
├──
config.py # パラメータ定義
├──
enemy.py # 敵クラス
├──
field.py # フィールドクラス
├──
game.py # ゲームクラス
├──
input_without_enter.py # エンターキーなしで入力を受け取るクラス
├──
item.py # アイテムクラス
├──
main.py # 実行ファイル
├──
player.py # プレイヤークラス
├──
README.md # このREADMEファイル
├──
requirements.txt # 必要なパッケージ
│
├──result # 結果出力ディレクトリ
│ └── 20211026_165841
├──
user_input.py # ユーザー入力クラス
├──
utils.py # 共有関数群
└── - キーボードによる操作方法は以下の通り
・ "w" --- up
・ "s" --- down- エントリーポイント。ゲームの初期設定とメインループを実行します。
main関数
- ゲームの進行を管理するクラス。
Gameクラスstartメソッド: ゲームのメインループを実行
- ゲームのフィールドを管理するクラス。
Fieldクラスcheck_bumpメソッド: アイテムの衝突判定display_fieldメソッド: フィールドを表示
- プレイヤーキャラクターを管理するクラス。
Playerクラスget_next_posメソッド: 次の移動先を計算
- 敵キャラクターを管理するクラス。
Enemyクラスget_next_posメソッド: 次の移動先を計算
- ゲーム内のアイテムを管理するクラス。
Itemクラスget_next_posメソッド: 次の移動先を取得update_posメソッド: 座標を更新
- ブロックを管理するクラス。
Blockクラスmoveメソッド: ブロックを移動
- ユーザー入力を管理するクラス。
UserInputクラスget_user_inputメソッド: ユーザー入力を取得
- エンターキーなしで入力を受け取るクラス。
InputWithoutEnterクラスinput_without_enterメソッド: エンターキーなしで入力を受け取る
- パラメータ設定を管理するモジュール。
Parametersクラスcommon_args関数: コマンドライン引数を定義
- その他関数。
get_git_revision関数: 現在のGitリビジョンを取得setup_params関数: パラメータを設定dump_params関数: パラメータをjson出力set_logging関数: ログ設定update_json関数: jsonファイルを更新