【Java】GUI桌面弹球游戏
生活随笔
收集整理的這篇文章主要介紹了
【Java】GUI桌面弹球游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
界面有色、可關閉
import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.Timer;public class PinBall {//桌面的寬度private final int TABLE_WIDTH = 300;//桌面的高度private final int TABLE_HEIGHT = 400;//球拍的垂直位置private final int RACKET_Y = 340;//下面定義球拍的高度和寬度private final int RACKET_HEIGHT = 20;private final int RACKET_WIDTH = 60;//小球的大小private final int BALL_SIZE = 16;private Frame f = new Frame("彈球游戲");Random rand = new Random();//小球縱向運行速度private int ySpeed = 10;//返回一個-0.5~0.5的比率,用于控制小球的運行方向private double xyRate = rand.nextDouble() - 0.5;//小球橫向運行速度private int xSpeed = (int)(ySpeed * xyRate * 2);//用ballX、ballY代表小球的坐標private int ballX = rand.nextInt(200) + 20;private int ballY = rand.nextInt(10) + 20;//racketX代表球拍的水平位置private int racketX = rand.nextInt(200);private MyCanvas tableArea = new MyCanvas();Timer timer;//游戲是否結束的旗標private boolean isLose = false;public void init() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});//設置桌面區域的最佳大小tableArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));f.add(tableArea);//定義鍵盤監聽器KeyAdapter keyProcessor = new KeyAdapter() {public void keyPressed (KeyEvent ke) {//按下向左、向右鍵時,球拍水平坐標分別減少、增加if (ke.getKeyCode() == KeyEvent.VK_LEFT) {if (racketX > 0) {racketX -= 10;}}if (ke.getKeyCode() == KeyEvent.VK_RIGHT) {if (racketX < TABLE_WIDTH - RACKET_WIDTH) {racketX += 10;}}}};//為窗口和tableArea對象分別添加鍵盤監聽器f.addKeyListener(keyProcessor);tableArea.addKeyListener(keyProcessor);//定義每0.1秒執行一次的事件監聽器ActionListener taskPerformer = evt ->{//如果小球碰到左邊邊框if(ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE) {xSpeed = -xSpeed;}//如果小球高度超越了球拍位置,且橫向不在球拍范圍之內,游戲結束if(ballY >= RACKET_Y - BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH)) {timer.stop();//設置游戲是否結束的旗標為trueisLose = true;tableArea.repaint();}//如果小球位于球拍之內,且到達球拍位置,球反彈else if(ballY <= 0 ||( ballY > RACKET_Y - BALL_SIZE && ballX > racketX && ballX <= racketX + RACKET_WIDTH) ){ySpeed = -ySpeed;}//小球坐標增加ballY += ySpeed;ballX += xSpeed;tableArea.repaint();};timer = new Timer(100, taskPerformer);timer.start();f.pack();f.setVisible(true);}public static void main(String[] args) {new PinBall().init();}class MyCanvas extends Canvas{//顯式聲明serialVersionUID可以防止反序列化版本異常InvalidCastException//這是默認的聲明,顯示聲明serialVersionUID可以避免對象不一致private static final long serialVersionUID = 1L;//重寫Canvas的paint()方法,實現繪畫public void paint(Graphics g) {//如果游戲已經結束if(isLose) {g.setColor(new Color(255, 0, 0));g.setFont(new Font("Times", Font.BOLD, 30));g.drawString("游戲已結束", 50, 200);}//如果游戲還沒結束else {//設置顏色,并繪制小球g.setColor(new Color(240, 240, 80));g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);//設置顏色,并繪制球拍g.setColor(new Color(80, 80, 200));g.fillRect(racketX, RACKET_Y, RACKET_WIDTH, RACKET_HEIGHT);}}} }總結
以上是生活随笔為你收集整理的【Java】GUI桌面弹球游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据结构与算法】判断单链表是否有环的算
- 下一篇: 洛谷P5733、P5734、P5735、