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

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

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

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

Q&A

解決済

1回答

379閲覧

障害物を避けるゲームの敵の表示方法

marurururu

総合スコア1

Processing

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

3グッド

0クリップ

投稿2024/02/01 12:24

編集2024/02/01 22:40

実現したいこと

避ける障害物である黒い四角が右端の同じ位置からではなく、様々な高さからランダムに出現するようにしたい。

発生している問題・分からないこと

コードのどの部分を変えるとよいのかがわかりません

該当のソースコード

Processing

1int numFrames = 8; // The number of frames in the animation 2int currentFrame = 0; 3PImage[] img = new PImage[numFrames]; 4PImage img2,img10; 5float y,vy,Fy,x,z,vx; 6 7void setup() { 8 frameRate(24); 9 size(800, 800); 10 y = 0; 11 vy = 0; 12 Fy = 0; 13 x = 570; 14 z = 570; 15 vx = 5; 16 // The image file must be in the data folder of the current sketch 17 // to load successfully 18 img2 = loadImage("1.png"); 19 img[0] = loadImage("1.png"); // Load the image into the program 20 img[1] = loadImage("1.png"); 21 img[2] = loadImage("1.png"); 22 img[3] = loadImage("1.png"); 23 img[4] = loadImage("1.png"); 24 img[5] = loadImage("1.png"); 25 img[6] = loadImage("1.png"); 26 img[7] = loadImage("1.png"); 27 img10 = loadImage("3.png"); 28} 29 30void draw() { 31 background(255); 32 33 vy = vy +Fy; 34 35 y = y + vy; 36 37 x = x - vx; 38 39 if(y > 0){ 40 vy = 0; 41 Fy = 0; 42 y = 0; 43 } 44 45 if(x < 0){ 46 x = 570; 47 } 48 currentFrame = (currentFrame+1) % numFrames; 49 image(img[currentFrame], 0, 450 + y); 50 51 fill(0); 52 rect(x,z,30,30); 53 54 if ( ((0<x) && (x<100)) && (600+y > 570)){ 55 fill(253); 56 rect(0,0,800,800); 57 image(img10,150,150); 58 noLoop(); 59 } 60} 61 62void mouseClicked(){ 63 Fy =1.2; 64 vy = -20; 65}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

障害物を避けるゲームについて検索したが解決法法は見つからなかった

補足

特になし

TN8001😄を押しています
tatsu99, TN8001👍を押しています

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

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

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

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

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

TN8001

2024/02/01 15:35

「C」タグは無関係です。外してください。 付けるのであれば「Java」タグでしょう。
guest

回答1

0

ベストアンサー

参考コードがある場合は質問に明記してください。
processingで作る簡単な障害物レースfor Java #Java - Qiita


避ける障害物である黒い四角が右端の同じ位置からではなく、様々な高さからランダムに出現するようにしたい。

四角の高さはzのようですから、初期化時と再出現時にランダムな値にすればいいでしょう。
random() / Reference / Processing.org

Processing

1 // 初期化時 2 //z = 570; 3 z = random(0, height - 30); 4 5 6 // 再出現時 7 if(x < 0){ 8 x = 570; 9 z = random(0, height - 30); 10 }

ただ高さがランダムになると当たり判定も変わってきます。


  • 変数名が分かりにくいのでわかりやすく変更
  • 画像サイズが不明なので、画像サイズに依存しないように変更
  • 障害物をFlappy Bird風に高く変更

Processing

1PImage[] img = new PImage[1]; 2//PImage img10; 3 4float gravity = 1.2; // 重力 5 6float playerX = 50; // 自機 左上X座標 7float playerY; // 自機 左上Y座標 8float playerVY; // 自機 Y軸速度 9float playerW; // 自機 幅 10float playerH; // 自機 高さ 11 12float enemyX; // 敵 左上X座標 13float enemyY; // 敵 左上Y座標 14float enemyVX = -5; // 敵 X軸速度 15float enemyW = 30; // 敵 幅 16float enemyH = 800; // 敵 高さ(高くすればFlappy Bird風に) 17 18 19void setup() { 20 //frameRate(24); 21 size(800, 800); 22 23 img[0] = loadImage("https://teratail-v2.storage.googleapis.com/uploads/avatars/u13/132786/KnkDDC5A_thumbnail.jpg"); 24 //img[1] = loadImage("1.png"); 25 //img[2] = loadImage("1.png"); 26 //img[3] = loadImage("1.png"); 27 //img[4] = loadImage("1.png"); 28 //img[5] = loadImage("1.png"); 29 //img[6] = loadImage("1.png"); 30 //img[7] = loadImage("1.png"); 31 //img10 = loadImage("3.png"); 32 33 playerY = height - img[0].height; // 画面下端に接するように 34 playerW = img[0].width; 35 playerH = img[0].height; 36 37 enemyX = width; 38 enemyY = random(200, height - 200); // 高すぎもせず低すぎもせずテキトウ 39} 40 41void draw() { 42 background(255); 43 44 playerVY += gravity; // 重力によりY軸速度減衰 45 playerY += playerVY; // Y軸速度加算 46 if (playerY > height - playerH) { // 画面下端より下に行かないように 47 playerY = height - playerH; 48 } 49 50 enemyX += enemyVX; // X軸速度加算 51 if (enemyX < -enemyW) { // 画面外に出たら 52 enemyX = width; 53 enemyY = random(200, height - 200); 54 } 55 56 image(img[frameCount % img.length], playerX, playerY); 57 58 fill(0); 59 rect(enemyX, enemyY, enemyW, enemyH); 60 61 // 矩形同士の当たり判定 62 if (playerX < enemyX + enemyW && enemyX < playerX + playerW && playerY < enemyY + enemyH && enemyY < playerY + playerH) { 63 textSize(120); 64 textAlign(CENTER, CENTER); 65 text("GAME OVER", 0, 0, width, height); 66 67 //fill(253); 68 //rect(0, 0, 800, 800); 69 //image(img10, 150, 150); 70 noLoop(); 71 } 72} 73 74void mouseClicked() { 75 playerVY = -20; 76}

frameCount / Reference / Processing.org

アプリ動画

投稿2024/02/01 15:21

編集2024/02/01 15:31
TN8001

総合スコア9326

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

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

TN8001

2024/02/01 15:26

不要なグローバル変数も多いがわかりやすさ優先で^^;
marurururu

2024/02/01 22:44

回答ありがとうございます。 試したところ問題が解決しました!! ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問