Итак, я новичок в PHP и создаю реализацию RPSLS, которую нужно выполнить только в командной строке. У меня есть полуработающая реализация, но у меня две проблемы.Rock Paper Scissors Ящерица Спок в PHP
1) Код, кажется, не попадает в другое условие, когда игрок 2 бьет игрока один, и я не могу определить, почему?
2) Это невероятно повторяющийся набор условных обозначений. Что было бы более эффективной реализацией? Я бы очень хотел понять, как сделать это лучше.
Благодаря
<?php
// Assign moves to integers (1 = Rock, 2 = Paper, 3 = Scissors, 4 = Lizard, 5 = Spock)
echo 'Welcome to Rock, Paper Scissors, Lizard, Spock';
echo "\n";
// Randomize Moves
$player1 = rand(1, 5);
$player2 = rand(1, 5);
// Declare wins
$rock_wins = array(3, 4);
$paper_wins = array(1, 5);
$scissors_wins = array(2, 4);
$lizard_wins = array(5, 2);
$spock_wins = array(3, 1);
// Conditional logic for wins
if ($player1 == $player2) {
echo "Tie.";
echo "\n";
} elseif ($player1 == 1) {
if (in_array($player2, $rock_wins)) {
echo "Player 1 wins";
echo "\n";
}
} elseif ($player1 == 2) {
if (in_array($player2, $paper_wins)) {
echo "Player 1 wins";
echo "\n";
}
} elseif ($player1 == 3) {
if (in_array($player2, $scissors_wins)) {
echo "Player 1 wins";
echo "\n";
}
}
elseif ($player1 == 4) {
if (in_array($player2, $lizard_wins)) {
echo "Player 1 wins";
echo "\n";
}
}
elseif ($player1 == 5) {
if (in_array($player2, $spock_wins)) {
echo "Player 1 wins";
echo "\n";
}
} else {
echo "Player 2 wins";
}
?>
поскольку есть только 5 вариантов, просто установите массив 5x5 и поместите значение win/lose/tie в каждую позицию. например -1, 0, 1. тогда вы попадаете в простой поиск массива, чтобы получить состояние игры. –
Что бы я сделал: $ messages = array («Player 1 побед», «Победители 2», «Ничья»); print ($ messages [rand (0, count ($ messages) - 1)]); – ehwas