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