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

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

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

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

Q&A

解決済

1回答

6965閲覧

Processing 画面遷移のやり方

Alex_M

総合スコア32

Processing

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

0グッド

0クリップ

投稿2019/06/28 06:31

編集2019/06/28 06:49

###初心者で初質問です。Processingで単純な脱出ゲームを作っています

4つの画面遷移で、1つ目がドアのある部屋、それ以外は小さな箱のある部屋です。はじめは最初の扉のドアと2つ目の部屋の箱のみがあり、後の部屋は背景のみです。1つ箱をクリックするごとに次の部屋の箱が出現し、4つ目の部屋の箱をクリックしたのち初めの部屋のドアをクリックするとクリアにしたいです。

found an extra{character without a } to match it.

```Processing int scene = 1;//ステージ boolean a = false; boolean b = false; boolean c = false; boolean d = false; boolean e = false; boolean f = false; boolean g = false; boolean h = false; boolean i = false; void setup() { size(480, 480); } void room() {//背景 fill(#03FC15); rect(0, 0, 480, 370);//上側グリーン fill(#FC03E0); rect(0, 370, 480, 110);//下側パープル fill(0); //移動スイッチ rect(0, 215, 40, 40); rect(440, 215, 40, 40); textSize(50); fill(255); text("<", 0, 250); textSize(50); fill(255); text(">", 445, 250); } void draw() { if (scene == 1) { room(); fill(#FC0303); rect(330, 140, 100, 230);//扉 初期レッド fill(0); circle(410, 250, 20); if (a) { room(); fill(#FC0303); rect(330, 140, 100, 230);//扉 初期レッド fill(0); circle(410, 250, 20); if (c) { room(); fill(#FC0303); rect(330, 140, 100, 230);//扉 初期レッド fill(0); circle(410, 250, 20); if (b) { room(); fill(#FC0303); rect(330, 140, 100, 230);//扉 初期レッド fill(0); circle(410, 250, 20); i = true; if (i) {//扉クリック room(); fill(0); rect(330, 140, 100, 230);//扉 クリック後ブラック fill(0); textSize(30); text("GATE OPEN....!", 100, 220); //---------------------------------------------------↑ドアの部屋 } else if (scene == 2) { room(); fill(#AFAFAF); rect(290, 320, 80, 80);//カギ1} if (a) {//a = カギ1GET room(); textSize(30); fill(#FF0000); text("YOU GET A KEY1 !", 100, 280); c = true; //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑2つ目の部屋+カギ1 } else if (scene == 3) { room(); if (d) {//カギ2出現 room(); fill(#03FFF9); rect(290, 320, 80, 80);//カギ2 e = true; if (f) {//カギ2GET room(); textSize(30); fill(#FF0000); text("YOU GET A KEY2 !", 100, 280); g = true; //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑3つ目の部屋+カギ2 } else if (scene==4) { room(); } if (g) {//カギ3出現 room(); fill(#FAFF03); rect(290, 320, 80, 80);//カギ3 if (h) {//カギ3GET room(); textSize(30); fill(#FF0000); text("YOU GET A KEY3 !", 100, 280); b = true; //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑4つ目の部屋+カギ3 } } } } } } } } } } void mousePressed() { if (scene == 1) { if (mouseX < 40 && mouseX > 0 && mouseY > 215 && mouseY < 255) { scene = 4; } if (mouseX < 480 && mouseX > 440 && mouseY > 215 && mouseY < 255) { scene = 2; } //if (i) {//扉クリック //if (mouseX > 330 && mouseX < 440 && mouseY > 140 && mouseY < 370) { //b = true; //} //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑ドアの部屋 } else if (scene == 2) { if (mouseX < 40 && mouseX > 0 && mouseY > 215 && mouseY < 255) { scene = 1; } if (mouseX < 480 && mouseX > 440 && mouseY > 215 && mouseY < 255) { scene = 3; } //if (c) {//カギ1拾ってからカギ2クリック //if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵1クリック //d = true; //} //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑2つ目の部屋 } else if (scene == 3) { if (mouseX < 40 && mouseX > 0 && mouseY > 215 && mouseY < 255) { scene = 2; } if (mouseX < 480 && mouseX > 440 && mouseY > 215 && mouseY < 255) { scene = 4; } //if (e) { //if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵2クリック //f = true; //} //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑3つ目の部屋 } else if (scene == 4) { if (mouseX < 40 && mouseX > 0 && mouseY > 215 && mouseY < 255) { scene = 3; } if (mouseX < 480 && mouseX > 440 && mouseY > 215 && mouseY < 255) { scene = 1; } //if (g) { //if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵3クリック // h = true; //} } } void mouseClicked() { if (scene == 1) { if (i) {//扉クリック if (mouseX > 330 && mouseX < 440 && mouseY > 140 && mouseY < 370) { b = true; } else if (scene == 2) { if (c) {//カギ1拾ってからカギ2クリック if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵1クリック d = true; } else if (scene == 3) { if (e) { if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵2クリック f = true; } else if (scene == 4) { if (g) { if (mouseX > 290 && mouseX < 370 && mouseY > 320 && mouseY < 400) {//鍵3クリック h = true; } } } } } } } } } }

言語はProcessingです。

}を追加したり、減らしたり試したのですがうまくいきません。

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

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

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

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

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

y_waiwai

2019/06/28 06:42

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
Alex_M

2019/06/28 06:48

ありがとうございます。すぐに編集します!
thkana

2019/06/28 11:30

少なくとも、質問のソースを私の手元でコピペしたものでは{ } の対応は合っているようです。 いずれにしろ、無闇に > }を追加したり、減らしたり して対応すべきではありません。少なくともProcessingのIDEを使っているなら、[CTRL]+Tでソースを整形、インデントを付けてくれます(Windowsの場合。他ではキーバインドが違うかも知れません)。{ }の対応ぐらいであればそれで見えるようになるでしょう。 しかし... boolean a = false; boolean b = false; boolean c = false; boolean d = false; boolean e = false; boolean f = false; boolean g = false; boolean h = false; boolean i = false; とか、 } } } } } } } } } } とか、それだけでバグの温床です。 シンボルの名前には適切な語句を使うこと、処理を適宜関数に切り出すこと、などをすべきかと思います。
guest

回答1

0

ベストアンサー

やっぱり、ちゃんと整理してプログラムを書くべき...
ごちゃごちゃいじってエラーメッセージさえ出なくなればいい、というものじゃないんだから。

フラグの変数は

Processing

1boolean haveKey1 = false; 2boolean haveKey2 = false; 3boolean haveKey3 = false; 4boolean doorOpened = false;

だけで十分だし、draw()はこんな感じになると思うぞ(多少整理してるけど基本ロジックは変えてない...つもり)

Processing

1void draw() { 2 room(); 3 if (scene == 1) { 4 if (doorOpened) {//扉クリック 5 fill(0); 6 rect(330, 140, 100, 230);//扉 クリック後ブラック 7 textSize(30); 8 text("GATE OPEN....!", 100, 220); 9 } else { 10 fill(#FC0303); 11 rect(330, 140, 100, 230);//扉 初期レッド 12 fill(0); 13 circle(410, 250, 20); 14 } 15 //---------------------------------------------------↑ドアの部屋 16 } else if (scene == 2) { 17 if (haveKey1) {//a = カギ1GET 18 textSize(30); 19 fill(#FF0000); 20 text("YOU GET A KEY1 !", 100, 280); 21 } else { 22 fill(#AFAFAF); 23 rect(290, 320, 80, 80);//カギ1} 24 } 25 //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑2つ目の部屋+カギ1 26 } else if (scene == 3) { 27 if (haveKey2) {//カギ2GET 28 textSize(30); 29 fill(#FF0000); 30 text("YOU GET A KEY2 !", 100, 280); 31 } else { 32 if (haveKey1) { 33 fill(#03FFF9); 34 rect(290, 320, 80, 80);//カギ2 35 } 36 } 37 //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑3つ目の部屋+カギ2 38 } else if (scene==4) { 39 if (haveKey3) {//カギ3GET 40 textSize(30); 41 fill(#FF0000); 42 text("YOU GET A KEY3 !", 100, 280); 43 } else { 44 if (haveKey2) {//カギ3出現 45 fill(#FAFF03); 46 rect(290, 320, 80, 80);//カギ3 47 } 48 } 49 //ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー↑4つ目の部屋+カギ3 50 } 51}

こういう処理で、同レベルのもの、今回で言えばif(scene == xx )の部分が同じインデントにならなければその時点で間違いを疑っていい。

以降のマウス処理とかは自分でやってね。mousePressed()とmouseClicked()は意図して使い分けてる...様子には見えないけど、大丈夫かな。

投稿2019/06/28 14:07

thkana

総合スコア7629

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問