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

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

ただいまの
回答率

90.51%

  • Java

    13790questions

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

  • Processing

    255questions

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

6個の球をよけるゲームを作りたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 185

AzukiV

score 3

ネットや教科書を参考にして作ってみたのですが、まったく違ったプログラムができあがってしまいました。

ゲームの内容は6つの球をよけるというものです。しかし、できたのはペイントのようなものでした。
自信があったために、どこが間違っているのかわかりません。

enball[] ball = new enball[6]; //敵ボールを設定

int i = 0; //forに使う
int j = 0; //同上

float[] enballx = new float[6]; //敵ボールx座標
float[] enbally = new float[6]; //敵ボールy座標

int flg = 0; 
int M6 = 0; //ボールが6で1

void setup(){

  frameRate(60);
  size(600,600);

  for(i = 0; i<6; i=i+1){
    ball[i] = new enball(80,80,80,80); //敵ボールを作った

    frameRate(60);}}


    void draw(){
  for (i = 0; i<6; i=i+1){

    hitme(); //自機に当たった

    ball[i].latest(); //最新の状態にする

    ball[i].hitwall(); //画面端にヒット

    ball[i].play(); }//動き

    ellipse(mouseX,mouseY,10,10);}


//class
//敵ボールについて
class enball{

  PVector posi; //位置設定
  PVector sp; //速度設定

   enball(float X, float Y, float spX, float spY){

     posi = new PVector(X,Y); //位置のを作った
     sp = new PVector(spX,spY); //速度のを作った
   }



void latest(){
  posi.add(sp);} //速度add


void hitwall(){
  if((posi.x > width) || (posi.x < 0)){
  sp.x = -sp.x;}

  if((posi.y > height) || (posi.y < 0)){
    sp.y = -sp.y;}}


void play(){
  stroke(0,0,255);
  fill(0,0,255);
  ellipse(posi.x+5,posi.y+5,12,12);

  enballx[i] = posi.x;
  enbally[i] = posi.y;}


  //速度と位置をセットする
  void set(float X,float Y,float spX,float spY){
    posi.set(X,Y);
    sp.set(spX,spY);}}







//関数
void hitme(){

  if(M6 ==1 && mouseX + 10 > enballx[i] && mouseX - 10 < enbally[i] && mouseY - 10 <enbally[i] || flg ==1){

    fill(0);
    textSize(50);
    textAlign(CENTER,CENTER);
    text("ドンマイ!",300,300);
    noLoop();
  }}

  void keyPressed(){
    if(key =='A' || key == 'a'){
      flg = 0;
      loop();}}

void mousePressed() {
  ball[j].set(mouseX + 10, mouseY + 10, random(-10, 10), random(-10, 10));
  j++;
  if (j == 6) {   // ボールを20個つくる
    j = 0;
    M6 = 1;  // ボールが最大となった
  }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

複数の問題がありそうですが、多分一番気にしておられる点だけコメントします。

問題は「ボールを移動させるアニメーション」が期待だったのに「ボールの軌跡が点々と塗りつぶされる」結果になってしまったことだと思います。原因はdrawの働きを勘違いしておられることでしょうね。

(A) drawメソッドはフレーム単位で繰り返し呼び出される(本コードでは1秒に60回程度)
(B) しかし「前のフレームで描画したものを自動的に消す」なんてことはしてくれない

質問者さんは(A)は分かっておいでのようですが(B)が把握できていないのだと思います。アニメーションをしたいなら「前のフレームで描画した内容を自分で消さなければならない」ことに注意してください。

対処:
とりあえずの対処としては「drawメソッドの先頭でスケッチの画面全体を一旦全て消す」のが簡単だと思います。

...
void draw() {
  fill(255);                 // 追加
  rect(0, 0, width, height); // 追加
  ...
}
...

ちなみにご質問のコードは質問者さんが動かしたときのものではないと思います。なぜなら文法エラーになるからです。以下の変数宣言が抜けているようです。

enball[] ball = new enball[6];

コードを提示する際には「ご自分が動かしたそのまんまの最新のコード」を示すようご注意ください。さもないと閲覧者が再現する際に余計な手間がかかります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/05 09:54

    ありがとうございます。
    質問する際に入力を失敗してしまい、消えていました。申し訳ございません

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13790questions

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

  • Processing

    255questions

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