import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class TurtleRabbitRace1 {
public static class TurtleRabbitRace extends JFrame {
private JLabel turtleLabel, rabbitLabel, startLabel, finishLabel;
private JButton startButton;
private JPanel mainPanel;
public TurtleRabbitRace() throws IOException {
setTitle("Turtle vs Rabbit Race");
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainPanel = new JPanel();
mainPanel.setLayout(null);
File file = new File("D:\\JAVA\\project\\gtp2\\picture\\gui.png");
turtleLabel = new JLabel(new ImageIcon(ImageIO.read(file)));
turtleLabel.setBounds(10, 100, 60, 60);
mainPanel.add(turtleLabel);
File file1 = new File("D:\\JAVA\\project\\gtp2\\picture\\tu.png");
rabbitLabel = new JLabel(new ImageIcon(ImageIO.read(file1)));
rabbitLabel.setBounds(10, 200, 60, 60);
mainPanel.add(rabbitLabel);
startLabel = new JLabel("点击开始按钮开始比赛!");
startLabel.setFont(new Font("Serif", Font.BOLD, 20));
startLabel.setBounds(150, 50, 400, 30);
mainPanel.add(startLabel);
File file2 = new File("D:\\JAVA\\project\\gtp2\\picture\\fi.png");
finishLabel = new JLabel(new ImageIcon(ImageIO.read(file2)));
finishLabel.setBounds(520, 100, 60, 180);
mainPanel.add(finishLabel);
startButton = new JButton("开始");
startButton.setBounds(250, 300, 100, 40);
startButton.addActionListener(e -> {
startRace();
});
mainPanel.add(startButton);
add(mainPanel);
setVisible(true);
}
private volatile boolean raceOver = false;
private void startRace() {
startButton.setEnabled(false);
Thread turtleThread = new Thread(() -> {
int distance = 10;
while (turtleLabel.getX() + turtleLabel.getWidth() < finishLabel.getX()) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
return; // 如果线程被中断,则直接结束线程
}
turtleLabel.setLocation(turtleLabel.getX() + distance, turtleLabel.getY());
}
});
Thread rabbitThread = new Thread(() -> {
int distance = 10;
while (rabbitLabel.getX() + rabbitLabel.getWidth() < finishLabel.getX()) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
return; // 如果线程被中断,则直接结束线程
}
rabbitLabel.setLocation(rabbitLabel.getX() + distance, rabbitLabel.getY());
}
});
turtleThread.start();
rabbitThread.start();
new Thread(() -> {
try {
rabbitThread.join();
turtleThread.interrupt(); // 中断乌龟线程
turtleThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (turtleLabel.getX() + turtleLabel.getWidth() > rabbitLabel.getX() + rabbitLabel.getWidth()) {
JOptionPane.showMessageDialog(this, "乌龟赢了");
} else if (turtleLabel.getX() + turtleLabel.getWidth() < rabbitLabel.getX() + rabbitLabel.getWidth()) {
JOptionPane.showMessageDialog(this, "兔子赢了");
} else {
JOptionPane.showMessageDialog(this, "平局");
}
startButton.setEnabled(true);
}).start();
//妈的不知道你为什么会存在,但没你真不行
new Thread(() -> {
try {
turtleThread.join();
rabbitThread.interrupt(); // 中断兔子线程
rabbitThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (turtleLabel.getX() + turtleLabel.getWidth() > rabbitLabel.getX() + rabbitLabel.getWidth()) {
JOptionPane.showMessageDialog(this, "乌龟赢了");
} else if (turtleLabel.getX() + turtleLabel.getWidth() < rabbitLabel.getX() + rabbitLabel.getWidth()) {
JOptionPane.showMessageDialog(this, "兔子赢了");
} else {
JOptionPane.showMessageDialog(this, "平局");
}
startButton.setEnabled(true);
}).start();
}
public static void main(String[] args) throws IOException {
new TurtleRabbitRace();
}
}
}
自用dddd
于 2023-04-18 12:56:40 首次发布