投稿

7月, 2024の投稿を表示しています

配列の破壊を防ぐ

イメージ
  今回は不具合が起きているマップデータを改良します。 ~問題のバグ~ A  どんどん更新していきます。 B ↓↓↓ C ↓↓↓ D ↓↓↓ E  どんなバグかというと、前回のマップのデータを引き継いでしまっているんです。このゲームはランダムでマップを表示させて攻略していくという趣旨のもと作成しています。そのマップデータは元からプログラム内に保存されている2次元配列データを使用しています。この画像では、過去にランダムで配置したアイテムや階段のデータを配列が記憶してしまっているため、その記憶したデータをもとにまた階段やアイテムを生成しているのです。画像C、Eを見てください。このゲームはアイテムを配置する際に階段は1つしか配置しないようにしていますが、画像Eでは階段が2つ配置されてしまっています。また、右上の階段と左上のリンゴの位置が同じであることからこの現象がよくわかると思います。 ~直していく~  このバグの根幹には元の配列に上書き(破壊)してしまうというのが原因だと推測しました。それに伴い、元のデータAを複製してデータBを作成し、データBに対して配列の変更作業を行うようにすればよいと考えました。  これを考えたら、次はネット上で解決策を調べまくります。そこで参考になるサイトを見つけました。 こちらのサイトです。→  https://qiita.com/Tatamo/items/444969a7ff2fbba30479  このサイトによると、どうやら私が行いたいコピーは、配列に対しては2種類あるようです。それは浅いコピーと深いコピーです。これは、配列の構造によるのですが、普通の配列だと浅いコピーとして扱われるようです。深いコピーは、多重構造の配列に用いられます。私が行いたいのは2次元配列のコピーなので、深いコピーに該当します。  ここまで来たら残りはJavaScriptで深いコピーのやり方を検索するだけです。  [Js 配列 深いコピー] [検索] こちらのサイトが参考になりました。             → https://zenn.dev/akkie1030/articles/js-structured-clone  深いコピーをしたい場合、StructureCloneとい...