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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

1回答

2790閲覧

迷路ゲームの当たり判定について

r.y.baki

総合スコア0

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2022/07/08 04:54

現在processingで迷路ゲームを作成しているのですが、
迷路を表示、キャラの操作まではできたのですが、
壁をすり抜けない機能とゴール機能が分かりません。
教えてもらえますと幸いです

int map[][] = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1}, {1,0,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,0,1}, {1,0,1,0,0,0,1,0,1,0,1,1,0,1,0,0,0,0,0,1}, {1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1}, {1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,0,1,0,1}, {1,1,1,0,1,1,0,1,0,0,0,1,0,1,0,1,0,0,0,1}, {1,0,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1}, {1,0,1,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1}, {1,0,1,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1}, {1,0,1,0,1,1,1,0,1,0,1,1,0,1,1,1,0,1,0,1}, {1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,1}, {1,0,0,0,1,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1}, {1,0,1,0,1,0,1,0,0,0,1,1,1,1,0,1,1,1,0,1}, {1,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1}, {1,1,1,0,1,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1}, {1,0,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}; float speed = 30.0; float x = 30.0; float y = 30.0; void setup(){ size(600,600); } void keyPressed() { if (key == CODED) { // コード化されているキーが押された if (keyCode == RIGHT) { x += speed; } else if (keyCode == LEFT) { x -= speed; } else if (keyCode == UP) { y -= speed; } else if (keyCode == DOWN) { y += speed; } } } void draw(){ background(255); fill(0,0,255); rect(x, y, 30, 30); for(int i = 0; i < 20; i ++){ for(int j = 0; j < 20; j ++){ if (map[j][i] == 1){ fill(0); rect(i*30, j*30, 30, 30); } } } }

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

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

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

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

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

thkana

2022/07/08 09:51

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12264446022 https://teratail.com/help#posted-otherservice 「やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」 対応して下さい。
guest

回答1

0

迷路ゲームの当たり判定について

  • xyの変数はマップデータに合わせて、0~19のintで保持するように変更する
    そうすれば自分の足元を、map[y][x]と簡単に取得できます。

  • speedも1マスのサイズを表す変数(size)に変更する
    xymapのインデックスになったので、x++等とすることで進むことになります。
    square(x * size, y * size, size)と、描画のほうで位置・サイスを調整します。

壁をすり抜けない機能

keyPressed()で実際にxyを変更した後、map[y][x]1だった場合は変更前の値に戻すようにします。

ゴール機能が分かりません。

2がゴールということでいいんでしょうか。
xymapのインデックスと対応するように変更したので、if (map[y][x] == 2)とするだけでゴール判定となります。

とりあえず文字を表示しましたが、お好みに変更してください。

Processing

1int[][] map = { 2 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 3 {1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1}, 4 {1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1}, 5 {1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}, 6 {1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, 7 {1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1}, 8 {1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1}, 9 {1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1}, 10 {1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1}, 11 {1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, 12 {1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1}, 13 {1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1}, 14 {1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, 15 {1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, 16 {1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1}, 17 {1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, 18 {1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, 19 {1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1}, 20 {1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 2, 1}, 21 {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}}; 22 23int x = 1; 24int y = 1; 25int size = 30; 26 27 28void setup() { 29 size(600, 600); 30 textSize(72); 31 textAlign(CENTER, CENTER); 32} 33 34void keyPressed() { 35 if (key == CODED) { 36 int oldX = x; 37 int oldY = y; 38 39 if (keyCode == RIGHT) x++; 40 else if (keyCode == LEFT) x--; 41 else if (keyCode == UP) y--; 42 else if (keyCode == DOWN) y++; 43 44 if (map[y][x] == 1) { 45 x = oldX; 46 y = oldY; 47 } 48 } 49} 50 51void draw() { 52 background(255); 53 54 fill(0); 55 for (int j = 0; j < 20; j ++) { 56 for (int i = 0; i < 20; i ++) { 57 if (map[j][i] == 1) { 58 square(i * size, j * size, size); 59 } 60 } 61 } 62 63 fill(0, 0, 255); 64 square(x * size, y * size, size); 65 66 if (map[y][x] == 2) { 67 fill(255, 0, 0); 68 text("Congratulations", 0, 0, width, height); 69 } 70}

投稿2022/07/08 08:57

TN8001

総合スコア10022

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問