小さなボールの衝突

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(); 
        
    } 
}

 

おすすめ

転載: www.cnblogs.com/jiang0123/p/11285986.html