Следующий код для игры. Он создает массив из N последовательных камней, и игроки Алиса и Боб поочередно выбирают два последовательных камня (вычитают значение и оставляют «пробел») каждый раз, пока нет последовательных камней. Это означает, что массив не имеет значений без промежутка между ними.
Я думаю, что код для игры завершен. Но когда я звоню, это показывает только логическое значение (правда). Вместо имени победителя.
Вот мой код:
<?php
class GameOfStones {
// Define while the index contains a stone (O) or not.
const STONE = 'O';
const STONE_PAIR = 'OO';
const GAP = '';
// Save the random result in a open/public variable.
public $line;
public $winner;
// Set the winning rules for the game.
public function win($winner) {
if (is_finished === true) {
if ($nStones % 2 == 1) {
echo "Alice" . '<br>';
}
else {
echo "Bob" . '<br>';
}
}
}
// Create the indexed line of stones
public function create_line($nStones){
return array_fill(0, $nStones, 'O');
}
// Removes a pair of stones from the line at nth location.
public function remove($n)
{
while($game->is_finished() !== true) {
if(substr($this->line, $n-1, 2) == self::STONE)
$this->line =
substr_replace($this->line, self::GAP , $n-1, 2);
else
throw new Exception('Invalid move.');
}
}
// Check if there are no further possible moves.
public function is_finished()
{
return strpos($this->line, self::STONE_PAIR) === false;
}
};
$game = new GameOfStones(rand(1,10000000));
var_dump($game->is_finished());
$game->remove(rand($n));
var_dump($game->is_finished());
var_dump($game->win());
echo $nStones;
printf($winner);
?>
Похоже, вы звоните constant
is_finished
вместо твоего метода is_finished()
, Попробуйте заменить
public function win($winner) {
if (is_finished === true) {
if ($nStones % 2 == 1) {
echo "Alice" . '<br>';
}
else {
echo "Bob" . '<br>';
}
}
}
С
public function win($winner) {
if ($this->is_finished() === true) {
if ($nStones % 2 == 1) {
echo "Alice" . '<br>';
}
else {
echo "Bob" . '<br>';
}
}
}
boolean (true) — это возвращаемое значение, которое вы получаете от вашего первого var_dump в var_dump($game->is_finished());
В remove()
функция, $game
переменная не существует. Вместо этого вы должны проверить $this
поскольку remove()
это уже функция класса
while($this->is_finished() !== true)
Также в win()
функция, вы не звоните is_finished
функционировать правильно.
if ($this->is_finished() === true)