Как проверить, если это ничья (Java-игра) - PullRequest
1 голос
/ 14 декабря 2011

Я новичок в Java и мне нужна помощь с 2D-массивами.

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

Player1 использует «1», player2 использует «2». Победителем становится человек, который занимает 2х2. Например.

1 2 0 0
0 1 1 2
2 1 1 2
2 0 0 0

Игрок 1 выигрывает в этом случае. У меня нет проблем с выбором того, кто из двух побед, но я не могу реализовать правильную проверку на ничью. * 1008 например *

1 2 1 2
1 2 1 2
1 2 1 2

Это ничья, потому что ни один из игроков не получил 2х2 в сетке. Тем не менее, я понятия не имею, как обнаружить это, не ломая что-то еще. :(

Любая помощь очень ценится.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2011

Если вы знаете, как определить победителя, не должно быть проблем с обнаружением, если игра завершилась вничью:

  1. ищите победителя
  2. победитель не найден? Это ничья.
1 голос
/ 14 декабря 2011

Полагаю, вы спрашиваете, как определить закономерности состояния игры.Я определяю 3 состояния игры, это: ничья (0), победа (1) и неопределенность (2).Пока игра ведется, а условие выигрыша или проигрыша не определено, состояние игры не определяется.Ваша задача полностью заключается в создании алгоритма оценки состояния игры.И это становится немного сложным в деталях.Что бы вы ни спрашивали, решение проблемы осуществляется способом, приведенным ниже.Если вам нужны дальнейшие объяснения, не стесняйтесь обратной связи.

Решение состоит из двух операций.Первая операция сканирует матрицу в заданных начальных координатах для условия выигрыша.Вторая операция генерирует все начальные координаты для первой операции.

Это то, что упоминается как первая операция, и возвращает значения, как определено выше:

int evaluateSection(int startPosX, int startPosY)
{
    int firstVal;
    boolean emptyExists = false;
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<2;j++)
        {
            if(i==0 && j==0)
                firstVal = matrix[startPosX + i][startPosY + j];
            else if(firstVal == 0)
            {
                firstVal = matrix[startPosX + i][startPosY + j];
                emptyExists = true;
            }

            else if(matrix[startPosX + i][startPosY + j] !=0 && matrix[startPosX + i][startPosY + j] !=firstVal)
                return 0;
            else if(matrix[startPosX + i][startPosY + j] ==0)
                emptyExists = true;

        }

    }
    if(emptyExists==false)
        return 1;
    else
        return 2;

}

Вторая операция сканирует все разделы в игровой области и использует первуюоперация:

int result()
{
    int tmp,res=0;
    for(int i=0;i<3;i++)
        for(int j=0;j<3;j++)
        {
            tmp=evaluateSection(i,j);
            if(tmp==0 && res!=2)
                res=0;
            if(tmp==1)
            {
                return 1;
            }
            else if(tmp==2)
            {
                res=2;
            }
        }
    return res;
}

Как видите, все усложняется.Но алгоритм таков.Попробуй.

1 голос
/ 14 декабря 2011

Вы можете анализировать массив и искать последовательное вхождение 2 или 1.

Если никто не выходит, это ничья!

int board[][] = new int[4][4]; 
boolean drawFlag = true;

for(int i = 0; i<4; i++)
 {
   for(int j=1; j<4; j++)
     {
        if(board[i][j-1] == board[i][j])
           drawFlag = false;
      }
  }

  if(drawFlag == true)
     System.out.println("Its a draw!");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...