Java-игра 1024: добавление числа к случайной плитке

#java

#java

Вопрос:

Я новичок в Java, пытающийся реализовать код для игры 1024 для задания в колледже. Я действительно застрял, пытаясь добавить число 1 к двум случайным ячейкам в сетке. Игра немного отличается. Вместо печати сетки 4×4 сетка печатается на основе предпочтений пользователя. Мой приведенный ниже код добавляет число 1 к каждой плитке, потому что все они пустые, но как мне добавить число только к 2 случайным плиткам?

Каждый последующий ход в незанятую ячейку в сетке добавляется плитка «1», по этой причине в конце каждого хода мне нужно составить список всех свободных ячеек и случайным образом выбрать свободную ячейку, используя этот список.

Как мне это сделать? В моем коде я пытался подсчитать каждую пустую ячейку, но это не работает для добавления ‘1’ к 2 случайным плиткам.

 int count = 0;

for (int i = 0; i < board.length; i  ) {

  for (int j = 0; j < board.length; j  ) {

    if (board[i][j] == 0) {
        count;
    }

    if (count == 0) {
      return;
    }
    
    int location = r.nextInt(count);
    int newTile = 1;
    board[i][j] = newTile;
  }
}
 

Ответ №1:

Попробуйте следующее:

 public class Main
{
    public static void main(String[] args) {
        //Create random genertor
        Random randomGenerator = new Random();
        Scanner input = new Scanner(System.in); 
        
        //Get user input
        System.out.println("Enter a legth");
        int length = input.nextInt();
        System.out.println("Enter a width");
        int width = input.nextInt();
        
        //Initialize board (4x4)
        int[][] board = new int[length][width];
        
        //Segment to generate two different points on the board
        int randomCoordinateXOne = randomGenerator.nextInt(length);
        int randomCoordinateYOne = randomGenerator.nextInt(width);
        int randomCoordinateXTwo = randomGenerator.nextInt(length);
        int randomCoordinateYTwo = randomGenerator.nextInt(width);
        while (randomCoordinateXOne == randomCoordinateXTwo amp;amp; randomCoordinateXTwo == randomCoordinateYTwo) {
          randomCoordinateXTwo = randomGenerator.nextInt(length);
          randomCoordinateYTwo = randomGenerator.nextInt(width);
        }
        
        //Iterate through the board
        for (int i = 0; i < length; i  ) {
          for (int j = 0; j < width; j  ) {
            //If the current space is one of the two selected above, put a 1 in that spot
            if ((i == randomCoordinateXOne amp;amp; j == randomCoordinateYOne) || (i == randomCoordinateXTwo amp;amp; j == randomCoordinateYTwo)) {
              board[i][j] = 1;
            }
            //Otherwise, put a 0
            else {
              board[i][j] = 0;
            }
            //Used to visualize result
            System.out.print(board[i][j]);
          }
          //Used to visualize result
          System.out.println();
        }
    }
}
 

Убедитесь, что вы включили следующее в начало вашего java-файла:

 import java.util.Scanner;
import java.util.Random;
 

Дайте мне знать, если это поможет. Пожалуйста, отметьте правильный ответ, если это так. Комментарии есть в коде, но если у вас есть какие-либо вопросы, дайте мне знать!

Комментарии:

1. Я думаю, что я неправильно объяснил. Вы устанавливаете доску на 4×4, но в моем коде сетка основана на вводе пользователя. ( int dimension = in.nextInt() ). Мне также нужно вести подсчет количества доступных тайлов на протяжении всей игры.

2. @IzabellaWnuk Не беспокойся. Я обновлю код. Это не должно быть так сложно. Пока есть вопросы?

3. Ответ @IzabellaWnuk был обновлен. Дайте мне знать, если это сработает