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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

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

Q&A

解決済

2回答

597閲覧

二つのゲームを合わせて一つのゲームにしたい (削除依頼済)

AzukiV

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

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

0グッド

0クリップ

投稿2018/06/05 04:20

編集2018/06/05 11:28

processingを学び始めてから間もなく知識が疎いです。
なんとかしてゲームを二つ作りました。
私の計画では、ここから二つのゲームを一つにしたいのですが、できません。

私がとった方法は、一つのゲーム中のvoid setup(),void draw()の中にもう一つのゲームのvoid draw(),void setup()の内容を書くというものです。

しかし、一方のゲームしか起動しませんでした。

下記の二つのゲームを一つのゲームとして成り立たせたいです。
概要は青いボールを避けながら、上から降ってくる赤いボールに触れるというものです。

float frballx; //仲間ボールのx座標 float frbally; //仲間ボールのy座標 float frsp=0; //仲間ボールの速度 float fra=0; //仲間ボールの加速度 float g = 3; float touch=0; void setup(){ size(500,650); frballx=width/2; } void draw(){ background(255); smooth(); frsp = frsp + g /30+fra; frbally = frbally + frsp; stroke(255,0,0); fill(255,0,0); ellipse(frballx,frbally,30,30); if(frbally>665){ textSize(20); text("GameOver",20,20); frameRate(0); } if(mouseX>frballx-30 && mouseX<frballx+30 && mouseY>frbally-30 && mouseY<frbally+30){ touch=80; fra=0.0001; next(); //次の球がでる }} //次の球の設定 void next(){ frbally=-200; frsp=0; frballx=20 + random(465); }
enball[] ball = new enball[7]; //敵ボールの定義 int i = 0; // forに使う int j= 0; // 同上 int M7 = 0; // ボールが7個ある float[] enballx = new float[7]; // 敵ボールの座標 float[] enbally = new float[7]; // int flg = 0; void setup() { size(500,650); for (i = 0; i < 7; i=i+1) { ball[i] = new enball(30, 30, 30, 30); //敵ボール ball[j].set(mouseX + 15, mouseY + 15, random(5, 8), random(5,8)); //(float X, float Y, float enspX, float enspY) enspXは敵のボールのX速度 enspYは敵ボールのY速度 j=j+1; if (j == 7) { j = 0; M7 = 1; } } } void draw() { background(255); for (i = 0; i < 7; i=i+1) { ball[i].latest(); //最新の画面に切り替える ball[i].hitwall(); //画面の上下左右端に当たったときの設定用 ball[i].ballfun(); //ボールの設定用 function hitme(); // ボールが自機にヒットしたときの設定用 } stroke(255,0,0); fill(255,0,0); rect(mouseX-5, mouseY-5, 10, 10); //自機の設定 } class enball { //敵ボール PVector posi; //位置を定義 PVector ensp; //速度を定義 enball(float X, float Y, float enspX, float enspY) { posi = new PVector(X, Y); //向きベクトル ensp = new PVector(enspX, enspY); //速度ベクトル } void latest() { posi.add(ensp); //位置+速度 } void hitwall() { if ((posi.x > width)||(posi.x < 0)) { ensp.x = -ensp.x; //ボールが左右の壁に触れると反射 } if ((posi.y > height)||(posi.y < 0)) { ensp.y = -ensp.y; //ボールが上下の壁に触れると反射 } } void ballfun() { stroke(0,0,255); fill(0,0,255); ellipse(posi.x+10, posi.y+10, 30, 30); //ボールの描画 enballx[i] = posi.x; enbally[i] = posi.y; } void set(float X, float Y, float enspX, float enspY) { //位置、速度 posi.set(X, Y); ensp.set(enspX, enspY); } } void hitme() { //敵ボールが自機ふヒットしたときGameOver if (M7 == 1 && mouseX + 18 > enballx[i] && mouseX - 18 < enballx[i] && mouseY + 18 > enbally[i] && mouseY - 18 < enbally[i] || flg == 1) { fill(255,0,0); // 文字色 textSize(20); text("GameOver",20,20); noLoop(); } }

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

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

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

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

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

m.ts10806

2018/06/05 04:33

実際のコードも何も提示されていないのがまずダメです。 >何がだめなのでしょうか?  わかりにくいと自覚があるのでしたら分かりやすい質問に再編してください。https://teratail.com/help/question-tips
AzukiV

2018/06/05 04:41

分かりました
coco_bauer

2018/06/05 07:37

「二つのゲームを一つにしたい」というのは具体的にどうするという事ですか? 2つのゲームの同時に動かすには、プロセスやスレッドなどを使って並行/並列に処理する必要がありますが、そうした実行機構を用意してありますか?
AzukiV

2018/06/05 09:32

語彙力がなくて、すみません。2つのゲームの同時に動かすということです。実行機構は用意できていません。
guest

回答2

0

すでにこちらの方でも自力で完成してましたが
やっぱり慣れている方のソースコードを見ると圧巻とします。

私もこのような整ったものを書けるように努力したいと思います。ありがとうございました。

投稿2018/06/05 15:28

AzukiV

総合スコア15

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

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

0

ベストアンサー

私がとった方法は、一つのゲーム中のvoid setup(),void draw()の中にもう一つのゲームのvoid draw(),void setup()の内容を書くというものです。

2つのゲームを組み合わせて、1つのゲームにしたいということですよね?
以下のようなコードでどうでしょうか。

Java

1EnemyBall[] ball = new EnemyBall[7]; //敵ボールの定義 2FriendBall frendball = new FriendBall(); 3 4float touch=0; 5class FriendBall { 6 float frballx; //仲間ボールのx座標 7 float frbally; //仲間ボールのy座標 8 float frsp=0; //仲間ボールの速度 9 float fra=0; //仲間ボールの加速度 10 final float g = 3; 11 FriendBall() { 12 frballx = width / 2; 13 } 14 void latest() { 15 frsp = frsp + g /30+fra; 16 frbally += frsp; 17 } 18 void ballfun() { 19 stroke(255,0,0); 20 fill(255,0,0); 21 ellipse(frballx, frbally, 30, 30); 22 } 23 void next() { 24 frbally=-200; 25 fra=0.0001; 26 frsp=0; 27 frballx=20 + random(465); 28 } 29 boolean isGameOver(){ 30 return frbally > 665; 31 } 32} 33class EnemyBall { //敵ボール 34 35 PVector posi; //位置を定義 36 PVector ensp; //速度を定義 37 EnemyBall(float X, float Y, float enspX, float enspY) { 38 posi = new PVector(X, Y); //向きベクトル 39 ensp = new PVector(enspX, enspY); //速度ベクトル 40 } 41 42 void latest() { 43 posi.add(ensp); //位置+速度 44 } 45 46 void hitwall() { 47 if ((posi.x > width)||(posi.x < 0)) { 48 ensp.x = -ensp.x; //ボールが左右の壁に触れると反射 49 } 50 if ((posi.y > height)||(posi.y < 0)) { 51 ensp.y = -ensp.y; //ボールが上下の壁に触れると反射 52 } 53 } 54 55 void ballfun() { 56 stroke(0,0,255); 57 fill(0,0,255); 58 ellipse(posi.x+10, posi.y+10, 30, 30); //ボールの描画 59 } 60 61 void set(float X, float Y, float enspX, float enspY) { //位置、速度 62 posi.set(X, Y); 63 ensp.set(enspX, enspY); 64 } 65} 66 67void setup() { 68 size(500,650); 69 for (int i = 0; i < ball.length; i++) { 70 ball[i] = new EnemyBall(30, 30, 30, 30); //敵ボール 71 ball[i].set(mouseX + 15, mouseY + 15, random(5, 8), random(5,8)); //(float X, float Y, float enspX, float enspY) enspXは敵のボールのX速度 enspYは敵ボールのY速度 72 } 73} 74 75void draw() { 76 background(255); 77 for(EnemyBall enemy:ball) { 78 enemy.latest(); //最新の画面に切り替える 79 enemy.hitwall(); //画面の上下左右端に当たったときの設定用 80 enemy.ballfun(); //ボールの設定用 function 81 hitme(enemy); // ボールが自機にヒットしたときの設定用 82 } 83 stroke(255,0,0); 84 fill(255,0,0); 85 rect(mouseX-5, mouseY-5, 10, 10); //自機の設定 86 frendball.latest(); 87 frendball.ballfun(); 88 if(frendball.isGameOver()){ 89 textSize(20); 90 text("GameOver",20,20); 91 noLoop(); 92 } 93 if(mouseX > frendball.frballx-30 && mouseX < frendball.frballx+30 && mouseY > frendball.frbally-30 && mouseY < frendball.frbally+30){ 94 touch=80; 95 frendball.next(); //次の球がでる 96 } 97} 98 99void hitme(EnemyBall enemy) { //敵ボールが自機にヒットしたときGameOver 100 if (mouseX + 18 > enemy.posi.x && mouseX - 18 < enemy.posi.x && mouseY + 18 > enemy.posi.y && mouseY - 18 < enemy.posi.y) { 101 fill(255,0,0); // 文字色 102 textSize(20); 103 text("GameOver",20,20); 104 noLoop(); 105 } 106}

◇主な変更点
FriendBallクラスを新設(質問分の最初のコードで行っている事を一部クラス化)
enballJavaの命名規則に合わせてクラス名の先頭を大文字に名称をEnemyBallに変更

◇余談
FriendBallクラスの変数:frballxfrballyEnemyBallクラスと同様にPVectorで管理したほうがよいかもです。
変数:frspfraも同様です。

投稿2018/06/05 12:19

編集2018/06/05 12:20
umyu

総合スコア5846

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

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

AzukiV

2018/06/05 15:28

すでにこちらの方でも自力で完成してましたが やっぱり慣れている方のソースコードを見ると圧巻とします。 私もこのような整ったものを書けるように努力したいと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問