🤖

Claude CodeでGodotのゲームを作る!

に公開

結論

  • Gemini Diffusionで、シューティングゲームをHTML/JavaScriptを作成してもらいました
  • そのファイルをClaude Codeに渡して、Godotのプロジェクト形式にしてください!と言ったら、ちゃんとGodotのプロジェクト構成でファイルを出力し、そのファイルを取り込んだら、Godotで普通に動いた!

Claude Codeは Godot を理解している!!! (と思う)

実際にやったこと

1. Gemini Diffusionで、シューティングゲームを作成

2. Claude Code で、試しに Godotプロジェクトを生成してもらった

  • (1) Claude CodeでのGodotお試し用にディレクトリ作成 ( ~/claude_work/MiniShooting )
  • (2) 上記の shooting_20250531.html を お試しディレクトリにコピー
  • (3) Claude Code を起動して、以下のプロンプトを実行
shooting_20250531.html のシューティングゲームを、Godot対応のコードに変換して、このフォルダにGodotのプロジェクト形式で出力してください。

これで、Godotプロジェクトが作成されました。

  • (4) この、~/claude_work/MiniShooting ディレクトリ下のファイルをすべて、WindowsのD:\work\GodotWork\MiniShooting にコピー
  • (5) Windows で Godotを起動して、D:\work\GodotWork\MiniShootingをインポート
  • (6) なんか、バージョンが合わなかった(使っているのは 4.4で、生成されたのは 4.2)
  • (7) 自動的にコードをバージョンアップしてくれた
  • (8) 動かしてみたら、あるあるの物理エンジンのせいで挙動がおかしくなる問題が発生
  • (9) それ以外にもいくつかおかしかった
  • (10) いったん、終了

3. Claude Code で、おかしなところを指摘して直してもらう

  • (1) Claude Codeに以下のプロンプトを入れて修正してもらう
    • Claude Codeは、ずっと立ち上げっぱなしです。
弾が物理演算で跳ね返るため、自機にあたりません。
また、自機から発射する弾もおかしな挙動になっています。
弾を発射したときに、自機が上にズレます。物理挙動?
基本的に衝突時の物理演算はすべて切る必要があると思います。
敵の弾は、自機に当たった時か、画面外に出たときに消滅
自機の弾は、敵に当たった時か、画面外に出たときに消滅
敵は、自機の弾が当たるか、画面下に出たときだけ消滅(左右の端では、横方向の移動ベクトルを反転してください)
自機は、自機の当たり判定部分と敵の弾が当たった時にライフが1減る
ライフが0になったらゲームオーバー

上記で全体を見直してください。

4. 手動で修正して、Claude Codeに把握しなおしてもらう

自機の当たり判定が大きくなっている気がします。今の自機の当たり判定はどの程度の大きさですか?

html版では、弾幕ゲーっぽく自機よりかなり小さい当たり設定にしていたのですが、弾に当たりやすかったので、ちょっと当たり判定を教えてもらって、手動で小さくしました。

godotで作成したゲームをリリースする方法を教えてください。
いまのリリース方法をリリース手順書としてまとめ、このフォルダにマークダウンのテキストとして保存してください。

godotの使い方がまだ分かっていないので、聞いています。

少し私の方で手を加えました。ディレクトリの下のファイルを精査して、CLAUDE.mdとREADME.mdを更新してください。

ここで、当たり判定を小さくしたのと、Godot自体が 4.4に変換してくれたファイルをClaudeCodeのワークディレクトリに戻しました。

ボムが欲しいですね Zキーを押したときに、ライフを1消費して、画面を一瞬フラッシュ。弾と敵を全部消すようなギミックを追加してください。

ボムが欲しくなったので、ボムを追加してもらいました。
ボムストック管理面倒だなーと思い、とりあえず、ライフ消費にしています。

Zでボムを使ったときに、画面が白くなりません。原因がわかりますか?

バグ修正依頼

CLAUDE.mdとREADME.mdを更新してください。

バグが取れていたので、一旦、ドキュメントに反映してもらいました。

このゲームをより面白いものにするために、改良するべき点を考えてください。
今のシステムの改善点と、より面白くするために追加するシステムの両面で検討をお願いします。
検討が終わったら、一旦、まとめて改善計画をmarkdownの資料として策定してください。

この辺から、改良点も Claude Codeに任せています。
以下のような計画が出てきてきました。

現状分析

ゲームの強み

  • 安定した基盤: Godot 4.4ベースの堅牢な実装
  • 美麗なピクセルアート: 8x8ドットの2色グラデーション敵キャラクター
  • 物理演算なしの精密制御: Area2Dベースの正確な移動・衝突判定
  • 基本システムの完成度: 弾丸、敵、プレイヤーの基本的な動作が安定

現在の問題点

1. ゲームバランスの課題

  • 攻撃力増加が急激: スコア3000で16方向弾は強すぎる
  • ライフ数が多すぎ: 20ライフは緊張感を削ぐ
  • 敵の単調さ: 全敵が体力1、攻撃パターンが16方向弾のみ
  • 難易度調整不足: スコアベースの敵出現率計算が不適切

2. UI/UXの課題

  • 当たり判定の不明確さ: プレイヤーの1px判定が視覚的に分からない
  • 情報表示の問題: EnemyRateなど分かりにくい表示
  • 操作説明の不足: 新規プレイヤーに不親切
  • フィードバック不足: 撃破時のエフェクトが弱い

3. ゲーム性の課題

  • 単調なゲームプレイ: ひたすら敵を撃つだけ
  • 戦略性の不足: ボム以外に戦術的要素がない
  • 目標の不明確さ: ハイスコア以外のモチベーションがない
  • リプレイ性の低さ: 一度クリアすると飽きやすい

4. 技術的課題

  • パフォーマンス問題: 大量弾生成時の処理重複
  • 削除処理のバグリスク: 配列操作の安全性不足
  • メモリ効率: オブジェクトの使い回し不足

改善計画概要

基本方針

  1. 段階的改善: 既存システムを壊さずに機能追加
  2. プレイヤー体験重視: UIとフィードバックの大幅改善
  3. 戦略性の導入: 単調さを解消する多様な選択肢
  4. 長期的楽しさ: リプレイ性とモチベーション要素の強化

改善の3段階アプローチ

Phase 1: 基盤強化(優先度: 高)

  • ゲームバランスの調整
  • UI/UXの大幅改善
  • 基本システムの安定化

Phase 2: ゲーム性拡張(優先度: 中)

  • 新システムの追加
  • コンテンツの多様化
  • 戦略性の向上

Phase 3: 長期対応(優先度: 低)

  • 高度な機能追加
  • ソーシャル要素
  • カスタマイズ機能

優先度別実装計画

🔴 優先度: 高(Phase 1 - 2週間)

1.1 ゲームバランス調整

  • ライフシステム見直し: 20→3に変更
  • プレイヤー攻撃力調整: 段階的弾数増加(3→5→7→9方向)
  • 敵体力システム: 色別体力設定(赤:1, 黄:2, 青:3, etc.)
  • 難易度カーブ調整: より自然な敵出現レート計算式

1.2 UI/UX大幅改善

  • 当たり判定可視化: プレイヤー中央に十字マーク表示
  • 情報パネル再設計: アイコンベースの直感的表示
  • 撃破エフェクト: 敵撃破時のパーティクル効果
  • ダメージフィードバック: 被弾時の画面振動・赤フラッシュ

1.3 基本システム安定化

  • オブジェクト削除の安全化: 逆順ループによる配列操作
  • パフォーマンス最適化: 不要な衝突判定の削減
  • 音響効果: 射撃音、撃破音、被弾音の追加

🟡 優先度: 中(Phase 2 - 4週間)

2.1 ハイスコアシステム

  • ローカル保存: 上位10位までのスコア記録
  • スコア表示画面: ランキング形式での表示
  • 記録更新演出: 新記録達成時の特別エフェクト

2.2 ステージシステム

  • 5ステージ構成: 各ステージ異なるテーマと背景
  • ボスキャラクター: 各ステージ終了時のボス戦
  • ステージクリア演出: 達成感のあるクリア画面

2.3 敵システム拡張

  • 特殊攻撃パターン: 渦巻き弾、追尾弾、レーザーなど
  • 特殊敵タイプ: 分裂敵、シールド敵、ワープ敵
  • 敵の行動AI: より戦略的な敵の動き

2.4 パワーアップシステム

  • ドロップアイテム: 敵撃破時の確率ドロップ
  • 一時的強化: 攻撃力UP、移動速度UP、連射速度UP
  • 永続的強化: ステージクリア報酬による基本性能向上

🟢 優先度: 低(Phase 3 - 8週間)

3.1 難易度選択

  • 4段階難易度: Easy, Normal, Hard, Lunatic
  • 難易度別報酬: 高難易度クリア時の特別アンロック

3.2 アチーブメントシステム

  • 実績システム: 様々な条件達成による称号獲得
  • プログレス追跡: 統計情報の表示

3.3 カスタマイズ機能

  • プレイヤースキン: 機体の見た目変更
  • 弾軌道エフェクト: 弾の見た目カスタマイズ
  • BGM選択: 好みの背景音楽設定

詳細改善案

A. ゲームバランス改善

A1. ライフシステム見直し

現在: ライフ20(多すぎて緊張感不足)
改善後: ライフ3(1UPアイテムで最大5まで増加可能)
効果: 一撃の重みが増し、緊張感のあるゲームプレイ

A2. プレイヤー攻撃力調整

現在: 500点で6方向、1000点で8方向、2000点で12方向、3000点で16方向
改善後: 
- 初期: 3方向(前・右前・左前)
- 1000点: 5方向(後ろ2方向追加)
- 3000点: 7方向(左右2方向追加)
- 6000点: 9方向(斜め4方向追加)
効果: より段階的で適切な成長カーブ

A3. 敵体力・色別差別化

赤: 体力1, 基本敵
黄: 体力2, 速度1.5倍
シアン: 体力3, 弾速1.5倍
青: 体力2, ランダム速度変化
緑: 体力4, 画面端反射
マゼンタ: 体力5, 特殊攻撃パターン

B. UI/UX改善

B1. 当たり判定可視化

  • プレイヤー中央に2px×2pxの十字マーク
  • 被弾時に一瞬拡大してフィードバック
  • 設定でON/OFF切り替え可能

B2. 情報表示改善

現在の問題: "EnemyRate: 0.05" など数値のみ
改善案:
- スコア: 大きく見やすいフォント + アイコン
- ライフ: ハート型アイコン表示
- ボム: 爆弾アイコン + 残回数
- ステージ: 進行度バー表示

B3. 視覚効果強化

  • 撃破エフェクト: パーティクル爆発、スコア表示ポップアップ
  • 被弾エフェクト: 画面振動、赤フラッシュ、無敵時間の点滅
  • ボムエフェクト: より派手な全画面フラッシュ + 衝撃波

C. 新システム導入

C1. ボスキャラクターシステム

各ステージのボス特徴:
Stage 1: 基本ボス(単純な弾幕パターン)
Stage 2: 速度ボス(高速移動 + 追尾弾)
Stage 3: 防御ボス(シールド + レーザー攻撃)
Stage 4: 分裂ボス(分身 + 連携攻撃)
Stage 5: 最終ボス(全パターン複合)

共通仕様:
- 体力: 50-100
- 3段階攻撃パターン(体力減少で変化)
- 撃破時の特別演出とボーナススコア

C2. パワーアップアイテム

ドロップ率: 敵撃破時10%
アイテム種類:
- P (Power): 攻撃力一時UP(30秒)
- S (Speed): 移動速度UP(30秒)
- R (Rapid): 連射速度UP(30秒)
- B (Bomb): ボム回数+1
- 1UP: ライフ+1(超レア、1%)

取得演出: アイテム名表示 + 効果音

C3. グレイズシステム

仕様: 敵弾に接触せずに3px以内に近づく
効果: 1グレイズ = 10ポイント
戦略性: リスクを取ってスコアアップを狙う
表示: グレイズ数カウンタ + 連続グレイズボーナス

D. ステージシステム

D1. ステージ構成

各ステージ仕様:
- 長さ: 60秒間の敵ウェーブ + ボス戦(30秒)
- テーマ: 異なる背景色と音楽
- 敵構成: ステージごとに主要敵色を変更
- 難易度: ステージが進むほど敵の体力・速度UP

Stage 1 (緑): 基本ステージ、チュートリアル的
Stage 2 (青): 速度重視、素早い敵が多数
Stage 3 (黄): 弾幕重視、弾密度が高い
Stage 4 (赤): バランス型、全種敵が登場
Stage 5 (紫): 最終ステージ、最高難易度

D2. ステージクリア演出

  • クリア時の専用BGM
  • 獲得スコア・統計の詳細表示
  • 次ステージへの期待感を煽る演出

実装ロードマップ

Week 1-2: Phase 1 基盤強化

  • ライフシステム変更(20→3)
  • プレイヤー攻撃力バランス調整
  • 当たり判定可視化実装
  • 基本音響効果追加
  • UI情報表示改善

Week 3-4: Phase 1 完成

  • 敵体力システム実装
  • 撃破・被弾エフェクト追加
  • パフォーマンス最適化
  • バグ修正・安定化

Week 5-6: Phase 2 コア機能

  • ハイスコア保存システム
  • ステージシステム基盤
  • 基本ボスキャラクター1体
  • パワーアップアイテム基盤

Week 7-8: Phase 2 拡張

  • 全5ステージ + ボス実装
  • 特殊敵タイプ追加
  • パワーアップシステム完成
  • ステージクリア演出

Week 9-12: Phase 3 高度機能

  • 難易度選択システム
  • アチーブメントシステム
  • グレイズシステム
  • 統計・記録機能

Week 13-16: Phase 3 完成・磨き込み

  • カスタマイズ機能
  • 追加音楽・効果音
  • 最終バランス調整
  • 総合テスト・デバッグ

成功指標

定量的指標

  • 平均プレイ時間: 現在5分 → 目標15分
  • リプレイ率: プレイヤーの60%以上が再プレイ
  • ステージクリア率: Stage 1を90%以上がクリア可能
  • パフォーマンス: 60FPS安定動作

定性的指標

  • プレイヤーフィードバック: 面白さ・やりがいの向上
  • 学習曲線: 新規プレイヤーが理解しやすい
  • 戦略性: プレイヤーの選択による結果の違い
  • 達成感: クリア時・記録更新時の満足度

まとめ

この改善計画により、現在の安定した基盤を活かしながら、弾幕シューティングゲームとしての面白さを大幅に向上させることができます。

重要なポイント:

  1. 段階的実装: 既存機能を壊さずに改善
  2. プレイヤー体験重視: UI/UXとフィードバックを最優先
  3. バランス調整: 緊張感と達成感の適切な配分
  4. 長期的価値: リプレイ性と継続的楽しさの確保

この計画に沿って実装することで、単純だった弾幕ゲームが戦略性と深みのある本格的なシューティングゲームに進化するでしょう。

良い計画ですね!
では、次にPhase 1の1.1 から詳細検討と実装をお願いします

そして、1歩ずつ進めてもらっています。

最初は、1000くらいまで赤・黄の弱い敵だけ、1000-2000から弱い敵(赤・黄)+極頻度低の中くらいの敵(シアン・青)、2000-3000くらいから、シアン・青を低頻度、緑・マゼンダを極低頻度、のように、段階的に敵が強くなっていくようにできますか?

敵が段階的に強くなっていくように修正してもらいました。

良い感じです。
では、次にPhase 1の1.2 の詳細検討と実装をお願いします

そして、次のフェーズに

被弾時に赤フラッシュしません(画面振動はします) 原因がわかりますか?

バグ修正依頼

※ログを貼って欲しいと言われたのでログを貼った

デバッグコードを埋めてきて、ログを貼って欲しいと言われたので、ログを貼りました。

見えました! 治りましたので、デバッグ用のコードを外して本番実装してください

デバッグコードの削除を依頼しています。

ライフのストックとボムのストックが一緒なので、ライフ5スタートにしませんか? 

ライフストック3だとキツかったので、5に増加してもらいました。
・・・実は、私の腕だとまだキツイです

では、Phase 1 の 1.3 の詳細検討と実装に進んでください。

そして、次のフェーズに

※ここで、APIの課金が切れたので、MAXプランを契約して、再ログインしました

このフォルダ下にある設計ドキュメントとソースコードを読んで、状況を把握してください。

ログインしなおしたので、--continueでもセッションを継続できず、一旦ドキュメントとソースを読んで現状を把握しなおしてもらいました。

計画を変更して、ライフは5にしました。
それ以外の残課題の解決をお願いします。

現状を把握してくれましたが、ライフは3から5に変更するのを残課題だと思っていたので、そこは終わっていると伝えています。

ゲームの外枠と、実際のゲーム画面がズレています。ゲーム画面が右に半分、下に半分くらいずれています。そのため、ゲーム画面の 1/4 くらいしか見えず、初期状態では自機も見えません。解決できますか?

直して貰ったら、なんか、画面がズレたので、修正依頼を出しています。

サウンドが聞こえない気がします。原因を調査できますか?

サウンドが聞こえなかったので、調査依頼しています。

Claude Code:  実際のサウンドを実装するには、AudioStreamPlayerノードと音声ファイルを追加する必要があります。実装しますか?
はい。サウンドの実装をお願いします。

再度、サウンド実装依頼

自機の弾発射音の音量を小さくして、音は敵撃破音に近い音にしてください。敵撃破音より高音にしましょう。
それ以外は完璧です!

聞こえるようになりましたが、微妙に気に入らない!
爆発音だけは良かったので、それをベースにほかの音を変えていくように依頼しています。

もう少し音程を高くして、音量を半分にしてください。持続時間は、0.3秒にして弾発射音が終わるまで次の弾発射音が出ないようにしてください。

この辺、試行錯誤ですね

すみません。意図がちゃんと伝わりませんでしたね。自機の弾は射撃音中も出ますが、音だけは重ならないようにしてほしいということでした。

うまく伝わらないですね

音量が私の好みになるように、SoundManager.gd を直接調整しました。
変更した内容を確認してください。

そして、伝えるのをあきらめて、自分で試行錯誤して音を決定し、取り込み直してもらいました

では、Phase2に進んでください!

そして、次のフェーズに

いくつかエラーがでているようなので、レビューしなおしてください。

一旦、エラーを自己レビューで修正してもらいました。
ここから先は、自己レビューで治らなかった分を、エラーを貼って修正して貰っています↓

Parser Error: Could not preload resource script "res://scripts/StageManager.gd".
Parser Error: Could not preload resource script "res://scripts/StageManager.gd".
のエラーは、GameManager.gd で発生しています。
GameManager.gdでは、以下のwarningも出ています。
[無視]行 233 (UNUSED_PARAMETER):The parameter "delta" is never used in the function "update_bullets()". If this is intended, prefix it with an underscore: "_delta".
[無視]行 282 (CONFUSABLE_LOCAL_DECLARATION):The variable "overlapping_areas" is declared below in the parent block.
Invalid call. Nonexistent function 'has' in base 'Node2D (GameManager.gd)'.
というエラーが出るようになりました。
Trying to assign value of type 'CanvasLayer' to a variable of type 'Control'.
というエラーが出るようになりました。
Parser Error: Variable "boss_spawned" has the same name as a previously declared signal.
というエラーが出るようになりました。
ハイスコアボタンを押すと以下のエラーが出ます
Invalid call. Nonexistent function 'get_high_scores' in base 'Nil'.
Parser Error: Variable "boss_spawned" has the same name as a previously declared signal.
というエラーが出るようになりました。

ここまで、エラーメッセージを貼っての修正依頼ですね↑

ステージの進行具合が分かりづらいです。
ゲーム画面の一番上の左端から右端までを使って、分かりやすい目立つ色で進行のバーを出すようにできますか?

ステージの進行具合が分かりづらかったので、大きく表示されるように依頼しました

Phase2の後半に進む前に、現状のソースコード一式を見直して、IMPROVEMENT_PLAN.md、README.md、CLAUDE.mdをアップデートしてください。

ここまでの修正が反映終了したので、ドキュメントの更新を依頼しています。

では、Phase 2後半の詳細検討と実装に進んでください。

そして、次のフェーズに

Boss.gdの39行目で以下のエラーになります
Parser Error: Identifier "custom_minimum_size" not declared in the current scope.

エラーが出ているので修正依頼しています。

以下のエラーが出ます。修正できますか?
Invalid assignment of property or key 'velocity' with value of type 'Vector2' on a base object of type 'Area2D (Bullet.gd)'.

同様にエラーが出ているので修正依頼しています。

パワーアップアイテムについて、教えてください。どんな見た目のアイテムが、どんな効果があるのかをまとめて頂けると助かります。

パワーアップアイテム実装したと言っているのに、まだ見えていないので、どうなっているのかを質問

アイテムの視認性が悪いです。自機と同じくらいの大きさにできますか?
アイテムのサイズが、現状弾と同じくらいです 縦2倍、横2倍くらいにしてください

説明を見た後にプレイすると、確かに小さい点が流れて行っていました 笑
小さいので、大きくしてもらうように

PowerUp.gd の _draw()のpixel_size を 3 にしてください

コードを見て、ちょうど良い大きさになるように、変数の値を決めて、その値に変更してもらいました。

このディレクトリのファイルを、MiniShooter-Godot というプロジェクト名で、orimizuアカウントのGitHubに登録したいのですが、可能ですか?

GitHubに登録してくれないかなぁ、という淡い期待

GitHub上にプロジェクトは作ってくれました
そして、ワークディレクトリを git init してくれて GitHubと接続はしてくれています。

githubのMCPを使って、リモートリポジトリの追加とメインブランチのプッシュを行っていただけませんか?

なぜか、git pushはうまくいきません。

トークンを登録していますので、githubのmcpでpushお願いします。

※なんか上手くやってくれないので、手動で、githubに登録

とりあえず、この時点で、Zennの記事にすることにしました。

GitHubに登録したもののURL

上記の最終コード

https://github.com/orimizu/MiniShooter-Godot/tree/v0.1.0

上記コードをExportした Windowsのexeファイル

https://github.com/orimizu/MiniShooter-Godot/releases/tag/v0.1.0

リポジトリトップ

https://github.com/orimizu/MiniShooter-Godot/

Gemini Diffusionに作ってもらった HTML/JavaScript シューティングゲーム

https://github.com/orimizu/MiniShooter-Godot/blob/main/shooting_20250531.html

Discussion