两点之间的随机位置 (x1, z1, x2, z2)
Random location between two points (x1, z1, x2, z2)
我正在为 Minecraft 服务器制作一个插件,允许玩家 select 两个位置(x1、z1(第一个位置):x2、z2(第二个位置))并允许他们设置这个两点之间的区域 (rectangular/square) 以将它们随机传送到给定位置的任何位置。
为了简单起见,我将省略大部分代码,只提供我遇到问题的部分。下面,此代码将(在玩家加入服务器的情况下)将他们传送到该区域内。
我在里面设置了一些虚拟数据 nextInt()
这样你就可以理解数学了。
Location 1 (x1, z1): -424, 2888
Location 2 (x2, z2): 4248, 3016
以上是下面 proram 段中的位置。 (将“z
”视为图表上的“y
”)。
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
Player player = event.getPlayer();
int x = 0, y = 0, z = 0;
Random randLocation = new Random();
player.sendMessage(ChatColor.RED + "TELEPORTING TO WASTELAND..");
x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);
Location location = player.getLocation();
location.setX(x);
location.setZ(z);
location.setY(player.getWorld().getHighestBlockAt(x, z).getY());
player.teleport(location);
}
问题是,有时一个(或两个)位置的值为负。我已经尝试了很多不同的方法来得出这些数字,但我很困惑。
问题:
有没有办法让 Java select 成为 2 个给定值之间的随机数?
示例:
randomLocation.nextInt(x1, x2);
randomLocation.nextInt(z1, z2);
您在确定随机坐标的代码中有一个错误:
x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);
您正在使用 x1
和 z1
来确定新的 x
位置,而您应该使用 x1
和 x2
:
randX = randLocation.nextInt(Math.abs(x2-x1) + 1) + Math.min(x1,x2);
randZ = randLocation.nextInt(Math.abs(z2-z1) + 1) + Math.min(z1,z2);
x = randLocation.nextInt((2888 - 424) + 1) + 424;
z = randLocation.nextInt((4248 - 3016) + 1) + 3016;
还有一点:应该是这样的:假设x2>x1且z2>z1
x = randLocation.nextInt((x2 - x1) + 1) + x1;
z = randLocation.nextInt((z2 - z1) + 1) + z1;
我正在为 Minecraft 服务器制作一个插件,允许玩家 select 两个位置(x1、z1(第一个位置):x2、z2(第二个位置))并允许他们设置这个两点之间的区域 (rectangular/square) 以将它们随机传送到给定位置的任何位置。
为了简单起见,我将省略大部分代码,只提供我遇到问题的部分。下面,此代码将(在玩家加入服务器的情况下)将他们传送到该区域内。
我在里面设置了一些虚拟数据 nextInt()
这样你就可以理解数学了。
Location 1 (x1, z1): -424, 2888
Location 2 (x2, z2): 4248, 3016
以上是下面 proram 段中的位置。 (将“z
”视为图表上的“y
”)。
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event){
Player player = event.getPlayer();
int x = 0, y = 0, z = 0;
Random randLocation = new Random();
player.sendMessage(ChatColor.RED + "TELEPORTING TO WASTELAND..");
x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);
Location location = player.getLocation();
location.setX(x);
location.setZ(z);
location.setY(player.getWorld().getHighestBlockAt(x, z).getY());
player.teleport(location);
}
问题是,有时一个(或两个)位置的值为负。我已经尝试了很多不同的方法来得出这些数字,但我很困惑。
问题: 有没有办法让 Java select 成为 2 个给定值之间的随机数?
示例:
randomLocation.nextInt(x1, x2);
randomLocation.nextInt(z1, z2);
您在确定随机坐标的代码中有一个错误:
x = randLocation.nextInt(((2888 - 424) + 1) + 424);
z = randLocation.nextInt(((4248 - 3016) + 1) + 3016);
您正在使用 x1
和 z1
来确定新的 x
位置,而您应该使用 x1
和 x2
:
randX = randLocation.nextInt(Math.abs(x2-x1) + 1) + Math.min(x1,x2);
randZ = randLocation.nextInt(Math.abs(z2-z1) + 1) + Math.min(z1,z2);
x = randLocation.nextInt((2888 - 424) + 1) + 424;
z = randLocation.nextInt((4248 - 3016) + 1) + 3016;
还有一点:应该是这样的:假设x2>x1且z2>z1
x = randLocation.nextInt((x2 - x1) + 1) + x1;
z = randLocation.nextInt((z2 - z1) + 1) + z1;