junkerstock
 ●vrx-memo

アリスの迷路 Ver1.004
パソコン:WASDとマウスで移動
quest3:左スティックで移動 右スティックで視点・高さ変更
敵に注意しゴールを目指してください。
敵はクリック・トリガーで倒せますが、時間が20秒減ります。
金の壁のまわりでは高く上昇できます。
紫の床はワープなのでうまく使ってね。
quest3:左右回転は、実は頭を向けるとはやく回転するよ。


作成:setokem 使用AI:Gemini PRO 2.5
VRM作成soft:VRoid Studio 2.2.0
BGM1:やすみじっかーん!
作曲:HiLi-ひぃ-様
Homepage:こんとどぅふぇ https://conte-de-fees.com/\n
BGM2:ダンジョン03b 効果音:システム41,22,18, 爆発06
作曲:森田交一様
Homepage:魔王魂 https://maou.audio/









HI-SCOREの仕組みについてですね!良い質問です。

HI-SCOREがブラウザを閉じても消えずに残っているのは、お使いのブラウザに搭載されている**localStorage(ローカルストレージ)**という機能を使っているからです。

## HI-SCOREの仕組み 💾
localStorageは、ウェブサイトが少量のデータをユーザーのコンピュータ(ブラウザ内)に保存しておくための、いわば「小さな保管庫」のようなものです。ここに保存されたデータは、タブを閉じたり、ブラウザを再起動したりしても消えません。

ゲームのコードでは、この仕組みを以下のように利用しています。

### ① スコアの保存
ゲームが終了したとき(ゲームオーバーまたはリプレイ時)に、checkAndSetHiScore() という関数が呼び出されます。

この関数は、現在のスコア(score)が、これまでのハイスコア(hiScore)より高いかどうかをチェックします。もし高ければ、以下のコードで新しいハイスコアをlocalStorageに保存します。

JavaScript

// 'mazeHiScore'という名前で、hiScoreの値を保存
localStorage.setItem('mazeHiScore', hiScore);
### ② スコアの読み込み
ゲームのページを開いたときに、setupGame() という関数が一度だけ実行されます。

この中で、以下のコードを使ってlocalStorageから以前保存したハイスコアを読み込みます。

JavaScript

// 'mazeHiScore'という名前のデータを読み込む。
// もしデータがなければ(初めてのプレイなど)、0を代わりに使用する。
hiScore = localStorage.getItem('mazeHiScore') || 0;
これにより、前回プレイしたときのハイスコアがhiScoreという変数に復元され、画面に表示される、というわけです。

まとめると、「ゲーム終了時にハイスコアをブラウザに記録」し、「次回起動時にそれを読み込む」という処理を行っているため、スコアが残り続けるのです。












はい、承知いたしました。
ゲーム開始時に設定されている、さまざまな変数の**初期値**とその**役割**について、以下に一覧としてまとめました。

---
## ゲームの主な初期値一覧

### ゲーム全体の状態を管理する変数 🌎

これらの変数は、ゲーム全体を通しての状態や進行を管理します。

* `gameHasStarted`
* **解説:** プレイヤーがスタートボタンを押し、ゲームが一度でも開始されたかを記録します。`false`の間はスタート前、`true`になるとプレイ中またはプレイ後となります。
* **初期値:** `false`

* `isGameOver`
* **解説:** ゲームオーバーになったかどうかを記録します。`true`になるとプレイヤーの操作がロックされ、タイマーが停止します。
* **初期値:** `false`

* `score`
* **解説:** プレイヤーのスコアを記録します。ゴール時の残り時間や、ワープ床に乗ることで加算されていきます。
* **初期値:** `0`

* `isExplanationOpen`
* **解説:** PC版の「説明」パネルが開いているかどうかを記録します。
* **初期値:** `false`

* `gameTimer`
* **解説:** 残り時間をカウントダウンするタイマー(`setInterval`)のIDを保持します。階層が変わる際に、古いタイマーを停止させるために使われます。
* **初期値:** `null` (タイマー未設定状態)

---
### 各階層(レベル)の状態を管理する変数 🗺️

これらの変数は、新しい階層が始まるたびに設定(またはリセット)されます。

* `currentFloor`
* **解説:** 現在の階層(レベル)番号です。`startNewLevel`関数が呼ばれるたびに1ずつ増えていきます。
* **初期値:** `0` (最初の`startNewLevel`呼び出しで`1`になります)

* `currentMazeSize`
* **解説:** 現在の迷路の一辺のマス目サイズです。奇数で設定され、階層が進むごとに大きくなります。
* **初期値:** `39` (39x39マス)

* `numberOfEnemiesPerType`
* **解説:** 「追跡型」「徘徊型」それぞれの敵の生成数です。階層が進むごとに数が増えていきます。
* **初期値:** `30` (各タイプ30体ずつ)

* `remainingTime`
* **解説:** 各階層の残り時間(秒)です。
* **初期値:** `150` (秒)

---
### プレイヤーの状態を管理する変数 ❤️

主にプレイヤーキャラクターの能力や状態に関する値です。

* `health`
* **解説:** プレイヤーの体力です。`camera-relative-controls`コンポーネント内で管理されています。
* **初期値:** `100`

* `targetSpeed`
* **解説:** プレイヤーの最大移動速度です。HTMLの`<a-entity id="rig">`で設定されています。
* **設定値:** `10`

---
### 迷路の基本設定(定数)📏

これらは迷路の見た目やサイズを決定する基本的な固定値です。

* `MAZE_CELL_SIZE`
* **解説:** 迷路の1マスの大きさ(幅と奥行き)です。値が大きいほど、通路や空間が広くなります。
* **設定値:** `4` (メートル)

* `WALL_HEIGHT`
* **解説:** 迷路の壁の高さです。
* **設定値:** `8` (メートル)








問題1:追跡型の敵が追いかけてこない
現象: プレイヤーの近くにいても、敵がこちらに向かってこない。

原因: AIが追いかけるターゲットの設定ミスです。


追跡ターゲットの修正: 敵(タイプ1)が追いかけるターゲットを、
動かない#playerから、実際にワールドを動き回る**#rig**に変更する。




問題2・3:敵が(0,0,0)地点や壁の中で動かなくなる
現象:何体かの敵が、原点(0, 0, 0)に重なって動かないことがある。
   2階以降で、壁に埋まったまま動かない敵がいる。

原因: **敵が生成された直後の「初期設定の失敗」**です。


敵の初期化方法の改善: 敵が生成された直後、タイミングに左右されない、
より確実な方法で迷路の地図データ(mazeData)を渡すように修正する。






■履歴
・junkerposts a-farme-球に文字B-test67 を参考に、平地と球と壁を作成
・オリジナル迷路ルーチンを使って平地に壁を立てて立体迷路を作成
・座標からY<0はY=0で床を定義
・壁を配列にして座標X,Zが当たったら移動距離分を0に。


■予定
・配列を(X,Z)から (X,Z,Y)にして天井(X,Z,1)を壁(1)にして、天井を作成する。
・球をクリックしたら、文字が文字が出るように。
・壁の色を場所場所で変える




mp3/
0057.mp3
m18.mp3
m22.mp3
m41.mp3
md03b.mp3

vrm/
tesA1_V0a.vrm
tesA2_V0a.vrm
tesA3_V0a.vrm


VRMA_04.vrma
letgo.vmd
8.bvh
004_hello_1.anim


<p>WASDとマウスで移動<br>敵に注意しゴールを目指してください。<br>金の壁のまわりでは高く上昇できます。<br>紫の床はワープなのでうまく使ってね。</p>


<a-entity troika-text="value: 左スティックで移動 右スティックで視点・高さ変更\n敵に注意しゴールを目指してください。\n金の壁のまわりでは高く上昇できます。\n紫の床はワープなのでうまく使ってね。; color: black; fontSize: 0.01; anchor: center; align: left; maxWidth: 0.2;"
position="0 0.01 0.01"></a-entity>



今のマップは例えば1階なら -70x-70 のスタート地点から 70x70のゴール位置までの大きさだ。position.x position.z の値ね。
それで、この70の値をmmとする。
abs(mm + mm)とするなら、140くらいがスタートとゴール位置になるよね。
これを利用して、 abs(mm + mm) < 130 の範囲でワープの表示位置に設定してほしい。もちろん階数により数値は変わるけど。
そうすることで、スタート地点周辺と、ゴール地点周辺にワープが現れなくなるはず。
それとまたしてもVRMモーションが動いていないので動いていたV25Bを参考に直してね。
ということでV26からV26Aを作ってほしい。



パソコン、quest3ともに確認したが、27Cが動作に全く問題なく、説明文の動作も完ぺきだったよ。
27Dは破棄の方向で。なので、次の事に移行する。音を付けたい。
音源のmp3はもうサーバーにあげてある。
常時流れる音は、/mp3/0057.mp3 で、ループでお願いしたい。
ゲームオーバーの時に流れる曲は、/mp3/md03b.mp3 でお願いしたい。
もちろん、ベースなのでそれぞれ流す前に流れている曲が有ったら止めて流すようにする。
ベースの曲はこの2つだね。
あとは、効果音。
敵が近い時に体力が減る時の音、これは /mp3/m22.mp3 で、お願いしたい。
あと、リプレイの時の音、これは /mp3/m18.mp3 で、お願いしたい。
効果音なので、ベースの曲とは別という感じで。
27Cから変更して、28として作ってみてください。



まず、動く動かない以前に、14から15にする時にかなり改変が多く、それがこちらのチェックを遅らせる要因となっている。
修正する時に強く望むことは、

1 追加、修正した所はコメントをする事
2 改行を変更しない事
3 変数名を変更した場合、なぜそうしたか?を明確に書く事
4 一切の省略をせず、全文を表示する事
5 空白を変な空白にしない事

今後はとりあえず、この5つは守ってほしい。
再度、14から上の5項目を正確に守った15を作成してほしい。




AIに頼むとき
以下は言えばやってくれそうだが、結局違うミスが増えるだけ
なので書かずに進めて、エラーが起きた時だけ、または省略が起きた時だけ 書くようにする


条件追加コメント

変更または追加した変数は、宣言される前に使われてないか?宣言自体が漏れていないか?の確認をしてください。
全ての機能は、削除しないでね。
コードの省略表示もしないで常に修正後の完全なHTMLコードにしてね。

変更または追加した変数は、宣言される前に使われてないか?宣言自体が漏れていないか?の確認を必ずすること。
全ての機能は、削除しないように。
/* ... */ という形で一部のコードを省略せず、すべてのJavaScript関数の中身を省略せずに記述してください。


gemini問題点

geminiは、HTMLのコメントについて説明できない。 <!-- -->が表示できず、説明が空転する。
他のcopilotおよびChatgptには問題ない。

数の計算ができていない。
300個例題を作ってといって作ってもその数にならない(マイナスになる)
正確にカウントしてといってもカウントは正しく300であると言い張る。




5つの約束
1.追加、修正した所はコメントをする事
2.改行を変更しない事
3.変数名を変更した場合、なぜそうしたか?を明確に書く事
4.一切の省略をせず、全文を表示する事
5.空白を変な空白にしない事