日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】GUI桌面弹球游戏

發(fā)布時間:2025/3/15 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】GUI桌面弹球游戏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

界面有色、可關(guān)閉

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;//游戲是否結(jié)束的旗標private boolean isLose = false;public void init() {f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});//設(shè)置桌面區(qū)域的最佳大小tableArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));f.add(tableArea);//定義鍵盤監(jiān)聽器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對象分別添加鍵盤監(jiān)聽器f.addKeyListener(keyProcessor);tableArea.addKeyListener(keyProcessor);//定義每0.1秒執(zhí)行一次的事件監(jiān)聽器ActionListener taskPerformer = evt ->{//如果小球碰到左邊邊框if(ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE) {xSpeed = -xSpeed;}//如果小球高度超越了球拍位置,且橫向不在球拍范圍之內(nèi),游戲結(jié)束if(ballY >= RACKET_Y - BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH)) {timer.stop();//設(shè)置游戲是否結(jié)束的旗標為trueisLose = true;tableArea.repaint();}//如果小球位于球拍之內(nèi),且到達球拍位置,球反彈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()方法,實現(xiàn)繪畫public void paint(Graphics g) {//如果游戲已經(jīng)結(jié)束if(isLose) {g.setColor(new Color(255, 0, 0));g.setFont(new Font("Times", Font.BOLD, 30));g.drawString("游戲已結(jié)束", 50, 200);}//如果游戲還沒結(jié)束else {//設(shè)置顏色,并繪制小球g.setColor(new Color(240, 240, 80));g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);//設(shè)置顏色,并繪制球拍g.setColor(new Color(80, 80, 200));g.fillRect(racketX, RACKET_Y, RACKET_WIDTH, RACKET_HEIGHT);}}} }

總結(jié)

以上是生活随笔為你收集整理的【Java】GUI桌面弹球游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。