java實現(xiàn)彈球小游戲
更新時間:2021年06月17日 08:36:45 作者:冀十三
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)彈球小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
GUI實現(xiàn)彈球小游戲,供大家參考,具體內(nèi)容如下
先看一下游戲效果圖。
一個簡單的Demo。也比較簡單,新手試著做一做完善改進(jìn)。
源代碼
import Com.Style.FontStyle; import javax.swing.*; import java.awt.*; import java.awt.event.*; /** * @Author: 冀十三 * @DescIption: 彈球小游戲 * @Date:2021--06--10--17:08 */ public class Demo extends JFrame { //創(chuàng)建游戲窗口 public Demo() { init(); } //桌面大小 private final int TABLE_WIDTH = 450; private final int TABLE_HEIGHT = 600; //球大小 private final int BALL_SIZE = 15; //球拍大小 private final int RACKET_WIDTH = 120; private final int RACKET_HEIGHT = 20; //記錄小球坐標(biāo) private double BallX = 100; private double BallY = 200; //記錄球拍坐標(biāo) private double RACKET_X = 150; private final double RACKET_Y = 380; //記錄小球速度 private double speedX = 10; private double speedY = 20; //記錄游戲是否結(jié)束 private boolean isOver = false; //聲明一個積分器 int score= 0; //聲明一個計時器。 ActionListener run = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //更新小球坐標(biāo)讓小球動起來 BallY+=speedY; BallX+=speedX; //重繪界面 mycanvas.repaint(); //碰到兩邊的時候 if (BallX<=0||BallX>=TABLE_WIDTH-BALL_SIZE){ speedX=-speedX; } //碰到上邊界的時候 if(BallY<=0){ speedY=-speedY; } //接住小球的時候 if ( BallY>=(RACKET_Y-BALL_SIZE)&&BallX>RACKET_X&&BallX<(RACKET_X+RACKET_WIDTH)){ //得10分 score+=10; speedY=-speedY; } if ((BallY>(RACKET_Y-BALL_SIZE)&&(BallX<RACKET_X||BallX>RACKET_X+RACKET_WIDTH))){ timer.stop(); isOver=true; mycanvas.repaint(); } } } ; private Timer timer = new Timer(60, run); //內(nèi)部類繼承Canvas充當(dāng)畫布 private class myCanvas extends Canvas { public void paint(Graphics g) { //繪制內(nèi)容 //如果游戲結(jié)束 if (isOver) { //給畫筆顏色 g.setColor(new Color(0xFF9A1B44, true)); //給畫筆字體 g.setFont(new Font("宋體", FontStyle.BOLD, 25)); g.drawString("Game Over!", 120, TABLE_HEIGHT / 4); g.drawString("成績"+score+"分", 120, TABLE_HEIGHT / 3); g.drawString("按空格再來一次", 120, TABLE_HEIGHT / 2); } else { //否則游戲中 //繪制小球 g.setColor(new Color(0xFF09FAA6, true)); g.fillOval((int) BallX, (int) BallY, BALL_SIZE, BALL_SIZE); //畫一個積分系統(tǒng) //上色 g.setColor(new Color(0xE8DC0C77,true)); //給畫筆字體 g.setFont(new Font("宋體", FontStyle.BOLD, 25)); g.drawString("得分:"+score, 25, 25); //繪制球拍 g.setColor(new Color(0xFF0E51D7, true)); g.fillRect((int) RACKET_X, (int) RACKET_Y, RACKET_WIDTH, RACKET_HEIGHT); timer.start(); } } } //創(chuàng)建繪畫區(qū) myCanvas mycanvas = new myCanvas(); //窗口初始化 public void init() { JFrame jFrame = new JFrame(); jFrame.setTitle("彈球小游戲");//窗口名稱 jFrame.pack();//自適應(yīng)布局 jFrame.setVisible(true);//可見 jFrame.add(mycanvas); jFrame.setBounds(500, 200, TABLE_WIDTH, TABLE_HEIGHT); jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//關(guān)閉 mycanvas.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));//畫布大小 jFrame.setResizable(false);//大小不可變 KeyListener keyListener = new KeyAdapter() { //重寫鍵盤被按壓的方法 @Override public void keyPressed(KeyEvent e) { //接收按下的是哪個鍵 int key = e.getKeyCode(); if (key == KeyEvent.VK_LEFT) { if (RACKET_X >0) { RACKET_X -= 30; } } if (key == KeyEvent.VK_RIGHT) { if (RACKET_X < (TABLE_WIDTH - RACKET_WIDTH )) { RACKET_X += 30; } } if (key == KeyEvent.VK_SPACE) { if (isOver=true) { Demo.main(null); } } } }; //窗口獲取鍵盤監(jiān)聽 jFrame.addKeyListener(keyListener); //鍵盤獲取鍵盤監(jiān)聽 mycanvas.addKeyListener(keyListener); } public static void main(String[] args) { new Demo(); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis中執(zhí)行相關(guān)SQL語句的方法
本文主要介紹了MyBatis中執(zhí)行相關(guān)SQL語句的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08Mybatis?MappedStatement類核心原理詳解
這篇文章主要介紹了Mybatis?MappedStatement類,mybatis的mapper文件最終會被解析器,解析成MappedStatement,其中insert|update|delete|select每一個標(biāo)簽分別對應(yīng)一個MappedStatement2022-11-11SpringMvc/SpringBoot HTTP通信加解密的實現(xiàn)
這篇文章主要介紹了SpringMvc/SpringBoot HTTP通信加解密的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08IDEA編譯報錯:Error:java:無效的源發(fā)行版:17的解決辦法
IDEA里面裝了幾個版本的JDK,導(dǎo)入工程后時不時提示一下錯誤,下面這篇文章主要給大家介紹了關(guān)于IDEA編譯報錯:Error:java:無效的源發(fā)行版:17的解決辦法,需要的朋友可以參考下2023-01-01詳解application.properties和application.yml文件的區(qū)別
這篇文章主要介紹了詳解application.properties和application.yml文件的區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01JAVA 文件監(jiān)控 WatchService的示例方法
本篇文章主要介紹了JAVA 文件監(jiān)控 WatchService的示例方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10