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

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

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

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

Q&A

3回答

643閲覧

processing ある状態になったら、その処理をはじめからやりなおすコードを知りたい

htuhtoeh

総合スコア0

Processing

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

0グッド

0クリップ

投稿2022/07/20 16:10

前提

int i;

int x=0;

int y=0;

int count=20;
int z=4;
int u=8;

int timer;
float speed =2;

final int sec=20;

void playing() {

background(255);
int i=int(random(z, u));
text("score :"+score, 10, 100);
text("Time :"+ (20-(millis()-timer)/1000), 10, 40);

line(300, 450, 700, 450);

if(millis()-timer>=20*1000){
scene=4;
} else {
if (x<350)
{
x+=3;
} else {
x=350;
y+=i;
if (y<330) {
if (keyCode==LEFT) {
return ;
}
} else if (330<=y&&y<=370) {
if (keyCode==LEFT) {
y=350;
score++;
}else{return;}
}else{return;}
image(img, 450, y, 50, 50);
image(img, 500, y1, 50, 50);
image(img, 550, y2, 50, 50);

} fill(244); rect(x, 350, 300, 40); rect(x, 410, 300, 40); fill(255, 0, 0); rect(x, 390, 300, 20);

}
}

returnと書かれているところに来たら、
void playingの時間とスコア以外の処理をまた一から始める処理をしたいのですが
どうしたらいいでしょうか?

あと、score++;があるところの処理に来ると、スコアがぶわあああっと増えてしまいます。
score++;の処理に来たら、スコアが1増えるだけでいいんですけど、、そこもお願いします。

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

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

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

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

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

thkana

2022/07/20 21:52

イチから始める...とはどうなることか、なにがどうなればイチから始まるのか、それをちゃんと考えましたか? まずそれを考えてください。
thkana

2022/07/20 21:56

投稿の形式の問題として、コード部分をすべて ``` コード部分 ``` となるよう独立した行の```で囲ってください。(始まりの方は``` Processing とするとなお可) ヘルプに書いてあることだと思うんですけどねぇ。
guest

回答3

0

returnと書かれているところに来たら、
void playingの時間とスコア以外の処理をまた一から始める処理をしたい

このゲームの理解があっているかわかりませんが、上から降ってくる何かをキャッチするような感じですかね?
早すぎても遅すぎてもダメでやり直しになる、と。
しかし真ん中のreturnはやり直しではないですね(目押ししにくくするため画像を消す?)

上と下のreturnの前に、x = y = 0;とでもすればいいんじゃないですかね。

あと、score++;があるところの処理に来ると、スコアがぶわあああっと増えてしまいます。
score++;の処理に来たら、スコアが1増えるだけでいいんですけど

そのifに毎フレーム入ってしまいますから、そりゃそうなりますよね。
yを370以上にするか、yを変えたくなければkeyCodeを変えるかですかね。

Processing

1int x; 2int y; 3int z = 4; 4int u = 8; 5int timer; 6int scene; 7int score; 8PImage img; 9 10void setup() { 11 size(700, 500); 12 img = loadImage("https://www.gravatar.com/avatar/e633c3b40490dc5f87e3fd52b295fac9?d=identicon", "png"); 13} 14 15void draw() { 16 playing(); 17} 18 19void playing() { 20 background(255); 21 22 text("score :" + score, 10, 100); 23 text("Time :" + (20 - (millis() - timer) / 1000), 10, 40); 24 25 line(300, 330, 700, 330); // デバッグ用 26 line(300, 370, 700, 370); // デバッグ用 27 line(300, 450, 700, 450); 28 29 //if (20 * 1000 <= millis() - timer) { 30 // scene = 4; 31 // return; 32 //} 33 34 if (x < 350) { 35 x += 3; 36 } else { 37 x = 350; 38 y += int(random(z, u)); 39 40 if (y < 330 && keyPressed && keyCode == LEFT) { // 早すぎ 41 x = y = 0; 42 return; 43 } 44 if (370 < y) { // 遅すぎ 45 x = y = 0; 46 return; 47 } 48 49 if (330 <= y) { 50 if (keyPressed && keyCode == LEFT) { // キャッチ 51 keyCode = 0; 52 y = 350; 53 score++; 54 } else { 55 return; // 目押しよけ? ちらつくしコレいりますかね? 56 } 57 } 58 59 line(300, y, 700, y); // デバッグ用 60 image(img, 450, y, 50, 50); 61 //image(img, 500, y1, 50, 50); 62 //image(img, 550, y2, 50, 50); 63 } 64 65 fill(244); 66 rect(x, 350, 300, 100); 67 fill(255, 0, 0); 68 rect(x, 390, 300, 20); 69}

ifのネストがややこしすぎます。早期リターン等で平易にすべきです(意味を理解するのに時間がかかりました^^;

投稿2022/07/21 03:54

TN8001

総合スコア9326

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

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

0

ある状態になったら、その処理をはじめからやりなおすコードを知りたい

やりなおす、と考えるとややこしくなりますんで、
ここは考え方を変え、

処理をループさせておいて、やり直しさせたくないときにそのループから抜けるようにする、
と考えるとコードにしやすいかと思います

投稿2022/07/20 23:16

編集2022/07/20 23:31
y_waiwai

総合スコア87784

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

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

0

まずは後半だけ。

score++;の処理に来たら、スコアが1増えるだけ

その通りに動いていますよ。

score++;があるところの処理に来ると、スコアがぶわあああっと増えてしまいます

score++では1しか増加しなくても、score++;があるところに何度も来ているから、です。
現象を正しく捉えないと、正しい対策を立てられません。

Processing

1 if (330<=y&&y<=370) { 2 if (keyCode==LEFT) { 3 y=350; 4 score++;

と書いて、yがこの範囲で、「今押されたのが左矢印キーだったら」となって欲しいと考えたのかと思いますが、プログラムに書かれている条件は「最後に押されたのが左矢印キーだったら」です。
つまり、一度左矢印キーを押すと、(y=350;とも書かれているし)その条件はず~っと成立したままになります。
プログラムはあなたが考えたように動くのではなく、ソースコードに書いてあるとおりに動きます。

押されたというのは、直前まで押されていなくて、いまは押されているということ。
押されているというのは、履歴は関係なく、とにかく現時点において押されているということ。
「押された」ことを検出したいのなら、「直前までキーが押されていなかった」あるいは「直前まで押されていたのが左矢印キーでなかった」ことと「いま押されているのが左矢印であること」ことをあわせて判別しなければいけません。

投稿2022/07/20 22:16

thkana

総合スコア7652

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問