如何在java swing上为游戏添加计时器

如何在java swing上为游戏添加计时器,java,swing,Java,Swing,我做了一个在键盘上移动玩家并通过随机吃硬币来增加分数的游戏。 触摸TNT时,HP降低;触摸咖啡时,HP升高。使用图形g在屏幕上打印。 现在我要添加一个计时器。我想做一个游戏,让玩家在规定的时间内取得高分。 有很多事情我还不知道。请给我一些建议 这是我的密码。谢谢你的阅读 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.even

我做了一个在键盘上移动玩家并通过随机吃硬币来增加分数的游戏。 触摸TNT时,HP降低;触摸咖啡时,HP升高。使用图形g在屏幕上打印。 现在我要添加一个计时器。我想做一个游戏,让玩家在规定的时间内取得高分。 有很多事情我还不知道。请给我一些建议 这是我的密码。谢谢你的阅读

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.ImageIcon;
import javax.swing.JFrame;


public class CoinEat1 extends JFrame {
   private Image bufferImage;
   private Graphics screenGraphic; 

   private Clip clip;

   private Image backgroundImage = new ImageIcon("src/images/배경.jpg").getImage();
   private Image player = new ImageIcon("src/images/1P.png").getImage();
   private Image coin = new ImageIcon("src/images/코인.png").getImage();
   private Image TNT = new ImageIcon("src/images/폭탄.png").getImage();
   private Image Coffee = new ImageIcon("src/images/커피.png").getImage();

   private int playerX,playerY;
   private int playerWidth = player.getWidth(null); 
   private int playerHeight = player.getHeight(null); 

   private int coinX,coinY;
   private int coinWidth = coin.getWidth(null);
   private int coinHeight = coin.getHeight(null);

   private int TNTX,TNTY;
   private int TNTWidth = TNT.getWidth(null);
   private int TNTHeight = TNT.getHeight(null);

   private int CoffeeX,CoffeeY;
   private int CoffeeWidth = Coffee.getWidth(null);
   private int CoffeeHeight = Coffee.getHeight(null);

   private int score;

   private int HP;

   private boolean playerup, down, left, right; 

   public CoinEat1() {
      setTitle("동전JAVA");
      setVisible(true);
  setSize(Main.SCREEN_WIDTH,Main.SCREEN_HEIGHT);
  setLocationRelativeTo(null);
  setResizable(false);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
  addKeyListener(new KeyAdapter(){
     public void keyPressed(KeyEvent e) { 
        switch(e.getKeyCode()) {
        case KeyEvent.VK_UP:
           playerup=true;
           break;
        case KeyEvent.VK_DOWN:
           down=true;
           break;
        case KeyEvent.VK_LEFT:
           left=true;
           break;
        case KeyEvent.VK_RIGHT:
           right=true;
           break;   
        }
     }
     
     public void keyReleased(KeyEvent e) { 
        switch(e.getKeyCode()) {
        case KeyEvent.VK_UP:
           playerup=false;
           break;
        case KeyEvent.VK_DOWN:
           down=false;
           break;
        case KeyEvent.VK_LEFT:
           left=false;
           break;
        case KeyEvent.VK_RIGHT:
           right=false;
           break;   
        }
     }      
  });

  
  Init();
  
  while(true){
     try {
        Thread.sleep(20);
     } catch(InterruptedException e) {
        e.printStackTrace();
     }
     keyProcess();
     CoinCrashCheck();
     TNTCrashCheck();
     CoffeeCrashCheck();
  }
   }


   public void Init() {
      score = 0;
  
  HP = 100;
  
  playerX = (Main.SCREEN_WIDTH-playerWidth)/2; 
  playerY = (Main.SCREEN_HEIGHT-playerHeight)/2;
  
  coinX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
  coinY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerHeight-30))+30;
  
  TNTX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth)); 
  TNTY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerHeight-30))+30;
    
  CoffeeX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth)); 
  CoffeeY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerWidth))+30;
  
      playsound("src/music/BGM.wav",true);
   }

   public void keyProcess() {
      if (playerup && playerY - 3 > 30) playerY-=3;
      if (down && playerY + playerHeight + 3 < Main.SCREEN_HEIGHT) playerY+=3;
      if (left && playerX -3 > 0) playerX-=3;
      if (right && playerX + playerWidth + 3 < Main.SCREEN_WIDTH) playerX+=3;
   }

   public void CoinCrashCheck(){
      if (playerX+playerWidth > coinX && coinX+coinWidth > playerX && playerY+playerHeight > coinY && coinY+coinHeight > playerY){ 
         score += 100;
         playsound("src/music/coin.wav",false);
         coinX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
         coinY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerHeight-30))+30; 
      }
   }

   public void TNTCrashCheck() { 
        if (playerX+playerWidth > TNTX && TNTX+TNTWidth > playerX && playerY+playerHeight > TNTY && TNTY+TNTHeight > playerY){ 
        HP -= 25;
        TNTX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
        TNTY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerHeight-30))+30; 
        }
    }

   public void CoffeeCrashCheck() { 
        if (playerX+playerWidth > CoffeeX && CoffeeX+CoffeeWidth > playerX && playerY+playerHeight > CoffeeY && CoffeeY+CoffeeHeight > playerY){ 
            HP += 25; 
            CoffeeX = (int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
            CoffeeY = (int)(Math.random()*(Main.SCREEN_HEIGHT+1-playerHeight-30))+30; 
            }
    }

   public void playsound(String pathName, boolean isLoop) {
        try {
            clip = AudioSystem.getClip();
            File audioFile = new File(pathName);
            AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);
            clip.open(audioStream);
            clip.start();
            if(isLoop) 
                clip.loop(Clip.LOOP_CONTINUOUSLY);
        }catch (LineUnavailableException e) {
            e.printStackTrace();
        }
        catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

   public void paint(Graphics g) {
      bufferImage = createImage(Main.SCREEN_WIDTH,Main.SCREEN_HEIGHT); 
      screenGraphic = bufferImage.getGraphics();  
      screenDraw(screenGraphic);
      g.drawImage(bufferImage,0,0,null); 
   }

   public void screenDraw(Graphics g){//이미지를 출력해줄 paint 메소드
      g.drawImage(backgroundImage,0,0,null);
      g.drawImage(player,playerX,playerY,null);
      g.drawImage(coin,coinX,coinY,null);
      g.drawImage(TNT,TNTX,TNTY,null);
      g.drawImage(Coffee,CoffeeX,CoffeeY,null);
  
      g.setColor(Color.white);
      g.setFont(new Font("Arial",Font.BOLD,35));
      g.drawString("SCORE : "+score, 30, 80);
      g.drawString("HP : " + HP, 30, 120);
  
      this.repaint(); 
   }

   public static void main(String[] args) {
      new CoinEat1();
  
   }

}
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.event.KeyAdapter;
导入java.awt.event.KeyEvent;
导入java.io.File;
导入java.io.IOException;
导入javax.sound.sampled.AudioInputStream;
导入javax.sound.sampled.AudioSystem;
导入javax.sound.sampled.Clip;
导入javax.sound.sampled.LineUnavailableException;
导入javax.sound.sampled.unsupportDaudioFileException;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
公共类CoinEat1扩展了JFrame{
私有图像缓冲图像;
私有图形屏幕图形;
私人剪辑;
私有图像背景图像=新图像图标(“src/images/배경.jpg”).getImage();
private Image player=new-ImageIcon(“src/images/1P.png”).getImage();
私有图像币=新图像图标(“src/images/코인.png”).getImage();
私有图像TNT=新图像图标(“src/images/폭탄.png”).getImage();
私人图像咖啡=新图像图标(“src/images/커피.png”).getImage();
私人int playerX,playerY;
private int playerWidth=player.getWidth(null);
private int playerHeight=player.getHeight(null);
私人int coinX,coinY;
private int coinWidth=coin.getWidth(null);
private int coinHeight=coin.getHeight(null);
私人int TNTX,TNTY;
private int TNTWidth=TNT.getWidth(null);
private int-TNTHeight=TNT.getHeight(null);
私人int咖啡,咖啡;
private int CoffeeWidth=Coffee.getWidth(null);
private int CoffeeHeight=Coffee.getHeight(null);
个人智力得分;
私人int HP;
私有布尔playerup、down、left、right;
公共货币1(){
标题(“동전爪哇);
setVisible(真);
设置尺寸(主屏幕宽度、主屏幕高度);
setLocationRelativeTo(空);
可设置大小(假);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(新的KeyAdapter(){
按下公共无效键(键事件e){
开关(如getKeyCode()){
case KeyEvent.VK_UP:
playerup=true;
打破
case KeyEvent.VK_向下:
向下=真;
打破
case KeyEvent.VK_左:
左=真;
打破
case KeyEvent.VK_RIGHT:
右=真;
打破
}
}
公开无效密钥已释放(密钥事件e){
开关(如getKeyCode()){
case KeyEvent.VK_UP:
playerup=false;
打破
case KeyEvent.VK_向下:
向下=假;
打破
case KeyEvent.VK_左:
左=假;
打破
case KeyEvent.VK_RIGHT:
右=假;
打破
}
}      
});
Init();
while(true){
试一试{
睡眠(20);
}捕捉(中断异常e){
e、 printStackTrace();
}
keyProcess();
CoinCrashCheck();
TNTCrashCheck();
咖啡豆;
}
}
公共void Init(){
得分=0;
HP=100;
playerX=(Main.SCREEN\u WIDTH-playerWidth)/2;
playerY=(主屏幕高度和演奏者高度)/2;
coinX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
coinY=(int)(Math.random()*(主屏幕高度+1-playerHeight-30))+30;
TNTX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
TNTY=(int)(Math.random()*(主屏幕高度+1-playerHeight-30))+30;
CoffeeX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
CoffeeY=(int)(Math.random()*(Main.SCREEN_高度+1-playerWidth))+30;
播放声音(“src/music/BGM.wav”,真);
}
public-void-keyProcess(){
如果(playerup&playerY-3>30)playerY-=3;
如果(向下和向下播放+播放音量+3<主屏幕高度)播放音量+=3;
如果(左&&playerX-3>0)playerX-=3;
如果(右&playerX+playerWidth+3coinX&&coinX+coinWidth>playerX&&playerry+playerHeight>coinY&&coinY+coinHeight>playerry){
分数+=100分;
播放声音(“src/music/coin.wav”,假);
coinX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
coinY=(int)(Math.random()*(主屏幕高度+1-playerHeight-30))+30;
}
}
public void TNTCrashCheck(){
如果(playerX+playerWidth>TNTX&TNTX+TNTWidth>playerX&playerY+playerHeight>TNTY&TNTY+TNTHeight>playerY){
HP-=25;
TNTX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
TNTY=(int)(Math.random()*(主屏幕高度+1-playerHeight-30))+30;
}
}
public void CoffeeCrashCheck(){
如果(playerX+playerWidth>CoffeeX&&CoffeeX+CoffeeWidth>playerX&&playerY+playerHeight>CoffeeY&&CoffeeY+CoffeeHeight>playerY){
HP+=25;
CoffeeX=(int)(Math.random()*(Main.SCREEN_WIDTH+1-playerWidth));
咖啡=(int)(Math.random()*(主屏幕高度+1-playerHeight-30))+30;
}
}
公共void播放声音(字符串路径名,布尔isLoop){
试一试{
clip=AudioSystem.getClip();
File audioFile=新文件(路径名);
AudioInputStream audioStream=AudioSystem.getAudioInputStream(音频文件);
clip.open(音频流);
clip.start();
if(isLoop)
卡环(连续卡环);
}捕获(LineUnavailableException e){
e、 printStackTrace();
}
捕获(不支持的数据文件异常e)
// Timer Stuff
private Timer mGameTimer;
private int mTimeLeft = 20;
private final int mDelay = 1000; // Start after 1 second
private final int mPeriod = 1000; // Ticks every 1 second
   private void SetupTimer() {
        mGameTimer = new Timer();
        mGameTimer.scheduleAtFixedRate(new TimerTask() {

            public void run() {

                if (mTimeLeft == 1) {
                    mTimeLeft--;
                    mGameTimer.cancel();
                    // Handle your game over thing
                } else {
                    mTimeLeft--;
                }
            }
        }, mDelay, mPeriod);
    }
public CoinEat1() {
        ...     
        SetupTimer();
        ...
}
public void screenDraw(Graphics g) {
    g.drawImage(backgroundImage, 0, 0, null);
    g.drawImage(player, playerX, playerY, null);
    g.drawImage(coin, coinX, coinY, null);
    g.drawImage(TNT, TNTX, TNTY, null);
    g.drawImage(Coffee, CoffeeX, CoffeeY, null);

    g.setColor(Color.white);
    g.setFont(new Font("Arial", Font.BOLD, 35));
    g.drawString("SCORE : " + score, 30, 80);
    g.drawString("HP : " + HP, 30, 120);
    g.drawString("Time Left : " + mTimeLeft, 30, 160); //Redraws your time

    this.repaint();
}