ボールが動いていくプログラム

いつかゲームが作れたらいいねなんて思ってる人はきっと多いと思う。
かくいう自分もその一人で、ようやく思ってるだけから実行に移そうかなとか考え中。
ちょうどJavaをやる機会があったのでとりあえずボール動かしてみたよ。次の目標は壁での跳ね返りだね。


まともに参考にするならこちらのサイトが良いと思います。
多くのサンプルコードもあってとてもありがたい。
参考:ボールを動かす - 人工知能に関する断想録

ソースは続きを読むから:

import java.awt.*;

//メインのクラス
public class MoveBall{
	int width, height;	//縦横サイズ
	Frame mainF;		//フレーム
	Canvas mainC;		//キャンバス
	
	public MoveBall(){
		//サイズ設定して
		width = 500;
		height = 500;
		
		//キャンバスの大きさと背景色を指定
		mainC = new MainCanvas();
		mainC.setSize(200,200);
		mainC.setBackground(Color.blue);
		
		//フレームの大きさと背景色を指定、キャンバスをフレームに載せる
		mainF = new Frame("moving ball");
		mainF.setBackground(Color.green);
		mainF.setSize(width,height);
		mainF.setLayout(new FlowLayout());
		mainF.add(mainC);
		
		mainF.setVisible(true);
	}
	
	public static void main(String[] args){
		//main関数でインスタンス化を行います
		MoveBall frame = new MoveBall();
	}
}

//キャンバスクラス
//こいつがスレッド立ててそっちでボールを動かすよ
class MainCanvas extends Canvas implements Runnable{
	int x, y;		//ボールの位置
	int vx = 1;		//移動量
	int vy = 1;		//移動量
	Thread thread;	//スレッド準備
	
	//コンストラクタは位置を指定してスレッド開始
	public MainCanvas(){
		x = 5;
		y = 5;
		
		thread = new Thread(this);
		thread.start();
	}
	
	//x,yの位置にボール描くよ
	public void paint(Graphics g){
		g.setColor(Color.white);
		g.fillOval(x, y, 10, 10);
	}
	
	//x,yの移動を行うスレッドです
	//スレッドを立てるとrunメソッドが呼ばれるので
	//そこでメインループさせときます
	public void run(){
        while (true) {
            x += vx;
            y += vy;

            repaint();

        	//早すぎて困るのでスリープ
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
	}
}