Helin1 Ответов: 2

Логическая настольная игра на java


Программа должна распечатать заданные значения в массиве array1 и вывести второй массив как true или false.

Array1 представляет собой настольную игру, в которой персонажи могут стоять в разных положениях. Целые числа показывают, насколько опасно стоять на каждой позиции.

Если персонаж находится в int 3, он должен быть объявлен мертвым.
Если вы добавите значения каждого соседа(не включая текущую позицию) и общее значение будет равно 15, он также будет объявлен мертвым.

Таким образом, если текущая позиция равна 2, а общее значение каждого соседа меньше 15, персонаж живет. Соседи, отсутствующие на краю массива, должны быть засчитаны как 0.

Как мне напечатать это так же, как array1, но с логическими значениями T или F?

Что я уже пробовал:

import java.util.Arrays;
public class uppg10{
 public static void main(String[] args){


   int [][] array1 = {{1,1,2,3,3},
                     {2,1,1,2,3},
                     {3,2,2,1,2},
                     {3,3,3,3,3}};

   Boolean [][] array2;

   int rows = array1.length;
   int cols = array1[0].length;

   array2 = new Boolean[rows][cols];

   for (int row=0; row<rows; row++) {
     for (int col=0; col<cols; col++) {

       System.out.print(String.format("%4d", array1[row][col]));

       if ( ( (col+1) % cols ==0) && (col > 0))

            System.out.println();
     }

   }

 }
}

Richard MacCutchan

Каковы критерии для объявления чего-то истинным или ложным?

Helin1

Для True: целое число должно быть меньше 3, а добавленное значение всех соседей в массиве должно быть меньше 15

Richard MacCutchan

Тогда вопрос такой же, как и для живых или мертвых. Вычислите значения для массива 1 и установите True или False в array2 соответственно.

2 Ответов

Рейтинг:
0

CPallini

Попробуй

  int sum_adjacent_values(int r, int c)
  {
    int sum = - position_array[r][c];

    for (int i = -1; i <= 1; ++i)
    {
      for (int j = -1; j <= 1; ++j)
      {
        int row = r+i;
        int col = c+j;

        if ( (row >= 0 && row < Rows) && ( col >= 0 && col < Cols))
        {
          sum += position_array[row][col];
        }
      }
    }
    return sum;
  }
  void compute_state_array()
  {
    for (int row = 0; row < Rows; ++row)
    {
      for (int col = 0; col < Cols; ++col)
      {
        if ( position_array[row][col] == 3)
        {
          state_array[row][col] = false;
        }
        else
        {
          int sum_of_adjacent_values = sum_adjacent_values(row, col);

          if ( sum_of_adjacent_values == 15)
            state_array[row][col] = false;
          else
            state_array[row][col] = true;
        }
      }
    }
  }

  public final boolean [][] get_state_array(){ return state_array; }

  public Bg(int [][] a)
  {
    Rows = a.length;
    Cols = a[0].length;

    position_array = new int[Rows][Cols];
    state_array = new boolean[Rows][Cols];

    for (int row = 0; row < Rows; ++row)
      for (int col = 0; col < Cols; ++col)
        position_array[row][col] = a[row][col];

    compute_state_array();
  }


  public static void show( int [][] a)
  {
    for (int r = 0; r < a.length; ++r)
    {
      for (int c = 0; c < a[0].length; ++c)
        System.out.print(String.format("%6d", a[r][c]));
      System.out.println();
    }
  }

  public static void show( boolean [][] a)
  {
    for (int r = 0; r < a.length; ++r)
    {
      for (int c = 0; c < a[0].length; ++c)
        System.out.print(String.format("%6b", a[r][c]));
      System.out.println();
    }
  }

  public static void main(String[] args)
  {
    int [][] position_array =
    {
      {1,1,2,3,3},
      {2,1,1,2,3},
      {3,2,2,1,2},
      {3,3,3,3,3}
    };

    Bg bg = new Bg( position_array);
    boolean [][] state_array = bg.get_state_array();

    show( position_array);
    show( state_array);
  }

}


Patrice T

5

Рейтинг:
0

OriginalGriff

Используйте вложенные циклы точно так же, как вы это делаете для array1, но вместо форматирования числа в виде строки используйте условный (или тернарный) оператор java: Что такое условный оператор ?: в Java?[^]

System.out.print(array2[row][col] ? "T" : "F");