Задача. Алгоритм игры

169
07 августа 2018, 15:30

Есть два игрока. Каждый выбирает "атаку" и "защиту", это может быть:
Голова - 1
Живот - 2
Руки - 3
Ноги - 4
Цифры - ID.
Победитель определяется в случае, когда игрок ударил в "незащищенную" область противника и верно защитил свою.
Т.е. в каждой игре есть действия игрока 1 (например 1,1 - атака головы и защита тоже головы) и действия игрока 2 (например 2,2 - атака живота и защита тоже живота), соотв. в этом случае результат - ничья Помогите написать алгоритм определения результата игры на php максимально кратко.
С уважением и заранее с благодарностью!

Answer 1
$PLAYER_1 = [1,1];
$PLAYER_2 = [2,2];
$TYPE = 0;
if ($PLAYER_1[1] == $PLAYER_2[0]) {
    $TYPE += 1;
}
if ($PLAYER_2[1] == $PLAYER_1[0]) {
    $TYPE += 2;
}
switch ($TYPE) {
    case '1':
        var_dump('Победил игрок 1');
        break;
    case '2':
        var_dump('Победил игрок 2');
        break;
    case '0':
    case '3':
        var_dump('Ничья');
        break;
    default:
        break;
}
Answer 2

То же, что и в ответе @Mantikyl, но победой считаем попадание в незащищённую область

class Turn {
    const IN_HEAD = 1;
    const IN_BODY = 2;
    const IN_BELL = 3;
    const IN_FOOT = 4;
    public static $targets = [self::IN_HEAD, self::IN_BODY, self::IN_BELL, self::IN_FOOT];
    public $attack;
    public $defence;
    public function __construct($attack, $defence) {
         $this->attack = $attack;
         $this->defence = $defence;
    }
}
function fight($turn1, $turn2) {
  $res = 0;
  if ($turn2->defence !== $turn1->attack) $res = $res | 1; // Игрок 1 попал в незащищённую область
  if ($turn1->defence !== $turn2->attack) $res = $res | 2; // Игрок 2 попал в незащищённую область
  switch (true) {
      case ($res & 1) && ($res & 2):
      case $res === 0:
      default:
          return 'Ничья';
      case $res & 1: return 'Победа первого игрока';
      case $res & 2: return 'Победа второго игрока';
  }
}
$possibleTurns = [];
foreach (Turn::$targets as $a) {
    foreach (Turn::$targets as $d) {
        $possibleTurns[] = new Turn($a, $d);
    }
}
foreach ($possibleTurns as $t1) {
    foreach ($possibleTurns as $t2) {
        $res = fight($t1, $t2);
        echo "P1({$t1->attack}) VS P2({$t2->defence})", PHP_EOL;
        echo "P2({$t2->attack}) VS P1({$t1->defence})", PHP_EOL;
        echo "Result: {$res}", PHP_EOL, '---', PHP_EOL;
    }
}
READ ALSO
PHP, Формат вывода массива

PHP, Формат вывода массива

Решаю задачки по составлению функций для новичков, которые проверяются по ожидаемым вводным данным с ожидаемыми результатамиВ ожидаемом...

158
1c bitrix Каталоги [закрыт]

1c bitrix Каталоги [закрыт]

Создал новый раздел в каталоге(Фаерволы), подскажите, кто знает, как вытащить товары с другого раздела(Серверы) в новый по ID? Заранее спасибо

162