Claude Codeに敵・弾・ダメージを作らせる頼み方と直し方【AIでゲーム開発】
Claude Code に4行を1回頼むと、弾・当たり・体力の減り方は頼んだとおりに動きました。スペースキーを押したままやられると GAME OVER が1フレームで消える不具合があり、症状と起こし方と望む動きを渡すと直りました。
このページの目次
Claude Code に頼んだ文
空の作業フォルダを1つ決め、Claude Code に次の文を1回だけ渡しました。自機・敵・弾・体力と、体力が0になったときの動きを、それぞれ1文ずつ書いています。
Claude Codeに敵・弾・ダメージを頼んだ文
作業フォルダは D:\Claude_Game_Site\drafts\W-141-A\enemy-bullet-damage.play\ だけです。このフォルダの外は読まない・書かないでください。
ブラウザで開くだけで遊べる HTML ファイル1つ(game.htm)を作ってください。
画面の下に左右キーで動く自機を置いて、スペースキーで上に弾を撃てるようにして。画面の上には左右に動く敵を3体置いて、敵も下に向かって弾を撃ってくるようにして。
弾が当たったら敵の体力を1減らして、0になったら消して。自機も体力3にして、敵の弾に当たったら1減って、0でゲームオーバーにしてください。
できたら、作ったファイルの道と、どう作ったか(弾・当たり・ダメージの仕組み)を短く返してください。
Claude Code は HTML ファイルを1つ作り、仕組みを次のように説明しました。
- スペースキーを押している間、15フレームに1発ずつ弾を出す(続けて出しすぎないための待ち時間)。
- 当たりは、弾と敵(または自機)を四角とみなし、四角どうしが重なっているかで決める。
- 自機の弾が敵に当たると、弾を消して敵の体力を1減らす。敵の弾が自機に当たると、弾を消して自機の体力を1減らす。
- 敵の体力は3。自機の体力が0で GAME OVER、敵を全部倒すと CLEAR! が出て、どちらもスペースキーでやり直せる。
四角どうしの重なりで当たりを決める形は、軸にそろった四角どうしの当たり判定(AABB)と呼ばれ、2つの四角の4つの辺のあいだにすき間が1つも無いときに「当たった」とみなします。当たり判定の考え方は当たり判定(コリジョン)にまとめています。
頼んだとおりに動くかを数えて確かめる
見た目で「動いている」と分かっても、「1発で1だけ減るか」「重なっている間に何度も減らないか」は目では確かめきれません。そこで、画面を持たないブラウザで game.htm を開き、キーを送りながら、画面に描かれた体力の数字と敵の体力を1フレームずつ記録しました。フレームは、ブラウザが画面を描き直す1回ぶんで、このゲームは描き直しのたびに1回、弾や敵を動かしています。描き直しの回数は画面のリフレッシュレートにそろい、1秒に60回の画面が最も多く、75回・120回・144回の画面もあります(フレームレート)。
数えたものと、その結果です。確かめるときは、乱数の種を決めて、同じ動きを何度でも再現できるようにしました。
| 確かめたこと | どう押したか | 結果 |
|---|---|---|
| スペースキーを押し続けたときの弾の間隔 | 自機を真ん中に置き、スペースキーを押したまま | 15フレームごとに1発(262回。やり直しの直後だけ16フレーム) |
| 自機の弾が敵に当たったときの減り方 | 同じ | 敵の体力が減った43回すべてで、減り幅は1。0になった13回すべてで、敵はそのフレームで消えた |
| 敵の弾が自機に当たったときの減り方 | 撃たずに真ん中で立ったまま、乱数の種を変えて40回 | 当たった119回すべてで、減り幅は1。重なっている間に続けて減ることは無かった。続けて当たった間隔は、いちばん短くて54フレーム |
| 体力が0になったとき | スペースキーを離して、立ったまま | 3回目に当たったフレームで GAME OVER。そのあと確かめた146フレームのあいだ出たまま |
| やり直したとき | GAME OVER のあとでスペースキーを押す | 次のフレームで体力3、敵3体の体力3、画面の弾0個に戻った |
| コンソールの赤い文 | すべての試しで | ゲームのコードから出たエラーは0件 |
弾・当たり・体力の減り方は、頼んだ文のとおりに動いていました。
スペースキーを押したままだと GAME OVER が1フレームで消えた
弾はスペースキーを押し続けて撃つ作りなので、遊ぶあいだはスペースキーを押したままになります。その状態で自機の体力が0になると、GAME OVER の画面が1フレームだけ出て、次のフレームでは体力3・敵3体の最初の状態に戻っていました。敵を全部倒したときの CLEAR! も同じでした。
- スペースキーを押したまま乱数の種を変えて30回遊ぶと、GAME OVER になったのは4回で、4回とも GAME OVER の文字が描かれたのは1フレームだけでした。
- スペースキーを押したまま CLEAR! になった4回も、4回とも1フレームだけでした。
- スペースキーを離しているときにやられると、GAME OVER は出たままになりました(前の節の表)。
1フレームは約0.017秒なので、やられたのか勝ったのかが、ほぼ見えないまま次のゲームが始まります。
キーボードのキーを押すと keydown というできごとが起き、離すと keyup が起きます。キーを押したままにすると、keydown が自動で繰り返し起き(そのときは repeat という印が付きます)、keyup は離したときに1回だけ起きます。このゲームは、キーが「いま押されているか」を keydown と keyup で覚えていて、弾を撃つときにも、やり直すときにも、同じ「スペースキーがいま押されているか」を見ていました。
Claude Code に直すために渡した文
コードのどこが悪いかを知らなくても書けることだけで、直すための文を作りました。入れたのは次の3つです。
- 起きたこと:何をしているときに、画面がどうなったか。数えた数字(1フレーム・約0.017秒・4回中4回)と、スペースキーを離しているときは起きないこと。
- 起こし方:開いてから起きるまでの手順を番号で。
- こうなってほしい:望む動きと、直したあとに何を確かめて返してほしいか。
作ったときとは別の新しい Claude Code に、次の文をそのまま1回渡しました。1行目の作業フォルダの断りのほかは、上の3つだけです。
Claude Codeに直しを頼んだ文
作業フォルダは D:\Claude_Game_Site\drafts\W-141-A\enemy-bullet-damage.play\ だけです。このフォルダの外は読まない・書かないでください。直すのは game.htm です。
game.htm を遊んでいて困ったことがあります。直してください。
【起きたこと】スペースキーを押しっぱなしにして弾を撃ち続けていると、自機の体力が0になった瞬間に「GAME OVER」がほんの一瞬だけ出て、すぐに体力3・敵3体の最初の状態から始まってしまいます。やられたことに気づけません。敵を全部倒したときの「CLEAR!」も同じで、一瞬で消えて次のゲームが始まります。画面を1コマずつ調べると、GAME OVER も CLEAR! も1コマ(約0.017秒)しか出ていませんでした。4回やられて4回とも、CLEAR! になった4回も4回とも同じでした。スペースキーを離しているときにやられた場合は、GAME OVER はちゃんと出たままになります。
【起こし方】1. game.htm を開く 2. スペースキーを押しっぱなしにして撃ち続ける(離さない) 3. そのまま敵を全部倒すか、敵の弾に3回当たる
【こうなってほしい】・GAME OVER と CLEAR! の画面は、スペースキーを押し続けていても、読めるまで出たままにしてほしい。・やり直しは、その画面が出たあとで、スペースキーを一度離してから押したときにだけ始まってほしい。・直したら、スペースキーを押しっぱなしのまま体力が0になったとき、GAME OVER が出たままになるかを確かめてから返してください。
直した結果を同じ数え方で確かめる
Claude Code の説明では、やり直しの判定がスペースキーの押されたままの状態をそのまま見ていたため、押したままやられると次のフレームでやり直しが始まっていました。直し方は、GAME OVER や CLEAR! になった瞬間にスペースキーが押されていたら、やり直しを受け付けない印を立て、スペースキーを離したとき(keyup)にその印を下ろす、というものでした。
Claude Code は、ブラウザでキーを押す試しはできなかったので、最後の確かめは手元でしてほしい、とも返しました。そこで、直す前と同じやり方で数え直しました。
| 確かめたこと | 直す前 | 直したあと |
|---|---|---|
| スペースキーを押したまま体力が0になったあと、GAME OVER が出ていたフレーム | 1フレーム | 押したままの300フレームのうち300フレーム |
| スペースキーを押したまま敵を全部倒したあと、CLEAR! が出ていたフレーム | 1フレーム | 押したままの300フレームのうち300フレーム |
| そのあとスペースキーを離したとき | ― | 離しただけでは GAME OVER のまま(30フレーム) |
| 離してからもう一度押したとき | ― | 次のフレームで体力3・敵3体の体力3・画面の弾0個に戻った |
前にうまくいっていたことも、同じ乱数の種で数え直しました。弾の間隔は15フレームのまま、敵の体力の減り幅はすべて1、立ったまま当たったときの減り幅もすべて1で、続けて当たった間隔のいちばん短いものは54フレームのままでした。コンソールに、ゲームのコードから出たエラーは0件でした。
この試しでは、直す前に数えたものを同じやり方で数え直したので、直ったことと、前にうまくいっていたことが崩れていないことを、同じ数字で見比べられました。コンソールに赤い文が出て動かないときの渡し方は、コンソールの赤い文を渡して直した例にまとめています。敵の列を撃つゲームを1回の依頼で作った記録は、シューティングの作例にあります。
情報源
- KeyboardEvent(MDN)https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent確認日 2026-09-24
- KeyboardEvent: repeat property(MDN)https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/repeat確認日 2026-09-24
- Element: keydown event(MDN)https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event確認日 2026-09-24
- Element: keyup event(MDN)https://developer.mozilla.org/en-US/docs/Web/API/Element/keyup_event確認日 2026-09-24
- Window: requestAnimationFrame() method(MDN)https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame確認日 2026-09-24
- 2D collision detection(MDN)https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection確認日 2026-09-24
- Best practices for Claude Code(Claude Code の公式ドキュメント)https://code.claude.com/docs/en/best-practices確認日 2026-09-24
- Common workflows(Claude Code の公式ドキュメント)https://code.claude.com/docs/en/common-workflows確認日 2026-09-24


