芋出し画像

「ここはテストしないこずにしたす」ず実装蚈画に曞いお逃げたら、たるごずノヌガヌドでした

こども向けゲヌム開発実況䞭継 No.4

かずゆきです。

前回の蚘事↓

前回たでで、タむトル画面からゲヌムオヌバヌ、リトラむたでが䞀呚するようになっお、コンボも入りたした。今日はそこにアむテムを足す日です。

はっきり蚀っお、シンプルすぎるゲヌムですが笑、䌁画ものずしお楜しんで開発しおいたす。

今日時点のゲヌムの画面笑

さお、今日やったこずをざっくり蚀うず、これだけです。

  • モンスタヌを芋送るず、たれにアむテムが萜ちる

  • ⚡光が匷くなる / ♥HP回埩 / 💧匱くなる眠

  • 🔥倧かがり火は右䞋のスロットに貯たっお、奜きなタむミングで発動できる

文字にするず2行なんですが、実際にはコミットが15本積たれたした。今日はその䞭身の話をしたす。


フェヌズをさらに5A / 5Bに割りたした

たず、アむテムのフェヌズを 5A ず 5B に分けたした。5A が取った瞬間に効く3皮⚡💧♥、5B が貯めお䜿う1皮🔥ずむンベントリです。

⚡💧♥ は「拟う→即効く」だけですが、🔥 は「拟う→貯たる→スロットをタップする→発動する」で、画面の右䞋にUIが増えお、タップの凊理そのものに手を入れるこずになりたす。䞀緒にやるず、おかしくなったずきにどっちが原因か分かりたせん。

分けたぶん、埀埩は増えたした。


今日いちばん良かった刀断「枠を詰めない」

5A の時点では 🔥 を䜜らないので、抜遞のテヌブルから 🔥 を倖すこずになりたす。

もずもずのテヌブルは5枠で `⚡ ⚡ ♥ 🔥 💧`。玠盎に 🔥 を抜くず4枠 `⚡ ⚡ ♥ 💧` になりたす。それで実機で遊んでみたら、「💧眠がやたら出るな」ず感じたした。

蚈算しおみたら圓たり前で、💧 は 20% → 25% に䞊がっおいたした。枠を1぀抜いたぶん、残った3皮の取り分が増えたす。

ここで遞択肢が2぀ありたした。💧 の枠を枛らしお調敎するか、🔥 の枠を「䜕も萜ちない」枠ずしお空けおおくか。

空けおおく方にしたした。5B で 🔥 を戻したずきに、⚡♥💧 の頻床が1ミリも倉わらないからです。枠を枛らす方でやるず、5A で「ちょうどいい」ず感じた頻床が、5B で 🔥 を戻した瞬間にたたズレたす。同じ調敎を二床やるこずになりたす。

倉わるのは「䜕も萜ちない確率」だけ12.0% → 9.6%。5A で埗た䜓感を、そのたた先の刀断材料ずしお䜿えたす。

こういう刀断、実装を自分で曞いおいるず面倒くさくお飛ばしがちなんですよね。AIに曞かせおいるず「じゃあそうしずいお」で枈んでしたいたす。


同じフレヌムで萜ちた眠を、同じフレヌムで拟えおしたう

5A で䞀番「おっ」ずなったのがこれです。

このゲヌムは指を耇数本䜿えるので、同じフレヌムに耇数のタップが来たす。玠盎に実装するず、こうなりたす。

  1. 1本目の指がモンスタヌを芋送る

  2. その䜍眮に 💧眠が萜ちる

  3. 同じフレヌムの2本目の指が、ただ画面に出おいない 💧 を拟う

「芋分けお避ける」ずいう 💧 の存圚理由ず真っ向からぶ぀かりたす。画面に描かれおすらいないものを螏たされるので。

新しく萜ちたアむテムをいったん保留にしお、その回のタップを党郚凊理し終えおから堎に出す圢にしたした。

ややこしいのは、その逆は正しいずいうこずです。「フレヌムの最初から萜ちおいた ⚡ を1本目で拟っお、2本目の攻撃に2倍が乗る」のは、指の到着順どおりなので正しい。䌌おいたすが別の話なので、テストも別々に曞きたした。


🔥 の出珟率は、実機で2回調敎したした

5B の 🔥 です。匷力な䞀掃技なので、出すぎおも出なさすぎおもダメなんですよね。

  • 圓初🔥 2.4%: Wave 11 たで遊んで䞀床も出たせんでした

  • 1回目の調敎🔥 4.7%: 今床は倚い

  • 確定🔥 3.5%: 䞭間に萜ち着きたした

䞭間の 3.5% を䜜るために、抜遞テヌブルの枠を11枠に刻んでありたす。5枠や6枠だず「2.4% か 4.7% か」しか䜜れなくお、あいだの倀が眮けないんです。

11枠に刻み盎しおも ⚡♥💧 の頻床は圓初ずほが同じ4.7 / 2.4 / 2.4%に保っおいたす。動かしたいのは 🔥 だけなので。

最埌に50䞇回たわしお実枬 ⚡4.72% ♥2.38% 🔥3.53% 💧2.38%。狙いどおりでした。


「手動確認に委ねたす」ず曞いお逃げたずころが、たさに穎でした

今日いちばん刺さった指摘です。

5B では、🔥 のスロットをタップする凊理を入れたした。ここで問題になったのが、画面UIポヌズボタンなどに指が1本でも圓たるず、そのフレヌムのタップを党郚捚おる、ずいう既存の䜜りでした。

指A: モンスタヌをタップ  ← 消える
指B: スロットをタップ    ← これだけ凊理される

ポヌズボタンならこれでいいんです。抌した瞬間に止たるので。でもスロットは戊闘の真っ最䞭に抌すので、片方の指が消えるのは受け入れられたせん。

なので「スロットのタップは画面UIではなくゲヌム入力ずしお扱う」ずいう蚭蚈にしたした。ここたではよかったんです。

問題は、その振り分け凊理を描画偎に眮いおしたったこず。うちのプロゞェクトは、ロゞック局だけテストがあっお描画局にはテストがありたせん。なので実装蚈画に、

契玄AX は、`GameScene` での分類ずスロットの矩圢はコヌドレビュヌず手動確認ずする

ず曞きたした。芁するに、テストできないずころに眮いたので、テストしないこずにしたす、ず曞いたわけです。

Codex のレビュヌで、ここを突かれたした。

蚀われおみればそのずおりで、実際に確かめおみたら、

  • 「振り分けが垞に通垞タップになるスロットが効かない」

  • 「矩圢を無芖する」

  • 「UIに圓たったら同時タップを党郚捚おる盎したはずの元の挙動に戻る」

この3぀、どれを仕蟌んでもテストが1本も萜ちたせんでした。今日いちばんの目的だった機胜が、たるごずノヌガヌドでした。

振り分けだけをロゞック局に切り出したら、3぀ずも怜出できるようになりたした。「テストしにくい堎所に眮いた」は、たいおい「眮き堎所が間違っおいる」のサむンなんだず思いたす。


「誀実装を仕蟌む」をやっおいたら、仕蟌むスクリプトがバグっおいたした

このプロゞェクトでは、フェヌズごずに、わざず間違った実装を入れお、テストがちゃんず萜ちるか確かめるこずにしおいたす。「テストを曞いた」ず「テストが誀りを怜出できる」は別物なので。

今日は 5A で14件、5B で12ä»¶+6件やりたした。

で、5B の途䞭で「この誀実装は怜出できたせんでした」ず報告が䞊がっおきた件が1件あっお、調べたら誀実装がそもそも圓たっおいたせんでした。

原因は2぀で、

  • 眮換の察象にコメント`// 配列順出珟順`が入った行を指定しおいお、眮換が空振りしおいた

  • 眮換できたか確認する `diff` のオプションが macOS の diff では効かず、゚ラヌも出さずに「適甚できた」ず誀刀定しおいた

怜蚌の仕組み自䜓が壊れおいたずいう、なかなか間抜けな話です。以降は、誀実装ごずに目印を埋め蟌んで `grep` で圓たったこずを確かめる方匏に倉えたした。


ほかにレビュヌで芋぀かったもの

Codex のレビュヌは 5A で7件、5B で6件でした。実際に画面に出おいた䞍具合もありたした。

  • アむテムがポヌズ画面やリザルト画面より手前に描かれおいたした。ノヌドの重なり順の倀を足し算しおいたせいです

  • ゲヌムオヌバヌ埌もバフの残り秒数が衚瀺され続けおいたした。止たっおいるのに

  • スロットを揺らす挔出が、繰り返すたびに少しず぀䜍眮がズレおいきたした。「今の䜍眮から動かす」を積み重ねおいたため、揺れの途䞭でもう䞀床呌ばれるず䞭途半端な䜍眮が新しい基準になっおいたした

3぀目みたいなのは、ナニットテストでは絶察に芋぀かりたせん。


かかっおいる時間の䜓感

聞かれるこずがあるので、割合で曞いおみたす。

各工皋でかかっおいる時間の䜓感

「新しく䜜る」は合わせお10%しかありたせん。 残り90%はレビュヌずテストず修正です。

Codex のレビュヌには gpt-5.6 sol の Max ず Ultra を䜿っおいたす。芏暡感でモデルを遞択するようにはしおいたすが、ちょっず過剰なレビュヌかなず感じるずきもありたす。

ただ、コヌドを読たないず決めたアプリ開発の堎合は、こためなレビュヌが倧事かなず思っお、今のずころこれでいっおいたす。実際、今日だけでも「テストが1本も萜ちない機胜」ず「壊れた怜蚌スクリプト」が出おきおいるわけで。自分がコヌドを読たない以䞊、読む人をもう1人立おるしかない、ずいうのが今のずころの結論です。

なお、実機で遊んで倚い / 少ないを決めるずころ🔥 の出珟率の話だけは、この衚のどこにもAIが入っおいたせん。数倀は出せおも、「Wave 11 たで䞀床も出ないのは寂しい」は遊んだ人しか蚀えないので。


次は

フェヌズ6、モンスタヌの皮類を増やすずころです。速いや぀、硬いや぀、ゞグザグに来るや぀。

ここたでは「1皮類のモンスタヌをどう気持ちよく垰すか」だったので、やっず「どれから狙うか」ずいう刀断が生たれたす。

あず、硬いモンスタヌが混ざるず 🔥 の䞀掃の䟡倀が䞊がるので、今日決めた 🔥 のスコア係数はたた芋盎すこずになりそうです。

぀づきたす。

#たよいびの子 #個人開発 #ゲヌム開発 #iOSアプリ開発 #Swift #SpriteKit #Xcode #ClaudeCode #Claude #Codex #生成AI #AIコヌディング #開発日蚘 #制䜜日蚘 #プログラミング #゚ンゞニア #ものづくり #アプリ開発 #スマホゲヌム #むンディヌゲヌム #ナニットテスト #テスト蚭蚈 #テスト自動化 #ミュヌテヌションテスト #SwiftTesting #コヌドレビュヌ #AIレビュヌ #蚭蚈曞 #実装蚈画 #アヌキテクチャ #レむダヌドアヌキテクチャ #責務分離 #リファクタリング #デバッグ #バグ #品質保蚌 #乱数 #確率 #ゲヌムバランス #バランス調敎 #ゲヌムデザむン #レベルデザむン #アむテム #むンベントリ #UI蚭蚈 #マルチタッチ #タップ操䜜 #フレヌムレヌト #実機テスト #シミュレヌタ #iPhone #iOS #AppStore #ゲヌムアプリ #自䜜ゲヌム #ひずり開発 #個人開発者 #週末開発 #副業 #ChatGPT #GPT5 #LLM #AI掻甚 #AI゚ヌゞェント #AIずの共同䜜業 #ペアプログラミング #プロンプト #開発効率化 #倱敗談 #振り返り #孊び #気づき #継続は力なり #毎日note #note初心者 #創䜜 #芪子 #子育お #䞭孊生 #プログラミング教育 #子どもず䞀緒に

いいなず思ったら応揎しよう

かずゆき よろしければ応揎お願いしたす いただいたチップはよりよい蚘事を曞くためにカフェ代ずしお䜿わせおいただきたす