質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

0回答

239閲覧

倉庫番でキャラクターを移動させる方法について

blendegg

総合スコア81

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2024/04/16 03:39

環境

godot engine4

実現したいこと

倉庫番でキャラクターを移動させる場合、特定の値を配列内で移動させると思います。
以下の配列では2をキャラクターに見立てています。
そして、右キーが押された時に、array[1][1]をarray[1][2]に移動させたいです。

var array = [
[0,0,0,0,0,0],
[0,2,0,0,0,0],
[0,0,0,0,0,0],
[0,0,0,0,0,0],
]
for i in range(array.size()):
for j in range(array[i].size()):
if array[i][j] == 2:
array[i][j] = 0#今の2の位置を0に
array[i][j + 1] = 2

こういった場合、一度一次元配列に変換したほうがやりやすいんでしょうか?
godotの場合ですが、 array[i][j + 1] = 2といった加算する記述は出来ません。

他の方法でも構いません。
倉庫番を作る際のセオリーのようなものがあれば教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2024/04/16 04:11

> やりやすいんでしょうか? コレが本件の質問内容なのですか? 例えば私が個人の感覚として「やりやすい or やりにくい」と答えたとして……一体それが何になるのでしょう? というあたりがわからないのですが. で,それはそれとして,そもそも何でもかんでも配列に入れる必要があるのでしょうか? 「キャラクターの位置」というデータ(座標値)さえあればそれで済む話であるような気もするのですが,それだと問題ある感じですか?
blendegg

2024/04/16 05:12

>fanaさん やり易いかどうかではなくて、移動の実現方法を知りたいです。 配列に入れているのは、解説サイトでは配列を使っているパターンが多いと感じたからです。
fana

2024/04/16 06:07 編集

godot というやつを知らないので > array[i][j + 1] = 2といった加算する記述は出来ません という話の真偽はわかりませんが…… 仮にそのようなことができない不便な言語(?)なのであれば,「配列で表現せずとも良いのであれば,別の手段で表現する」ことは,その不便さに対する回避策となり得そうな気もしますが,どうなんでしょうね. (仮に,配列indexを指定する箇所に [j+1] みたいな演算を書けないのだとしても,例えば k = j+1 みたいに一旦演算結果を格納するための変数を設けてこれを用いて array[i][k] とか書くことはできるのではなかろうか? とか想像しますが) "godot" でググってみた感じ,"GDScript" なるものでコードを書く?みたいな話にも見えましたが,このスクリプト固有の話で困っているのであれば,質問に相応のタグをつけるとそれを知っている人の目に付きやすくなるのではないでしょうか.(GDScript というタグは存在しているみたいです ←でも1件しか投稿無いっぽいのでダメかも)
fana

2024/04/16 06:13 編集

> 「キャラクターの位置」というデータ(座標値)さえあれば とか述べましたが… 考えてみると,キャラクタの位置を例えば CX,CY という2つの変数で表したところで,実際上「右に移動できるか?」という判定をするためには少なくとも位置 (CX+1, CY) の状況を調べる必要があるわけで,そのために array[CY][CX+1] みたいな形のコードが使えないのだとしたら,結局意味ないですね. そこまで不便なのであれば, 配列を使うことをやめる 方向を考えるのが良いのではないか? という気すらしますが……本当にそんな不便な世界なんですかね?
YAmaGNZ

2024/04/16 06:21

こちらのサイト https://gdquest.github.io/learn-gdscript/?ref=godot-docs にてGDScriptを試してみましたが array[i][j + 1]=2 といった記述は実行できました。 出来ないと思っているのはループのせいで右に移動後に次のループでまた自分の場所とif文で判断されて移動し続けているだけではないですか?
fana

2024/04/16 09:43

> array[i][j + 1]=2 > といった記述は実行できました。 文法的な面の問題が無いということであれば,「解説サイト」とやらで述べられているという「配列を使っているパターン」なる話を実装すれば良いということになるのでしょうから,本件において解決すべき課題は存在しないように思えます. というわけで,以下の定型文を使うときが来た感じですね. --- 解決おめでとうございます! 解決方法をまとめて、「自己解決」として回答してください! 同じように困っている人の貴重な情報になると思います。 ---
YAmaGNZ

2024/04/16 10:03

>倉庫番を作る際のセオリーのようなもの godotで倉庫番の作成を解説してるページありましたけど・・・
blendegg

2024/04/16 12:00

>>Yamagnzさん たしかにその記述は出来ました。ありがとうございます。 ループの問題だったようです。 >>fanaさん その記述は出来ました。別の部分でエラーがでていて勘違いしていたようです。
blendegg

2024/04/16 21:45

>>yamagnzさん そうですね https://2dgames.jp/godot-sokoban-sample/ 解説しているサイトはありましたけども、とりあえず自己流でやってつまみ食いする感じで参考にしていましたので、参考サイトを見る前にこちらで質問させてもらいました
fana

2024/04/17 02:40

困り事が何なのかがよくわかりませんが…… 例えば現在の実装が 【同一のループの中で「現在のキャラクターの位置を探すこと」と「キャラクターの位置を変更すること」をやる形】 になっていて,それがうまいこと行っていない,みたいな状況なのだとしたら, この2つの仕事を完全に分離してみると良いのかもしれません. まず,「現在のキャラクターの位置を探すこと」だけを行い, 次に,「キャラクターの位置を変更すること」をやる という形に.1つずつシンプルに解決していけば良いのではないかと. (「これって,1つのループで書けるよね」とかいう実装の書き替えについては,後でやりたければやればよい)
can110

2024/04/18 00:58

> たしかにその記述は出来ました。ありがとうございます。 解決おめでとうございます! 解決方法をまとめて、「自己解決」として回答してください! 同じように困っている人の貴重な情報になると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問