PHP игра камней возвращает логическое вместо победителя

Следующий код для игры. Он создает массив из 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);
?>

0

Решение

Похоже, вы звоните 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>';
}
}
}
1

Другие решения

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)
0

По вопросам рекламы [email protected]