From d8fd1d0e764375fd521a870d813f5360973bdc54 Mon Sep 17 00:00:00 2001 From: Ivor Barhansky Date: Fri, 21 Jun 2024 12:35:43 +0000 Subject: [PATCH] Update src/battle.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Групповые бои. #3 --- src/battle.php | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/battle.php b/src/battle.php index cfd59fc..5fc8fcc 100644 --- a/src/battle.php +++ b/src/battle.php @@ -6,7 +6,9 @@ if (!file_exists($currentBattle)) { 'fighters' => [], 'moves' => [], 'last_fighter' => null, - 'battle_end' => false + 'battle_end' => false, + 'winner' => null, + 'game_mode' => null, ])); } @@ -17,6 +19,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = $_POST['username']; if ($action === 'join') { + $gameMode = $_POST['gameMode']; + $team = $_POST['team']; $fighterExists = false; foreach ($battleState['fighters'] as $fighter) { if ($username === $fighter['name']) { @@ -24,11 +28,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { break; } } + if (!$fighterExists) { + // Устанавливаем режим игры только при входе первого игрока + if (empty($battleState['fighters'])) { + $battleState['game_mode'] = $gameMode; //Ошибки нет, данные пишутся в json по окончанию. + } + $battleState['fighters'][] = [ 'name' => $username, 'hp' => 100, 'attack' => 10, + 'team' => ($gameMode === 'team' ? $team : null), ]; } @@ -62,14 +73,26 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $battleState['fighters'][$targetIndex]['hp'] = 0; } - $aliveFighters = array_filter($battleState['fighters'], function ($fighter){ - return $fighter['hp'] > 0; - }); + $aliveTeams = []; + $aliveFighters = []; - if (count($aliveFighters) === 1) { - $battleState['battle_end'] = true; - $battleState['winner'] = reset($aliveFighters)['name']; + foreach ($battleState['fighters'] as $fighter) { + if ($fighter['hp'] > 0) { + if ($fighter['team']) { + $aliveTeams[$fighter['team']] = true; + } + $aliveFighters[] = $fighter; + } } + + if ($battleState['game_mode'] === 'team' && count($aliveTeams) === 1) { + $battleState['battle_end'] = true; + $battleState['winner'] = ['team' => array_keys($aliveTeams)[0]]; + } elseif ($battleState['game_mode'] === 'solo' && count($aliveFighters) === 1) { + $battleState['battle_end'] = true; + $battleState['winner'] = ['name' => $aliveFighters[0]['name']]; + } + } } else { echo json_encode(['error' => 'Not your turn!']); @@ -86,3 +109,5 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } elseif ($_SERVER['REQUEST_METHOD'] === 'GET') { echo json_encode($battleState); } + +