PHP Move Checker части внутри многомерного массива часть 2 - PullRequest
0 голосов
/ 19 ноября 2010

У меня уже есть части, намеченные в массиве, и он печатает очень хорошо

    $board = array(
             array('1','rs','1','rs','1','rs','1','rs'),
             array('rs','1','rs','1','rs','1','rs','1'),
             array('1','rs','1','rs','1','rs','1','rs'),
             array('rs','bs','rs','bs','rs','bs','rs','bs'),
             array('bs','rs','bs','rs','bs','rs','bs','rs'),
             array('2','bs','2','bs','2','bs','2','bs'),
             array('bs','2','bs','2','bs','2','bs','2'),
             array('2','bs','2','bs','2','bs','2','bs')
              );

1 = черные фигуры
2 = красные кусочки
RS = красный квадрат
bs = черный квадрат

этот код анализирует ввод игрока: пример ОТ F2 в (0,0) координаты

function parseSquareFrom($square) {
    if (strlen($square) != 2) {
        return FALSE;
    }

    $coords = array(ord('A') - ord($square[0]), $square[1] - 1);

    // Perform bounds-checking.
    if ($coords[0] < 0 || $coords[0] > 7 || $coords[1] < 0 || $coords[1] > 7) {
        return FALSE;
    }

    return $coords;
}

Я повторил ту же функцию для входа TO (туда, куда игрок хочет переместить фигуру

Мой вопрос: следующий код - правильный способ перехода с функциями выше

    $board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];
    $board[$coords[0]][$coords[1]] = 0;

    //eating action
    $board[$coords1[0]][$coords1[1]] = 0;
    $board[$coords1[0]-2][$coords1[1]+2] = $board[$coords[0]][$coords[1]];

$way = ($_POST['way'] === 'up')? 1:-1;

$way = ($_POST['way'] === 'down')? -1:+1;



    //if player is 'up' then the value of $way is 1 so
      $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 1,3
   //if player is not 'up' then the value of $way is -1 so
      $board[$x+(-1*$way)][$y+(1*$way)] = $board[$coords[0]][$coords[1]]; // position 2,2 becomes 3,1

Я планирую иметь функцию обновления движений плитки на экране, чтобы фигура двигалась, когда она выделяла фигуру, когда она перемещалась к следующему квадрату

это использует сериализацию в файл для хранения стартовых позиций, перемещений, королей и позиций ферзей

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Я думаю, у вас есть несколько проблем

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];

если $ordins [1] == 7 (что, по-видимому, разрешено), то $ ords [1] +1 == 8, которое находится за пределами Не говоря уже о координатах +/- 2, которые мы увидим позже.

Вы, вероятно, не хотите, чтобы 'bs' / 'rs' в вашем хранилище, все это может быть выведено.

$getSquareColor = function($x,$y){return ($x+$y)/2 == 1 ? 'red' : 'black';}  //or better yet, const or enum


function getSquareColor($x, $y)  //alternatively
{
    if ( ($x+$y) % 2 == 0) return 'black';
    else return 'red';
}

ps - если вы опустите эти знаки доллара, то функция javascript будет такой же хорошей

1 голос
/ 19 ноября 2010

Я собираюсь предположить, что $coords - это переменная $_POST, подобная предложенной в первой части этого вопроса. Если это так, первая часть вашего кода верна:

$board[$coords1[0]-1][$coords1[1]+1] = $board[$coords[0]][$coords[1]];
$board[$coords[0]][$coords[1]] = 0;

Это перемещает фигуру по диагонали на один шаг вверх-вправо на доске. Вторая часть, с другой стороны, пропускает фактическое действие «есть». Если только местоположение, указанное пользователем, не является тем, где находится вражеская фигура. В этом случае ваш код будет работать.


Что касается проверки границ, то вы не пуленепробиваемы, так как добавление 2 в ход еды, в то время как фигура находится рядом с границей, приведет к тому, что ваш код попытается убрать фигуру с доски. Таким образом, вы можете проверить границы, в зависимости от хода, поэтому, если ход является стандартной диагональю, вы должны проверить, что конечная позиция находится в пределах, а не начальной, поскольку вы предполагаете, что фигура была в правильном положении ранее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...