桌球小遊戲

託帕發表於2018-09-28

1:實現動畫,小球沿著水平方向移動並做邊界檢測

import  java.awt.*;
import javax.swing.*;
 
public class BallGame extends JFrame {
     
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
     
    double  x=100;    //小球的橫座標
    double  y=100; //小球的縱座標
    boolean  right = true;   //方向
    //畫視窗的方法
    public void paint(Graphics  g){
        g.drawImage(desk, 0, 0, null);
        g.drawImage(ball, (int)x, (int)y, null);
         
         
        if(right){
            x = x +10;            
        }else{
            x = x - 10;
        }
         
        if(x>856-40-30){    //856是視窗寬度,40是桌子邊框的寬度,30是小球的直徑
            right = false;
        }
         
        if(x<40){        //40是桌子邊框的寬度
            right = true;
        }
 
         
    }
     
    //視窗載入
    void launchFrame(){
        setSize(860,500);
        setLocation(50,50);
        setVisible(true);
         
        //重畫視窗,每秒畫25次
        while(true){
            repaint(); 
            try{
                Thread.sleep(40);   //40ms,   1秒=1000毫秒.  大約一秒畫25次視窗
            }catch(Exception e){
                e.printStackTrace();
            }
             
        }
         
    }
     
    //main方法是程式執行的入口
    public static void main(String[] args){
        BallGame game = new BallGame();
        game.launchFrame();
    }
     
}

2:實現小球沿著任意角度飛行。

import  java.awt.*;
import javax.swing.*;
 
public class BallGame extends JFrame {
     
    Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
    Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
     
    double  x=100;    //小球的橫座標
    double  y=100; //小球的縱座標
     
    double degree = 3.14/3;    //弧度。此處就是:60度
     
    //畫視窗的方法
    public void paint(Graphics  g){
        g.drawImage(desk, 0, 0, null);
        g.drawImage(ball,(int)x, (int)y, null);
         
         
        x  = x+ 10*Math.cos(degree);
        y  = y +10*Math.sin(degree); 
         
        //碰到上下邊界
        if(y>500-40-30||y<40+40){//500是視窗高度;40是桌子邊框,30是球直徑;最後一個40是標題欄的高度
            degree = -degree;
        }
         
        //碰到左右邊界
        if(x<40||x>856-40-30){
            degree = 3.14 - degree;
        }
         
    }
     
    //視窗載入
    void launchFrame(){
        setSize(856,500);
        setLocation(50,50);
        setVisible(true);
         
        //重畫視窗,每秒畫25次
        while(true){
            repaint(); 
            try{
                Thread.sleep(40);   //40ms,   1秒=1000毫秒.  大約一秒畫25次視窗
            }catch(Exception e){
                e.printStackTrace();
            }
             
        }
         
    }
     
    //main方法是程式執行的入口
    public static void main(String[] args){
        BallGame game = new BallGame();
        game.launchFrame();
    }
     
}

 

 

 

相關文章