JavaのAWTを使用して書かれたボールの衝突を振ります
スレッドには、知識の非常に重要な一枚です!!!
// ボール パブリック クラスボール{ // 1.特性:すべてのボール用の共通フィールド のint X; int型Y; int型 D; // ボール半径 のint速度; // 速度 INT DIR; // 向き カラーC; / / 色 // 四方を定義 パブリック 静的 最終 int型 LEFT_UP = 1; // 左上 パブリック 静的 最終 int型 LEFT_DOWN = 2; // 左下 パブリック 静的 最終 int型 RIGHT_UP = 3; //右上 パブリック 静的 最終 int型 RIDHT_DOWN = 4; // 右下 // コンストラクタランダムに構築 パブリックボール(){ X =(INT)(Math.random()800 * ); Y =(INT)(Math.random() 600 * ); D =(INT)(Math.random()* 50)+ 50 ; C = 新しい新しいカラー( (INT)(Math.random()* 256 )、 (INT)(Math.random()* 256 )、 (int型)(Math.random()* 256 )); DIR =(INT)(Math.random()* 4)+ 1。。; 速度 =(INT)(Math.random()* 5)5 +。。 。 } // 動作: // ビデオ / * fillOval方法: 楕円形の外部矩形を指定された現在の塗りつぶしの色。 パラメータ: X - X左上に充填する楕円の座標。 Y - y座標充填される楕円の左上隅。 幅-楕円の幅が満たされています。 高さ-楕円の充填高さ。 * / 公共 ボイド描画(グラフィックG){ g.setColor(C); // 設定されたカラー g.fillOval(X、Y、D、D); } //変化の座標方向 // 衝突検出 公共 ボイド変更(){ スイッチ(DIR){ ケース RIGHT_UP:// 右上方向 X + =速度; // 速度移動速度 Y - = 速度; IF(Y <0 ){ DIR = RIDHT_DOWN; } IF(X> 800- D){ DIR = LEFT_UP; } BREAK ; 場合 RIDHT_DOWN:// 右下方向 X + =高速。 Y+ = 速度; もし(X> 800- D){ // DIR = RIDHT_DOWN。 DIR = LEFT_DOWN。 } であれば(Y> 600〜D){ DIR = RIGHT_UP。 } ブレーク; ケース LEFT_UP:// 向左上方向移动 X - = スピード。 Y - = 速度。 もし(x <0 ){ DIR = RIGHT_UP。 } であれば(Y <0 ){ DIR = LEFT_DOWN; } BREAK ; ケース LEFT_DOWN:// 左下方向 X - = 高速; Y + = 高速; IF(X <0){ // それが左境界になるので、右下方向にボール DIR = RIDHT_DOWN; } 場合(Y> 600-D)は{ // それが境界となるとなるように、上部にボールの方向が左 DIR = LEFT_UP; } BREAK ; デフォルト: のSystem.out.println( "エラー")。 でSystem.exit(0 )。 } } }
//形成
パブリック クラスを BallFrame 拡張したJFrameを{ // コンストラクタ パブリックBallFrame(){ // フォーム下部に作成します // JFrameのフレーム=新しい新しいJFrameの(「フォーム」); // BallFrameは、この直接のJFrameを継承させるに呼び出し // 位置と形状の大きさに設定 // frame.setBounds(500200800600)を; // XY幅高 この .setBounds(500200800600 ); // コンテナ // (= JPanelのJPanelのパネルは、新しい新しい); BallPanelパネル= 新しい新しいBallPanelは(); // 背景色設定 panel.setBackground(Color.black)を、 // フォーム上に上部容器を形成するために容器を入れる // frame.add(パネル)、 この.add(パネル); panel.moveを(); // ボール移動方法 // 設定された表示形式 // フレーム.setVisible(真の); この .setVisible(真の); //は閉じるようにフォームを設定 // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); この.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } 公共の 静的な 無効メイン(文字列[]引数) { 新新しいBallFrame(); } }
/ * * 1は、アレイは、複数のボール格納作成 コンストラクタで* 2を、アレイが初期化される 各ボールを介してループするため、塗装方法で* 3 トラバースを介してボールを移動させる* 4 * * / / / カスタム・コンテナ・クラス パブリック クラス BallPanel 延びJPanelの{ // ボールオブジェクト作成 ボールB1 = 新しい新)(ボールと、 ボール[]ボール = 新しい新しいボール[20である]; // 構成 パブリックBallPanel(){ ため(int型私は= 0;私はballs.lengthを<; I ++は){ ボール[I] = 新しい新しいボール(); } } //描画方法オーバーライド親 // グラフィックブラシクラス 公共 ボイドペイント(グラフィックスG)は{ スーパー(G).paint; b1.draw(G)は、 のために(int型 ; Iはballs.length <I ++はI = 0 ){ ボール[I] .draw(G); } } // メソッド移動 公共 ボイド移動を(){ // 新しいスレッド開く 新しい新しいスレッド(){ 公共 ボイドRUN(){ ながら(真の){ b1.change(); のために(int型I = 0; 私はballs.lengthを<; I ++ ){ ボール[I] .change()。 } // 重构 再描画()。 試す{ のThread.sleep( 50 )。 } キャッチ(例外e){ e.printStackTrace(); } } } } .start(); } }