このブログを検索

2019年9月26日木曜日

Java入門教室 Lesson11-6 図形を動かす ③

「Java入門教室」 図形を動かすプログラム。

 動く円 (左右に動く)に、もう1つ円 (上下に動く)、
 さらに 斜めに動く円を作りました。
 



 出来上がった!!
  ただの 安っぽいスクリーンセーバーだ ww

⭐️ 3つの円が動く
//◯動く方向を変えてみよう
//◯方向の変数を作ろう
//上下方向に動く球を新たに作ろう

import java.awt.*;
import java.awt.event.*;
class Slanting1{
    public static void main(String[] args){
        MyWindow mw = new MyWindow();
        Thread th = new Thread(mw);
        th.start();
    }
}

class MyWindow extends Frame implements Runnable {
    int cx1 = 0; //左右に動く球
    int cy1 = 200;
    int dire1 = 1; //1 右方向  2 左方向
    
    int cx2 = 200; //上下に動く球
    int cy2 = 0;
    int dire2 = 3; //3 下方向  4 上方向
    
    int cx3 = 500;
    int cy3 = 0;
    int dire3 = 5; //5右下 6右上 7左上 8左下
    
    MyWindow(){
        setTitle("2つの円を動かす");
        setSize(600, 400);
        setVisible(true);
        addWindowListener( new WinListener() );
    }
    
    public void run() {
        while(true) {
            switch(dire1) {  //左右に動く球の方向転換
                case 1:
                    cx1 = cx1 + 2;
                    if(cx1>600) dire1 = 2; //左方向に転換
                    break;
                case 2:
                    cx1 = cx1 - 2;
                    if(cx1<0) dire1 = 1; //右方向に転換
                    break;
            }
            switch(dire2) { //上下に動く球の方向転換
                case 3:
                    cy2 = cy2 + 2;
                    if(cy2>400) dire2 = 4; //上方向に転換
                    break;
                case 4:
                    cy2 = cy2 - 2;
                    if(cy2<0) dire2 = 3; //下方向に転換
                    break;
            }
            switch(dire3){ //斜めに動く球の方向転換
                case 5: //右下の場合
                    cx3 = cx3 + 2; cy3 = cy3 + 2;
                    if(cx3>600 && cy3>400) dire3 = 7;
                    if(cx3>600 && cy3<400) dire3 = 8;
                    if(cx3<600 && cy3>400) dire3 = 6;
                    break;
                case 6: //右上の場合
                    cx3 = cx3 + 2; cy3 = cy3 - 2;
                    if(cx3>600 && cy3<0  ) dire3 = 8;
                    if(cx3<600 && cy3<0  ) dire3 = 5;
                    if(cx3>600 && cy3>0  ) dire3 = 7;
                    break;
                case 7: //左上の場合
                    cx3 = cx3 - 2; cy3 = cy3 - 2;
                    if(cx3<0   && cy3<0  ) dire3 = 5;
                    if(cx3<600 && cy3<0  ) dire3 = 8;
                    if(cx3<0   && cy3>0  ) dire3 = 6;
                    break;
                case 8: //左下の場合
                    cx3 = cx3 - 2; cy3 = cy3 + 2;
                    if(cx3<0   && cy3>400) dire3 = 5;
                    if(cx3<0   && cy3<400) dire3 = 5;
                    if(cx3>0   && cy3>400) dire3 = 7;
                    break;
            }
            
            repaint();
            try{ Thread.sleep(15); } catch(InterruptedException e) {}
        }
    }
    
    public void paint(Graphics g) {
        g.setColor(Color.LIGHT_GRAY);
        g.fillRect(0, 0, 600, 400);
        g.setColor(Color.GREEN);
        g.fillOval(cx1-30, cy1-30, 60, 60);
        g.setColor(Color.PINK);
        g.fillOval(cx2-30, cy2-30, 60, 60);
        g.setColor(Color.YELLOW);
        g.fillOval(cx3-30, cy3-30, 60, 60);
    }
}

class WinListener extends WindowAdapter{
    public void windowClosing(WindowEvent e){ System.exit(0); }

}

今後の改良点。
・斜めに動く円ばかり救った場合、
 条件分岐の部分は1つにまとめられるのかな。
・円ではなく ドット絵を動かしてみたい。
・マウスを押すと 方向を変えたり出来るのかな。
・金魚鉢のプログラミングを作りたい。
これらは 今すぐには出来ないな、Java入門教室をもっと勉強しよう。

今日の教訓
 やりたいことが、いっぱい。

0 件のコメント:

コメントを投稿