これは特に効率的ではありません)=感謝を高く評価しているが、それはあなたのニーズのために働く必要があります。基本的には
int[][] data = new int[10][10];
Random rnd = new Random();
for (int row = 0; row < 10; row++) {
for (int col = 0; col < 10; col++) {
data[row][col] = rnd.nextInt(4);
}
}
Random rndFind = new Random();
int row = 0;
int col = 0;
boolean found = false;
do {
row = rndFind.nextInt(10);
col = rndFind.nextInt(10);
if (data[row][col] == 0) {
found = true;
}
} while (!found);
System.out.println("Found human @ " + row + "x" + col);
、それだけで2つのランダムなインデックスを生成する(行/ COL)配列内の値をチェックします。ループ内にある「人間」の場合は配列内の値をチェックし、そうでなければ再度試みます。
各要素は(その位置と種類を知っていた)自己完結型のオブジェクトだったとあなたの代わりに配列
のList
を使用した場合、私は抵抗することはできませんので、...もっと効率的な方法を生成するために容易になるだろう...
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
public class Test {
public enum CharacterType {
HUMAN, ZOMBIE, CAT;
private static Random rnd = new Random();
public static CharacterType random() {
switch (rnd.nextInt(3)) {
case 0:
return HUMAN;
case 1:
return ZOMBIE;
default:
return CAT;
}
}
}
public static class CharacterEnity {
private int gridX, gridY;
private CharacterType type;
public CharacterEnity(CharacterType type, int gridX, int gridY) {
this.gridX = gridX;
this.gridY = gridY;
this.type = type;
}
public int getGridX() {
return gridX;
}
public int getGridY() {
return gridY;
}
public CharacterType getType() {
return type;
}
public void setGridX(int gridX) {
this.gridX = gridX;
}
public void setGridY(int gridY) {
this.gridY = gridY;
}
}
public static void main(String[] args) {
// This is the main collection...
List<CharacterEnity> entities = new ArrayList<>(100);
// This is just setup...
List<Integer> rows = new ArrayList<>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}));
List<Integer> columns = new ArrayList<>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}));
Collections.shuffle(rows);
List<Integer> unusedColumns = new ArrayList<>(10);
while (!rows.isEmpty()) {
Collections.shuffle(columns);
unusedColumns.addAll(columns);
int row = rows.remove(0);
while (!unusedColumns.isEmpty()) {
CharacterType type = CharacterType.random();
entities.add(new CharacterEnity(type, unusedColumns.remove(0), row));
}
}
// End setup...
List<CharacterEnity> humans = entities.stream().filter(e -> e.getType() == CharacterType.HUMAN).collect(Collectors.toList());
System.out.println("Found " + humans.size() + " humans");
Collections.shuffle(humans);
CharacterEnity turn = humans.get(0);
System.out.println("Turning human @ " + turn.getGridX() + "x" + turn.getGridY());
}
}
オーケーをプレイしたので、基本的にこれは(それがグリッド上のどこを知っているCharacterEntity
クラスを定義し、あなたのニーズに応じて、同様の位置にエンティティをマッピングするMap
を持つことができます)
それは人間のキャラクターを得るだけに、エンティティのList
をフィルタリングし、それは、その後、それをランダム化するために、このList
をシャッフル最初の要素をつかみ、
それらを回す 'java'と' javascript'タグとは何ですか? – SkrewEverything
JavaとJavaScriptは異なる言語です。ご質問はJavaに関するものです。 –
申し訳ありませんが、私はあなたに何を求めているか考えていません。 – ajb