javaで次のプログラムを作成してください。


アプレット上に5個のボタンを並べて配置し、ボタンを押すとそれぞれのボタンの下方に塗りつぶされた円が表示されるプログラムを作成せよ。

表示される円の縦方向座標(y座標)は一定の位置でよい。

各円はオブジェクトとして扱い、x座標とy座標をインスタンス変数として持つこと。

ボタンが押されるたびに得点が増えるものとする。

得点(score)は円のオブジェクトを扱うクラスのクラス変数として扱うこと。

(Aクラス)ボタンが押されるたびに得点は1~3の範囲でランダムに増加する。

(Bクラス)ボタンが押されるたびに得点は1ずつ増加する。

なお、得点が入るのはボタンに対応した円が新たに作成される時だけとする。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/23 01:33:36
  • 終了:2006/10/23 20:19:54

回答(1件)

id:yo-kun No.1

yo-kun回答回数220ベストアンサー獲得回数302006/10/23 12:18:06

ポイント60pt

どこかで見た気がするのですが…(^^;

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

abstract class Circle
{
  private int x ;
  private int y ;
  private int r ;
  static int score = 0 ;
  
  public Circle(int x, int y, int r)
  {
    this.x = x ;
    this.y = y ;
    this.r = r ;
  }
  
  public int getX()
  {
    return x ;
  }
  
  public int getY()
  {
    return y ;
  }
  
  public int getR()
  {
    return r ;
  }
  
  public static int getScore()
  {
    return score ;
  }
}

class CircleA extends Circle
{
  public CircleA(int x, int y, int r) 
  {
    super(x, y, r) ;
    score += (int)(3*Math.random()) + 1 ;
  }
}

class CircleB extends Circle
{
  public CircleB(int x, int y, int r)
  {
    super(x, y, r) ;
    ++score ;
  }
}


public class TestApplet extends Applet implements ActionListener {
  private static final long serialVersionUID = 1L;
  private static final int BUTTON_NUM = 5 ;
  private Button[] buttons ;
  private Circle[] circles ;

  public void init()
  {
    buttons = new Button[BUTTON_NUM] ;
    circles  = new Circle[BUTTON_NUM] ;
    for ( int i = 0 ; i < BUTTON_NUM ; ++i ){
      circles[i] = null ;
      buttons[i] = new Button("button"+ (i+1));
      buttons[i].addActionListener(this);
      add(buttons[i]);
    }
  }
  
  public void actionPerformed(ActionEvent e)
  {
    for ( int i = 0 ; i < BUTTON_NUM ; ++i ) {
      if ( e.getSource() == buttons[i] &amp;&amp; circles[i] == null ) 
      {
        int r = buttons[i].getWidth()/2 ;
        circles[i] = new CircleA(buttons[i].getX() + r,
                                 buttons[i].getY() + buttons[i].getHeight() + r, r);
        break ;
      }
    }
    repaint();
  }

  public void paint(Graphics g)
  {
    for(int i = 0 ; i < BUTTON_NUM ; ++i)
    {
      if (circles[i] != null) {
        int x = circles[i].getX() ;
        int y = circles[i].getY() ;
        int r = circles[i].getR() ;
        g.fillOval(x-r, y-r, 2*r, 2*r) ;
      }
    }
    String score = "score"+Circle.getScore();
    g.drawString(score, 0, getHeight());
  }
}

注意:

全てAクラスで作っています。

全てBクラスで作成する場合はactionPerformed内でnewするCirleAをCircleBに変えてください。

scoreはとりあえず左下に表示しておきます。

urlはダミーです

http://q.hatena.ne.jp/

id:surprise1985

ありがとうございました!また機会がありましたらその時はよろしくお願いします(^0^)

2006/10/23 20:18:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません