Как переназначить графики на сетке с помощью math.random - PullRequest
0 голосов
/ 04 апреля 2020

Я назначаю 3 символа (два 'T и один' S ') для сетки 10 x 10. У меня есть это, но я хочу знать, как я мог бы повторно рандомизировать позиции персонажа, если они окажутся в одном месте. По сути, я создаю небольшую игру, в которой я солдат (S) и нахожусь в сетке с двумя Целями (T). В конце концов мне придется уничтожить цели, но я хочу убедиться, что каждая из них окажется на своем месте. вот мой код

import java.lang.Math;
public class PaintBall_Thomas{
    public static void fillGrid(char[][] battleField){
      for ( int i = 0; i < battleField.length; i++){
        for ( int j = 0; j < battleField[i].length; j++){
          battleField[i][j] = '-';
        }
      }
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'S';//assigns a random number between 1-10 and assigns it to either soldier/target
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'T';
      battleField[((int)(Math.random()*10))][((int)(Math.random()*10))] = 'T';
      for ( int i = 0; i < battleField.length; i++){
        for ( int j = 0; j < battleField[i].length; j++){

          System.out.print(battleField[i][j] + " ");
        }
        System.out.println();
      }
    }//end of fillGrid method
    public static void main(String[] args) {
      int columns = 10;
      int rows = 10;
      System.out.println("----------GRID----------");
      //end of main
      char[][] battleField = new char [rows][columns];
      fillGrid(battleField);
  }
}

1 Ответ

0 голосов
/ 04 апреля 2020

это может быть хорошим использованием для рекурсии, например,

public void addChar(char type) {
    int row = (int)(Math.random() * battleField.length); // choose rand spot
    int col = (int)(Math.random() * battleField.length);

    if (battleField[row][col] == '-') { // if chosen space is free
        battleField[row][col] = type; // add it
    } else {
        addChar(type) // try again if space was occupied
    }
}

, поэтому могут возникнуть некоторые проблемы ... например, возможность переполнения стека, если плата уже заполнена ... но если метод предназначен только для добавления двух Ts и одного S, все будет в порядке

, чтобы вы могли просто добавить их как

addChar('T');
addChar('T');
addChar('S');

, и ни одно из выбранных мест не будет дубликаты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...