我有一个游戏板,我想填充随机游戏对象
让我们在1...6
数组中为它们提供值int[10][10]
。
游戏应该有不同的困难。越容易,相同的对象就越多,彼此相邻;越难,相同物体彼此相邻的越少(半径= 2)。
例:
让我们假设中等难度。对象周围40%的对象(半径= 2)可以是相同的类型。
-000------
00000-----
00100-----
00000-----
-000------
0
中只有40%允许属于1
类型。
如何创建这样的随机数组?或者在这种情况下有更好的方法来实现难度吗?
答案 0 :(得分:1)
我这样做的方法是随机化索引,而不是值本身。 因此,其中40%意味着我只能循环总数的40%。 在你的例子中,这就是我要做的......
int n = 20 * 0.4;
for(i=1; i<n; ++i){
int r = GetRandomIndex();
board[r] = 1;
}
答案 1 :(得分:0)
尝试这样的事情:
import java.awt.Point;
import java.awt.geom.Point2D;
import java.util.*;
import static java.lang.Math.sqrt;
class Game {
Game() {
clearGameObjects();
}
void clearGameObjects() {
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
gameObjects[i][j]=0;
}
@Override public String toString() {
String s="";
for(int i=0;i<n;i++) {
List row=Arrays.asList(gameObjects[i]);
s+="row "+i+" "+row+'\n';
}
return s;
}
void distributeObjects(int x,int y,double percent,int type) {
clearGameObjects();
gameObjects[x][y]=type;
List<Point> withinRadius=new ArrayList<>(21);
Point2D p1=new Point2D.Double(x,y);
Point p;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++) {
if(p1.distance(p=new Point(i,j))<Math.sqrt(5))
withinRadius.add(p);
}
System.out.println(withinRadius.size()+" points within radius: "+withinRadius);
int placed=1;
for(Point p2:withinRadius)
if(p2.getX()!=x&&p2.getY()!=y)
if(placed/(double)withinRadius.size()<percent) {
gameObjects[p2.x][p2.y]=type;
placed++;
}
System.out.println("placed "+placed+" items, "+placed/(double)withinRadius.size()*100+"%");
}
final int n=10;
Integer gameObjects[][]=new Integer[n][n];
}
public class So21541681 {
public static void main(String[] args) {
Game game=new Game();
System.out.println(game);
game.distributeObjects(5,6,.40,1);
System.out.println(game);
}
}