今回は「ウサギの糞ではなくタピオカなのだ!タピオカで部屋を埋め尽くせ」というゲームをつくります。

どうしてこのゲームを作ることになったのか?

鳩でもわかるC# 管理人が応援している配信者にこんな方がいます。

飼い主さんはウサギ(オス 7歳)を飼っていてそのウサギさんが配信をしているというテイです。

ところで ってウサギなの?

ホーランドロップイヤーという耳が垂れたタイプのウサギがいるそうです。

参考:ホーランド・ロップ

そしてこのウサギさん、清楚な配信をモットーとしているという割にはやたら「ウン◯」というワードを連呼するのです。

そこで今流行りの生成AI(ChatGPT)に「ウサギ小屋をみずからウ◯コまみれにするゲームを作りたいのですが、なにかアイデアはありますか?」と問うてみたところ、こんなクソゲーが生成されました。

このコードの解説はしません。あまりに生成物がひどすぎるからです。もっともプロンプトがひどいとAIはまともな仕事をしてくれないのですが・・・。

このクソゲーのダメな点として、

①マスのようなものがあるが意味をなしていない。
②敵役である飼い主さんの動きが単調すぎる。
③スペースキーを押しっぱなしにすると簡単に高得点がゲットできてしまう。

などがあります。

そこで改善点として

①すべてのマスを糞で埋め尽くせばステージクリアにする。
②飼い主さんの動きが糞に影響されるようにする。産みたての糞ほど吸引力を上げ、プレイヤーにはいかに戦略的に糞を配置するかを考えさせる。

飼い主さんの動きをコントロールできるようになると今度はいつまで経っても終わらないという別の問題がでてくるので、時間の経過とともに飼い主さんの視界を広くしていくことでプレイヤーにはいかにして短時間でステージクリアするかも考えさせるようにします。

糞には臭いがあり、時間の経過とともに消失する。飼い主さんは糞の臭いが強い地点に移動し、臭いが存在しない場合はプレイヤーを直接追いかけるようにすれば面白くなるのではないかと考えて以下のように作りました。

ちなみに配信者いわく これはウサギの糞ではなくタピオカである と言っています。

それでは作成していきましょう。

HTML部分

style.css

グローバル定数

グローバル定数は以下のとおりです。

index.js

Cellクラスの定義

マスの状態の管理と描画処理のためにCellクラスを定義します。

Playerクラスの定義

プレイヤーの状態の管理と描画処理のためにPlayerクラスを定義します。

Enemyクラスの定義

敵役の飼い主さんの状態の管理と描画処理をするためにEnemyクラスを定義します。

長くなったので続きは次回とします。