Java 使用随机数移动JPanel图像
我正在为我的班级制作一个赛车游戏,我只用java编程了几个星期,所以我想知道如何使用一个随机数让我的赛车以不同的速度行驶Java 使用随机数移动JPanel图像,java,Java,我正在为我的班级制作一个赛车游戏,我只用java编程了几个星期,所以我想知道如何使用一个随机数让我的赛车以不同的速度行驶 package racing.game; import java.awt.Color; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class RacingGame { pub
package racing.game;
import java.awt.Color;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class RacingGame {
public static void main(String[] args) {
int temp ;
int dist1 = 0;
int dist2 = 0;
int dist3 = 0;
int dist4 = 0;
int i = 0;
JFrame freRace = new JFrame();
freRace.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
freRace.setSize(1900, 1080);
freRace.setLayout(null);
//Creating the vehicles
JLabel labelCar1 = new JLabel();
labelCar1.setIcon(new ImageIcon("images/car1.jpg"));
labelCar1.setBounds((0), (50), labelCar1.getPreferredSize().width, labelCar1.getPreferredSize().height);
freRace.add(labelCar1);
JLabel labelCar2 = new JLabel();
labelCar2.setIcon(new ImageIcon("images/car2.jpg"));
labelCar2.setBounds((0), (310), labelCar2.getPreferredSize().width, labelCar2.getPreferredSize().height);
freRace.add(labelCar2);
JLabel labelCar3 = new JLabel();
labelCar3.setIcon(new ImageIcon("images/car3.jpg"));
labelCar3.setBounds((0), (580), labelCar3.getPreferredSize().width, labelCar3.getPreferredSize().height);
freRace.add(labelCar3);
JLabel labelCar4 = new JLabel();
labelCar4.setIcon(new ImageIcon("images/car4.jpg"));
labelCar4.setBounds((0), (900), labelCar4.getPreferredSize().width, labelCar4.getPreferredSize().height);
freRace.add(labelCar4);
JLabel labelBackground = new JLabel();
labelBackground.setIcon(new ImageIcon("images/race track.jpg"));
labelBackground.setBounds((0), (0), labelBackground.getPreferredSize().width, labelBackground.getPreferredSize().height);
freRace.add(labelBackground);
freRace.setBackground(Color.WHITE);
// freRace.setVisible(true);
while (dist1 <= 1890) {
Random rn = new Random();
dist1 = dist1 + rn.nextInt(5);
dist2 = dist2 + rn.nextInt(4);
dist3 = dist3 + rn.nextInt(3);
dist4 = dist4 + rn.nextInt(2);
labelCar1.setBounds((dist1), (50), labelCar1.getPreferredSize().width, labelCar1.getPreferredSize().height);
labelCar2.setBounds((dist2), (310), labelCar2.getPreferredSize().width, labelCar2.getPreferredSize().height);
labelCar3.setBounds((dist3), (580), labelCar3.getPreferredSize().width, labelCar3.getPreferredSize().height);
labelCar4.setBounds((dist4), (900), labelCar4.getPreferredSize().width, labelCar4.getPreferredSize().height);
freRace.setVisible(true);
}
}
}
package racing.game;
导入java.awt.Color;
导入java.util.Random;
导入javax.swing.ImageIcon;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
公开课比赛{
公共静态void main(字符串[]args){
内部温度;
int dist1=0;
int dist2=0;
int dist3=0;
int dist4=0;
int i=0;
JFrame freRace=新的JFrame();
freRace.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
freRace.setSize(19001080);
freRace.setLayout(空);
//创建车辆
JLabel labelCar1=新的JLabel();
labelCar1.setIcon(新的ImageIcon(“images/car1.jpg”);
labelCar1.setBounds((0)、(50),labelCar1.getPreferredSize().width,labelCar1.getPreferredSize().height);
freRace.add(labelCar1);
JLabel labelCar2=新的JLabel();
labelCar2.setIcon(新图像图标(“images/car2.jpg”);
labelCar2.setBounds((0)、(310),labelCar2.getPreferredSize().width,labelCar2.getPreferredSize().height);
freRace.add(labelCar2);
JLabel labelCar3=新的JLabel();
labelCar3.setIcon(新图像图标(“images/car3.jpg”);
labelCar3.setBounds((0)、(580),labelCar3.getPreferredSize().width,labelCar3.getPreferredSize().height);
freRace.add(labelCar3);
JLabel labelCar4=新的JLabel();
labelCar4.setIcon(新图像图标(“images/car4.jpg”);
labelCar4.setBounds((0)、(900),labelCar4.getPreferredSize().width,labelCar4.getPreferredSize().height);
freRace.add(labelCar4);
JLabel labelBackground=新的JLabel();
labelBackground.setIcon(新图像图标(“images/race track.jpg”);
labelBackground.setBounds((0)、(0),labelBackground.getPreferredSize().width,labelBackground.getPreferredSize().height);
freRace.add(labelBackground);
背景色(颜色:白色);
//freRace.setVisible(true);
while(dist1
我想知道我怎么能用一个随机数让我的车以不同的速度行驶
您需要为每辆车创建一个speed
属性。而不是为每辆车创建一个速度值列表。如果该属性自包含在Car对象本身中,则会更容易:
class Car{
private double speed;
}
要移动汽车,可以添加移动方法:
class Car{
private int x;
private int y;
//private JLabel image; //Better to use BufferedImage
private double speed;
//constructor not shown
public void moveForward(){
x += speed;
}
public void moveBackward(){
x -= speed;
}
}
然后您可以拥有一个数组或一个汽车列表:
ArrayList<Car> cars = new ArrayList<Car>();
要移动所有车辆:
//Example
for(Car c : cars)
c.moveForward();
如果您有时间,实际上值得探索如何在不使用JLabels
的情况下实现这一点,而是使用自定义图形来实现它。如果您在main方法中循环,您将只看到移动的最后结果,您可以这样做:
freRace.setVisible(true);
new Thread(new Runnable() {
public void run() {
Random rn = new Random();
int s1 = rn.nextInt(5);
int s2 = rn.nextInt(5);
int s3 = rn.nextInt(5);
int s4 = rn.nextInt(5);
while (dist1 <= 1890) {
dist1 = dist1 + s1;
dist2 = dist2 + s2;
dist3 = dist3 + s3;
dist4 = dist4 + s4;
labelCar1.setBounds((dist1), (50), labelCar1.getPreferredSize().width, labelCar1.getPreferredSize().height);
labelCar2.setBounds((dist2), (310), labelCar2.getPreferredSize().width, labelCar2.getPreferredSize().height);
labelCar3.setBounds((dist3), (580), labelCar3.getPreferredSize().width, labelCar3.getPreferredSize().height);
labelCar4.setBounds((dist4), (900), labelCar4.getPreferredSize().width, labelCar4.getPreferredSize().height);
freRace.invalidate();
try { Thread.sleep(100); } catch (Exception e) {}
}
}
}).start();
freRace.setVisible(true);
新线程(newrunnable()){
公开募捐{
Random rn=新的Random();
int s1=rn.nextInt(5);
int s2=rn.nextInt(5);
int s3=rn.nextInt(5);
int s4=rn.nextInt(5);
while(dist1 GetfreRace.setVisible(true)
在您的时间之外,使用线程进行循环,随机更改位置不是一种速度,要实现速度,您需要先修复它,如x
,然后尝试每秒相应地刷新帧。JLabel不是制作带有动画的游戏的好选项。自定义绘画将更容易。
freRace.setVisible(true);
new Thread(new Runnable() {
public void run() {
Random rn = new Random();
int s1 = rn.nextInt(5);
int s2 = rn.nextInt(5);
int s3 = rn.nextInt(5);
int s4 = rn.nextInt(5);
while (dist1 <= 1890) {
dist1 = dist1 + s1;
dist2 = dist2 + s2;
dist3 = dist3 + s3;
dist4 = dist4 + s4;
labelCar1.setBounds((dist1), (50), labelCar1.getPreferredSize().width, labelCar1.getPreferredSize().height);
labelCar2.setBounds((dist2), (310), labelCar2.getPreferredSize().width, labelCar2.getPreferredSize().height);
labelCar3.setBounds((dist3), (580), labelCar3.getPreferredSize().width, labelCar3.getPreferredSize().height);
labelCar4.setBounds((dist4), (900), labelCar4.getPreferredSize().width, labelCar4.getPreferredSize().height);
freRace.invalidate();
try { Thread.sleep(100); } catch (Exception e) {}
}
}
}).start();