Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

ゲーム作りでクラスエラーに悩んでいます

落ちてきたボールをはじき返すという単純なアップレットです

//racket
//ラケット・ゲーム

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

/*
    <applet code="racket" width=130 height=180>
    </applet>
*/


public class racket extends java.applet.Applet
    implements Runnable , MouseMotionListener{

    int speed = 30;//表示時間
    int num = 3;//ボール残数
    int bx , by;//ボールの位置(x座標、y座標)
    int rx , ry;//ラケットの位置(x座標、y座標)
    int ballWidth=8 , ballHeight=4;//ボールの絵の幅、高さ、
    int racketWidth = 20,racketHeight=4;//ラケットの幅、高さ
    int margin = 5;//横の余裕
    int score;

    boolean loop=true;//繰り返すための変数
    Thread kicker = null;//アニメーションのためのスレッド変数

    Dimension d;//表示領域
    Image offs;//オフスクリーン
    Graphics grf;

    public void init(){

    /*オフスクリーンの設定*/
    d = getSize(); //表示領域の取得
    offs = createImage(d.width,d.height);
    grf = offs.getGraphics();

    /*ボールの初期位置設定*/
    bx = margin + (int)(Math.random()*(float)(d.width-(margin*2+ballWidth+1)));
    by = 50;

    /*マウスモーション・リスナーとして自分自身を登録*/
    addMouseMotionListener(this);

    }

    public void paint(Graphics g){
    update(g);
    }

    public void update(Graphics g){
    
    /*背景をオレンジに*/
    grf.setColor(Color.orange);
    grf.fillRect(0,0,d.width,d.height);
    grf.setColor(Color.green);
    grf.fillRect(margin,margin,d.width-margin*2,d.height-margin*2);

    /*ラケットを描く*/
    grf.setColor(Color.white);
    grf.fillRect(rx,ry,racketWidth,racketHeight);

    /*ボールを描く*/
    grf.setColor(Color.yellow);
    grf.fillOval(bx,by,ballWidth,ballHeight);
    grf.setColor(Color.black);
    grf.drawOval(bx,by,ballWidth,ballHeight);

    /*点数の表示+/
    grf.setColor(Color.black);
    grf.drawString("Score = " + score,12,12);
    if ( num < 0 ){
        grf.setColor(Color.black)
        grf.setString("GameOver !!",20,80)
    }
    
    /*オフスクリーンのイメージを一挙に実際の領域に書く
    g.drawImage(offs,0,0,this);
    }

    public void mouseDragged(java.awt.event.MouseEvent e){
    /*マウスが押されてドラッグされた*/
    }

    public void mouseMoved(java.awt.event.MouseEvent e){
    /*ラケットが移動した*/

    rx = e.getX();//ラケットの位置を更新

    /*ラケットがコート外に行かないための処理*/
    if(rx<margin){
        rx = margin;
    }
    if(rx+racketWidth > d.width-margin){
        rx = d.width-margin-racketWidth;
    }

    repaint();
    }

    public void start(){
    if(kicker == null){
        /*スレッドを実行させる*/
        kicker = new Thread(this);
        kicker.start();
    }
    }

    public void stop(){
    /*スレッドをとめる*/
    kicker = null;
    }

    public void run(){
    int dx = 2,dy = 2; //ボールの進む量(x増加分、y増加分)
    
    /*実行中のスレッドをチェック*/
    Thread thisThread = Thread.currentThread();

    /*くりかえし*/
    while(loop && kicker ==thisThread){
    
        /*ラケットに当たったときの処理*/
        if(by+ballHeight >= ry && by + ballHeight <= ry+racketHeight &&
        bx + ballWidth >= rx && bx <= rx+racketWidth){
        /*ラケットに当たったら上へ返す*/
        dy = -2;
        if(bx < rx || bx+ballWidth>rx +racketWidth){ //左端か、右端に当たった場合
            /*ラケットの端にあたったとき*/
            if (dx ==0 ){
            /*垂直にきたボール*/
            if ( bx < rx){ //左端にきたボールは・・・
                dx = -2;
            }
            if(bx+ballWidth >rx + racketWidth){ //右端に来たボールは・・・
                dx = +2;
            }
            }else{
            /*斜めにきたボールは垂直に返す*/
            dx = 0;
            }
        }
        score = score +1; //得点の加算
        }

        /*左端、右端、上端にきたときの処理*/
        if(bx < 0+margin){
        /*左端にきたら反転*/
        dx = 2;
        }
        if(bx+ballWidth>d.width-margin){
        /*右端にきたら反転*/
        dx = -2;
        }
        if(by < 0+margin){
        /*上端に着たら反転*/
        dy = -2;
        }

        /*ラケットの下へ行ったときの処理*/
        if(by+ballHeight > d.height-margin){
        /*下端に着たらボールを初期位置へ*/
        bx = margin + (int)(Math.random()*(float)(d.width-(margin*2+ballWidth+1)));
        by = 50;
        num = num-1;//ボールの残数を減らす
        }

        /*ゲーム終了の判定*/
        if(num<0){
        loop = false;
        }

        bx = bx+dx;
        by = by+dy;

        repaint();

        try{
        Thread.sleep(speed);
        }catch(InterruptedException e){}
    }
    } 
}
    

実行すると、
racket.java:15: racket は abstract でなく、java.awt.event.MouseMotionListener 内の abstract メソッド mouseDragged(java.awt.event.MouseEvent) をオーバーライドしません。
public class racket extends java.applet.Applet
       ^
エラー 1 個

と、表示されてしまいます。


何が悪いのか全く見当がつきません。
お時間のある方ご教授お願いいたします。

2

回答

4905

閲覧

2件の回答

評価

0

そのままの意味ではないの??
public void mouseDragged(java.awt.event.MouseEvent e){
    /*マウスが押されてドラッグされた*/
  }
が実装されていないからでは??
System.outでも何でも良いので何かしら処理を書かなければいけなかったはずだが…
だって抽象メソッドのままじゃん。

評価

0

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1220286117

マルチポスト…ですか?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。