欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)坦克大戰(zhàn)小游戲

 更新時(shí)間:2021年01月22日 10:15:34   作者:始料未及長(zhǎng)安  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)坦克大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

用java程序編寫的一個(gè)坦克大戰(zhàn),可以實(shí)現(xiàn)兩人同時(shí)在線

需要代碼的可以私信聯(lián)系我

package com.mr.frame;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Vector;

import javax.swing.JPanel;

import com.mr.model.Base;
import com.mr.model.Boom;
import com.mr.model.Bot;
import com.mr.model.Bullet;
import com.mr.model.Level;
import com.mr.model.Map;
import com.mr.model.Tank;
import com.mr.model.wall.Wall;
import com.mr.type.GameType;
import com.mr.type.TankType;
import com.mr.util.ImageUtil;

/**
 * 游戲面板 實(shí)際大小[794,572]
 * 
 * @author www.mingrisoft.com
 *
 */
public class GamePanel extends JPanel implements KeyListener {
 /**
 * 游戲界面刷新時(shí)間:20毫秒
 */
 public static final int FRESH = 20;
 private BufferedImage image;// 在面板中顯示的主圖片
 private Graphics2D g2;// 圖片的繪圖對(duì)象
 private MainFrame frame;// 主窗體
 private GameType gameType;// 游戲模式
 private Tank play1, play2;// 玩家1、玩家2
 private boolean y_key, s_key, w_key, a_key, d_key, up_key, down_key, left_key, right_key, num1_key;// 按鍵是否按下標(biāo)志,左側(cè)單詞是按鍵名
 private int level;// 關(guān)卡值
 private List<Bullet> bullets;// 所有子彈集合
 private volatile List<Tank> allTanks;// 所有坦克集合
 private List<Tank> botTanks;// 電腦坦克集合
 private final int botCount = 20;// 電腦坦克總數(shù)
 private int botReadyCount = botCount;// 準(zhǔn)備出場(chǎng)的電腦坦克總數(shù)
 private int botSurplusCount = botCount;// 電腦坦克剩余量
 private int botMaxInMap = 6;// 場(chǎng)上最大電腦坦克數(shù)
 private int botX[] = { 10, 367, 754 };// 電腦坦克出生的3個(gè)橫坐標(biāo)位置
 private List<Tank> playerTanks;// 玩家坦克集合
 private volatile boolean finish = false;// 游戲是否結(jié)束
 private Base base;// 基地
 private List<Wall> walls;// 所有墻塊
 private List<Boom> boomImage;// 坦克陣亡后的爆炸效果集合
 private Random r = new Random();// 隨機(jī)數(shù)對(duì)象
 private int createBotTimer = 0;// 生產(chǎn)電腦計(jì)時(shí)器
 private Tank survivor;// (玩家)幸存者,用于繪制最后一個(gè)爆炸效果

 /**
 * 游戲面板構(gòu)造方法
 * 
 * @param frame
 *   - 主窗體
 * @param level
 *   - 關(guān)卡
 * @param gameType
 *   - 游戲模式
 */
 public GamePanel(MainFrame frame, int level, GameType gameType) {
 this.frame = frame;
 this.level = level;
 this.gameType = gameType;
 setBackground(Color.WHITE);// 面板使用白色背景
 init();// 初始化組件
 Thread t = new FreshThead();// 創(chuàng)建游戲幀刷新線程
 t.start();// 啟動(dòng)線程
 addListener();// 開啟監(jiān)聽
 }

 /**
 * 組件初始化
 */
 private void init() {
 bullets = new ArrayList<Bullet>();// 實(shí)例化子彈集合
 allTanks = new ArrayList<>();// 實(shí)例化所有坦克集合
 walls = new ArrayList<>();// 實(shí)例化所有墻塊集合
 boomImage = new ArrayList<>();// 實(shí)例化爆炸效果集合

 image = new BufferedImage(794, 572, BufferedImage.TYPE_INT_BGR);// 實(shí)例化主圖片,采用面板實(shí)際大小
 g2 = image.createGraphics();// 獲取主圖片繪圖對(duì)象

 playerTanks = new ArrayList<>();// 實(shí)例化玩家坦克集合
 play1 = new Tank(278, 537, ImageUtil.PLAYER1_UP_IMAGE_URL, this, TankType.player1);// 實(shí)例化玩家1
 if (gameType == GameType.TWO_PLAYER) {// 如果是雙人模式
 play2 = new Tank(448, 537, ImageUtil.PLAYER2_UP_IMAGE_URL, this, TankType.player2);// 實(shí)例化玩家2
 playerTanks.add(play2);// 玩家坦克集合添加玩家2
 }
 playerTanks.add(play1);// 玩家坦克集合添加玩家1

 botTanks = new Vector<>();// 實(shí)例化電腦坦克集合
 botTanks.add(new Bot(botX[0], 1, this, TankType.bot));// 在第一個(gè)位置添加電腦
 botTanks.add(new Bot(botX[1], 1, this, TankType.bot));// 在第二個(gè)位置添加電腦
 botTanks.add(new Bot(botX[2], 1, this, TankType.bot));// 在第三個(gè)位置添加電腦
 botReadyCount -= 3;// 準(zhǔn)備出場(chǎng)的坦克總數(shù)減去初始化數(shù)量
 allTanks.addAll(playerTanks);// 所有坦克集合添加玩家坦克集合
 allTanks.addAll(botTanks);// 所有坦克集合添加電腦坦克集合
 base = new Base(367, 532);// 實(shí)例化基地
 initWalls();// 初始化地圖中的墻塊
 }

 /**
 * 組件監(jiān)聽
 */
 private void addListener() {
 frame.addKeyListener(this);// 主窗體載入鍵盤監(jiān)聽,本類已實(shí)現(xiàn)KeyListener接口
 }

 /**
 * 初始化地圖中的墻塊
 */
 private void initWalls() {
 Map map = Map.getMap(level);// 獲取當(dāng)前關(guān)卡的地圖對(duì)象
 walls.addAll(map.getWalls());// 墻塊集合添加當(dāng)前地圖中所有墻塊
 walls.add(base);// 墻塊集合添加基地
 }

 /**
 * 重寫繪制組件方法
 */
 public void paint(Graphics g) {
 paintTankActoin();// 執(zhí)行坦克動(dòng)作
 CreateBot();// 循環(huán)創(chuàng)建電腦坦克
 paintImage();// 繪制主圖片
 g.drawImage(image, 0, 0, this); // 將主圖片繪制到面板上
 }

 /**
 * 繪制主圖片
 */
 private void paintImage() {
 g2.setColor(Color.WHITE);// 使用白色
 g2.fillRect(0, 0, image.getWidth(), image.getHeight());// 填充一個(gè)覆蓋整個(gè)圖片的白色矩形
 panitBoom();// 繪制爆炸效果
 paintBotCount();// 在屏幕頂部繪制剩余坦克數(shù)量
 panitBotTanks();// 繪制電腦坦克
 panitPlayerTanks();// 繪制玩家坦克
 allTanks.addAll(playerTanks);// 坦克集合添加玩家坦克集合
 allTanks.addAll(botTanks);// 坦克集合添加電腦坦克集合
 panitWalls();// 繪制墻塊
 panitBullets();// 繪制子彈

 if (botSurplusCount == 0) {// 如果所有電腦都被消滅
 stopThread();// 結(jié)束游戲幀刷新線程
 paintBotCount();// 在屏幕頂部繪制剩余坦克數(shù)量
 g2.setFont(new Font("楷體", Font.BOLD, 50));// 設(shè)置繪圖字體
 g2.setColor(Color.green);// 使用綠色
 g2.drawString("勝 利 !", 250, 400);// 在指定坐標(biāo)繪制文字
 gotoNextLevel();// 進(jìn)入下一關(guān)卡
 }

 if (gameType == GameType.ONE_PLAYER) {// 如果是單人模式
 if (!play1.isAlive()) {// 如果玩家陣亡
 stopThread();// 結(jié)束游戲幀刷新線程
 boomImage.add(new Boom(play1.x, play1.y));// 添加玩家1爆炸效果
 panitBoom();// 繪制爆炸效果
 paintGameOver();// 在屏幕中央繪制game over
 gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡
 }
 } else {// 如果是雙人模式
 if (play1.isAlive() && !play2.isAlive()) {// 如果玩家1是 幸存者
 survivor = play1;// 幸存者是玩家1
 } else if (!play1.isAlive() && play2.isAlive()) {
 survivor = play2;// 幸存者是玩家2
 } else if (!(play1.isAlive() || play2.isAlive())) {// 如果兩個(gè)玩家全部陣亡
 stopThread();// 結(jié)束游戲幀刷新線程
 boomImage.add(new Boom(survivor.x, survivor.y));// 添加幸存者爆炸效果
 panitBoom();// 繪制爆炸效果
 paintGameOver();// 在屏幕中央繪制game over
 gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡
 }
 }

 if (!base.isAlive()) {// 如果基地被擊中
 stopThread();// 結(jié)束游戲幀刷新線程
 paintGameOver();// 在屏幕中央繪制game over
 base.setImage(ImageUtil.BREAK_BASE_IMAGE_URL);// 基地使用陣亡圖片
 gotoPrevisousLevel();// 重新進(jìn)入本關(guān)卡
 }
 g2.drawImage(base.getImage(), base.x, base.y, this);// 繪制基地
 }

 /**
 * 在屏幕頂部繪制剩余坦克數(shù)量
 */
 private void paintBotCount() {
 g2.setColor(Color.BLUE);// 使用藍(lán)色
 g2.drawString("敵方坦克剩余:" + botSurplusCount, 337, 15);// 在指定坐標(biāo)繪制字符串
 }

 /**
 * 在屏幕中央繪制game over
 */
 private void paintGameOver() {
 g2.setFont(new Font("楷體", Font.BOLD, 50));// 設(shè)置繪圖字體
 g2.setColor(Color.RED);// 設(shè)置繪圖顏色
 g2.drawString("Game Over !", 250, 400);// 在指定坐標(biāo)繪制文字

 }

 /**
 * 繪制爆炸效果
 */
 private void panitBoom() {
 for (int i = 0; i < boomImage.size(); i++) {// 循環(huán)遍歷爆炸效果集合
 Boom boom = boomImage.get(i);// 獲取爆炸對(duì)象
 if (boom.isAlive()) {// 如果爆炸效果有效
 boom.show(g2);// 展示爆炸效果
 } else {// 如果爆炸效果無效
 boomImage.remove(i);// 在集合中刪除此爆炸對(duì)象
 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界
 }
 }
 }

 /**
 * 繪制墻塊
 */
 private void panitWalls() {
 for (int i = 0; i < walls.size(); i++) {// 循環(huán)遍歷墻塊集合
 Wall w = walls.get(i);// 獲取墻塊對(duì)象
 if (w.isAlive()) {// 如果墻塊有效
 g2.drawImage(w.getImage(), w.x, w.y, this);// 繪制墻塊
 } else {// 如果墻塊無效
 walls.remove(i);// 在集合中刪除此墻塊
 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界
 }
 }
 }

 /**
 * 繪制子彈
 */
 private void panitBullets() {
 for (int i = 0; i < bullets.size(); i++) {// 循環(huán)遍歷子彈集合
 Bullet b = bullets.get(i);// 獲取子彈對(duì)象
 if (b.isAlive()) {// 如果子彈有效
 b.move();// 子彈執(zhí)行移動(dòng)操作
 b.hitBase();// 子彈執(zhí)行擊中基地判斷
 b.hitWall();// 子彈執(zhí)行擊中墻壁判斷
 b.hitTank();// 子彈執(zhí)行擊中坦克判斷
 g2.drawImage(b.getImage(), b.x, b.y, this);// 繪制子彈
 } else {// 如果子彈無效
 bullets.remove(i);// 在集合中刪除此子彈
 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界
 }
 }
 }

 /**
 * 繪制電腦坦克
 */
 private void panitBotTanks() {
 for (int i = 0; i < botTanks.size(); i++) {// 循環(huán)遍歷電腦坦克集合
 Bot t = (Bot) botTanks.get(i);// 獲取電腦坦克對(duì)象
 if (t.isAlive()) {// 如果坦克存活
 t.go();// 電腦坦克展開行動(dòng)
 g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克
 } else {// 如果坦克陣亡
 botTanks.remove(i);// 集合中刪除此坦克
 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界
 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創(chuàng)建爆炸效果
 decreaseBot();// 剩余坦克數(shù)量-1
 }
 }
 }

 /**
 * 繪制玩家坦克
 */
 private void panitPlayerTanks() {
 for (int i = 0; i < playerTanks.size(); i++) {// 循環(huán)遍歷玩家坦克
 Tank t = playerTanks.get(i);// 獲取玩家坦克對(duì)象
 if (t.isAlive()) {// 如果坦克存活
 g2.drawImage(t.getImage(), t.x, t.y, this);// 繪制坦克
 } else {// 如果坦克陣亡
 playerTanks.remove(i);// 集合中刪除此坦克
 i--;// 循環(huán)變量-1,保證下次循環(huán)i的值不會(huì)變成i+1,以便有效遍歷集合,且防止下標(biāo)越界
 boomImage.add(new Boom(t.x, t.y));// 在坦克位置創(chuàng)建爆炸效果
 }
 }
 }

 /**
 * 結(jié)束游戲幀刷新
 */
 private synchronized void stopThread() {
 frame.removeKeyListener(this);// 主窗體刪除本類鍵盤事件監(jiān)聽對(duì)象
 finish = true;// 游戲停止標(biāo)志為true
 }

 /**
 * 游戲幀刷新線程
 */
 private class FreshThead extends Thread {
 public void run() {// 線程主方法
 while (!finish) {// 如果游戲未停止
 repaint();// 執(zhí)行本類重繪方法
 try {
  Thread.sleep(FRESH);// 指定時(shí)間后重新繪制界面
 } catch (InterruptedException e) {
  e.printStackTrace();
 }
 }
 }
 }

 /**
 * 添加電腦坦克,如果場(chǎng)上坦克未到達(dá)最大值,每4秒鐘之后在三個(gè)出生位置隨機(jī)選擇其一,創(chuàng)建電腦坦克。
 */
 private void CreateBot() {
 createBotTimer += FRESH;// 計(jì)時(shí)器按照刷新時(shí)間遞增
 // “當(dāng)場(chǎng)上電腦小于場(chǎng)上最大數(shù)時(shí)” 并且 “準(zhǔn)備上場(chǎng)的坦克數(shù)量大于0” 并且 “計(jì)時(shí)器記錄已過去4秒鐘”
 if (botTanks.size() < botMaxInMap && botReadyCount > 0 && createBotTimer >= 4000) {
 int index = r.nextInt(3);// 隨機(jī)獲取0或1或2其中一個(gè)值
 Rectangle bornRect = new Rectangle(botX[index], 1, 35, 35);// 創(chuàng)建坦克隨機(jī)出生區(qū)域
 for (int i = 0, lengh = allTanks.size(); i < lengh; i++) {// 循環(huán)遍歷所有坦克集合
 Tank t = allTanks.get(i);// 獲取坦克對(duì)象
 if (t.isAlive() && t.hit(bornRect)) {// 如果場(chǎng)上存在與隨機(jī)位置重合并存活的坦克
  return;// 結(jié)束方法
 }
 }
 botTanks.add(new Bot(botX[index], 1, GamePanel.this, TankType.bot));// 在隨機(jī)位置創(chuàng)造電腦坦克
 botReadyCount--;// 準(zhǔn)備上場(chǎng)電腦數(shù)量-1
 createBotTimer = 0;// 產(chǎn)生電腦計(jì)時(shí)器重新計(jì)時(shí)
 }
 }

 /**
 * 進(jìn)入下一關(guān)卡
 */
 private void gotoNextLevel() {
 Thread jump = new JumpPageThead(Level.nextLevel());// 創(chuàng)建跳轉(zhuǎn)到下一關(guān)卡的線程
 jump.start();// 啟動(dòng)線程
 }

 /**
 * 重新進(jìn)入本關(guān)卡
 */
 private void gotoPrevisousLevel() {
 Thread jump = new JumpPageThead(Level.previsousLevel());// 創(chuàng)建重新進(jìn)入本關(guān)卡的線程
 jump.start();// 啟動(dòng)線程
 }

 /**
 * 剩余坦克數(shù)量減少1
 */
 public void decreaseBot() {
 botSurplusCount--;// 電腦剩余數(shù)量-1
 }

 /**
 * 按鍵按下時(shí)
 */
 @Override
 public void keyPressed(KeyEvent e) {
 switch (e.getKeyCode()) {// 判斷按下的按鍵值
 case KeyEvent.VK_Y:// 如果按下的是“Y”
 y_key = true;// “Y”按下標(biāo)志為true
 break;
 case KeyEvent.VK_W:// 如果按下的是“W”
 w_key = true;// “W”按下標(biāo)志為true
 a_key = false;// “A”按下標(biāo)志為false
 s_key = false;// “S”按下標(biāo)志為false
 d_key = false;// “D”按下標(biāo)志為false
 break;
 case KeyEvent.VK_A:// 如果按下的是“A”
 w_key = false;// “W”按下標(biāo)志為false
 a_key = true;// “A”按下標(biāo)志為true
 s_key = false;// “S”按下標(biāo)志為false
 d_key = false;// “D”按下標(biāo)志為false
 break;
 case KeyEvent.VK_S:// 如果按下的是“S”
 w_key = false;// “W”按下標(biāo)志為false
 a_key = false;// “A”按下標(biāo)志為false
 s_key = true;// “S”按下標(biāo)志為true
 d_key = false;// “D”按下標(biāo)志為false
 break;
 case KeyEvent.VK_D:// 如果按下的是“D”
 w_key = false;// “W”按下標(biāo)志為false
 a_key = false;// “A”按下標(biāo)志為false
 s_key = false;// “S”按下標(biāo)志為false
 d_key = true;// “D”按下標(biāo)志為true
 break;
 case KeyEvent.VK_HOME:// 如果按下的是“HOME”,效果同下
 case KeyEvent.VK_NUMPAD1:// 如果按下的是小鍵盤數(shù)字1
 num1_key = true;// 小鍵盤數(shù)字1按下標(biāo)志為true
 break;
 case KeyEvent.VK_UP:// 如果按下的是“↑”
 up_key = true;// “↑”按下標(biāo)志為true
 down_key = false;// “↓”按下標(biāo)志為false
 right_key = false;// “→”按下標(biāo)志為false
 left_key = false;// “←”按下標(biāo)志為false
 break;
 case KeyEvent.VK_DOWN:// 如果按下的是“↓”
 up_key = false;// “↑”按下標(biāo)志為false
 down_key = true;// “↓”按下標(biāo)志為true
 right_key = false;// “→”按下標(biāo)志為false
 left_key = false;// “←”按下標(biāo)志為false
 break;
 case KeyEvent.VK_LEFT:// 如果按下的是“←”
 up_key = false;// “↑”按下標(biāo)志為false
 down_key = false;// “↓”按下標(biāo)志為false
 right_key = false;// “→”按下標(biāo)志為false
 left_key = true;// “←”按下標(biāo)志為true
 break;
 case KeyEvent.VK_RIGHT:// 如果按下的是“→”
 up_key = false;// “↑”按下標(biāo)志為false
 down_key = false;// “↓”按下標(biāo)志為false
 right_key = true;// “→”按下標(biāo)志為true
 left_key = false;// “←”按下標(biāo)志為false
 break;
 }
 }

 /**
 * 根據(jù)按鍵按下狀態(tài),讓坦克執(zhí)行相應(yīng)動(dòng)作
 */
 private void paintTankActoin() {
 if (y_key) {// 如果“Y”鍵是按下狀態(tài)
 play1.attack();// 玩家1坦克攻擊
 }
 if (w_key) {// 如果“W”鍵是按下狀態(tài)
 play1.upward();// 玩家1坦克向上移動(dòng)
 }
 if (d_key) {// 如果“D”鍵是按下狀態(tài)
 play1.rightward();// 玩家1坦克向右移動(dòng)
 }
 if (a_key) {// 如果“A”鍵是按下狀態(tài)
 play1.leftward();// 玩家1坦克左移動(dòng)
 }
 if (s_key) {// 如果“S”鍵是按下狀態(tài)
 play1.downward();// 玩家1坦克向下移動(dòng)
 }
 if (gameType == GameType.TWO_PLAYER) {
 if (num1_key) {// 如果“M”鍵是按下狀態(tài)
 play2.attack();// 玩家2坦克攻擊
 }
 if (up_key) {// 如果“←”鍵是按下狀態(tài)
 play2.upward();// 玩家2坦克向上移動(dòng)
 }
 if (right_key) {// 如果“→”鍵是按下狀態(tài)
 play2.rightward();// 玩家2坦克向右移動(dòng)
 }
 if (left_key) {// 如果“↑”鍵是按下狀態(tài)
 play2.leftward();// 玩家2坦克左移動(dòng)
 }
 if (down_key) {// 如果“↓”鍵是按下狀態(tài)
 play2.downward();// 玩家2坦克后移動(dòng)
 }
 }
 }

 /**
 * 按鍵抬起時(shí)
 */
 @Override
 public void keyReleased(KeyEvent e) {
 switch (e.getKeyCode()) {
 case KeyEvent.VK_Y:// 如果抬起的是“Y”
 y_key = false;// “Y”按下標(biāo)志為false
 break;
 case KeyEvent.VK_W:// 如果抬起的是“W”
 w_key = false;// “W”按下標(biāo)志為false
 break;
 case KeyEvent.VK_A:// 如果抬起的是“A”
 a_key = false;// “A”按下標(biāo)志為false
 break;
 case KeyEvent.VK_S:// 如果抬起的是“S”
 s_key = false;// “S”按下標(biāo)志為false
 break;
 case KeyEvent.VK_D:// 如果抬起的是“D”
 d_key = false;// “D”按下標(biāo)志為false
 break;
 case KeyEvent.VK_HOME:// 如果抬起的是“HOME”,效果同下
 case KeyEvent.VK_NUMPAD1:// 如果抬起的是小鍵盤1
 num1_key = false;// 小鍵盤1按下標(biāo)志為false
 break;
 case KeyEvent.VK_UP:// 如果抬起的是“↑”
 up_key = false;// “↑”按下標(biāo)志為false
 break;
 case KeyEvent.VK_DOWN:// 如果抬起的是“↓”
 down_key = false;// “↓”按下標(biāo)志為false
 break;
 case KeyEvent.VK_LEFT:// 如果抬起的是“←”
 left_key = false;// “←”按下標(biāo)志為false
 break;
 case KeyEvent.VK_RIGHT:// 如果抬起的是“→”
 right_key = false;// “→”按下標(biāo)志為false
 break;
 }
 }

 /**
 * 向子彈集合中添加子彈
 * 
 * @param b
 *   - 添加的子彈
 */
 public void addBullet(Bullet b) {
 bullets.add(b);// 子彈集合中添加子彈
 }

 /**
 * 獲取所有墻塊集合
 * 
 * @return 所有墻塊
 */
 public List<Wall> getWalls() {
 return walls;
 }

 /**
 * 獲取基地對(duì)象
 * 
 * @return 基地
 */
 public Base getBase() {
 return base;
 }

 /**
 * 獲取所有坦克集合
 * 
 * @return 所有坦克
 */
 public List<Tank> getTanks() {
 return allTanks;
 }

 /**
 * 游戲結(jié)束跳轉(zhuǎn)線程
 */
 private class JumpPageThead extends Thread {
 int level;// 跳轉(zhuǎn)的關(guān)卡

 /**
 * 跳轉(zhuǎn)線程構(gòu)造方法
 * 
 * @param level
 *   - 跳轉(zhuǎn)的關(guān)卡
 */
 public JumpPageThead(int level) {
 this.level = level;
 }

 /**
 * 線程主方法
 */
 public void run() {
 try {
 Thread.sleep(1000);// 1秒鐘后
 frame.setPanel(new LevelPanel(level, frame, gameType));// 主窗體跳轉(zhuǎn)到指定關(guān)卡
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
 }

 /**
 * 鍵入某按鍵事件
 */
 public void keyTyped(KeyEvent e) {
 // 不實(shí)現(xiàn)此方法,但不可刪除
 }
}

圖片

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中自動(dòng)生成構(gòu)造方法詳解

    Java中自動(dòng)生成構(gòu)造方法詳解

    這篇文章主要介紹了Java中自動(dòng)生成構(gòu)造方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 你要知道IDEA的這些必備插件

    你要知道IDEA的這些必備插件

    這篇文章主要介紹了你要知道IDEA的這些必備插件,文中有非常詳細(xì)的圖文示例及代碼,對(duì)正在使用IDEA的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • 解決SpringBoot使用yaml作為配置文件遇到的坑

    解決SpringBoot使用yaml作為配置文件遇到的坑

    這篇文章主要介紹了解決SpringBoot使用yaml作為配置文件遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 關(guān)于BigDecimal類型數(shù)據(jù)的絕對(duì)值和相除求百分比

    關(guān)于BigDecimal類型數(shù)據(jù)的絕對(duì)值和相除求百分比

    這篇文章主要介紹了關(guān)于BigDecimal類型數(shù)據(jù)的絕對(duì)值和相除求百分比,Java在java.math包中提供的API類BigDecimal,用來對(duì)超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算,需要的朋友可以參考下
    2023-07-07
  • 淺談Java文件執(zhí)行順序、main程序入口的理解

    淺談Java文件執(zhí)行順序、main程序入口的理解

    這篇文章主要介紹了Java文件執(zhí)行順序、main程序入口的理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java實(shí)現(xiàn)學(xué)籍管理系統(tǒng)

    java實(shí)現(xiàn)學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)籍管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Spring Boot集成教程之異步調(diào)用Async

    Spring Boot集成教程之異步調(diào)用Async

    在項(xiàng)目中,當(dāng)訪問其他人的接口較慢或者做耗時(shí)任務(wù)時(shí),不想程序一直卡在耗時(shí)任務(wù)上,想程序能夠并行執(zhí)行,我們可以使用多線程來并行的處理任務(wù),也可以使用spring提供的異步處理方式@Async。需要的朋友們下面來一起看看吧。
    2018-03-03
  • Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度示例

    Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的計(jì)算稀疏矩陣余弦相似度功能,涉及java基于HashMap的數(shù)值計(jì)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • java不通過配置文件初始化logger示例

    java不通過配置文件初始化logger示例

    這篇文章主要介紹了java不通過配置文件初始化logger示例,需要的朋友可以參考下
    2014-05-05
  • 一篇文章帶你學(xué)習(xí)JAVA MyBatis底層原理

    一篇文章帶你學(xué)習(xí)JAVA MyBatis底層原理

    近來想寫一個(gè)mybatis的分頁插件,但是在寫插件之前肯定要了解一下mybatis具體的工作原理吧,本文就詳細(xì)總結(jié)了MyBatis工作原理,,需要的朋友可以參考下
    2021-09-09

最新評(píng)論