Пытается сохранить кубики-объекты как отдельные переменные сеанса, но не работает (yahtzeegame php)

У меня есть 3 объекта для игры в кости, которые после того, как они были брошены один раз, я бы хотел, чтобы пользователь мог выбрать 1 из этих игр в кости, в зависимости от того, какой из них выбран, должен быть сохранен в новую отдельную переменную сеанса для хранения объекта игры в кости, представляющего игру в кости. -номер, который пользователь вошел.

И затем я намеревался сохранить оставшиеся объекты-кости в другую отдельную переменную сеанса для хранения тех, которые будут брошены снова.

Но, похоже, это работает не так, как я хочу -> Попытка объединить использование переменных $_GET для хранения числа, введенного через скрытое текстовое поле формы, и переменных сеанса для хранения объектов-кубиков.

Код выглядит так:

<?php
error_reporting(-1);

require_once('../CDiceSvg.php');
require_once('../CDiceGame.php');

session_start();

//Initiate 3 variables to hold the dices
$_SESSION['yatzygame']['dices'] = Array();

//Initiate 2 variables to maintain the dices to save respectively reroll.
$_SESSION['yatzygame']['dicesToSave'] = Array();
$_SESSION['yatzygame']['dicesToReRoll'] = Array();


//Initiate the 3 dices.
for($i = 1; $i <= 3; $i++)
{
    $_SESSION['yatzygame']['dices'][$i] = new CDiceSvg();
}

//If game has not yet been started:
if(!isset($_GET['roundcounter']))
{
    //Then hide the continue and enough-buttons
    $status = "";
    $status2 = "style=\"display: none;\"";
    $throwCounter = 0;

}

//If the "kasta"-button has been pressed -> Start the game:
if(isset($_GET['button']) && $_GET['button'] == "kasta")
{
    $status = "style=\"display: none;\"";
    $status2 = "";
    $_GET['roundcounter']++;
    $throwCounter = $_GET['roundcounter'];

    //Throw the dices
    for($i = 1; $i <= 3; $i++)
    {
        $_SESSION['yatzygame']['dices'][$i]->ThrowDieEnhanced();
    }
}

//If game has been started/If the first dices has been tossed:
if($_GET['roundcounter'] == 1)
{
    //Fetch the dices values (given as integers):
    $diceValues = Array();

    for($i = 1; $i <= 3; $i++)
    {
        $diceValues[$i] = $_SESSION['yatzygame']['dices'][$i]->GetLastThrow();
    }

    //Print the dices generated values:
    print_r($diceValues);



}

if(isset($_GET['dicekeeping']))
{
    //Store the chosen dice to keep/save:
    $dicesToKeep = $_GET['dicekeeping'];
    echo "<br><br>" . $dicesToKeep;
}

/ * Кажется, что код работает до тех пор, пока ЗДЕСЬ НИЖЕ: Это похоже на то, что объекты в кости неправильно сохранены в новых разделенных переменных сеанса... */

//Save the dices until the next round accordingly to user-choice:
if(isset($_GET['dicekeeping']) && $_GET['button'] == "continue")
{
    for($i = 1; $i <= 3; $i++)
    {
        if($_GET['dicekeeping'] == $i)
        {
            $_SESSION['yatzygame']['dicesToSave'][$i] = $_SESSION['yatzygame']['dices'][$i];

        }else
        {
            $_SESSION['yatzygame']['dicesToReRoll'][$i] = $_SESSION['yatzygame']['dices'][$i];

        }
    }

    print_r($_SESSION['yatzygame']['dicesToSave']);

    //Store the values to check so everything goes according to plan:
    $printValuesForSave = Array();

    $counter = 0;
    foreach($_SESSION['yatzygame']['dicesToSave'] as $diceObj)
    {
        $printValuesForSave[$counter] = $diceObj->GetLastThrows();
        $printValuesForSave[$counter] = $printValuesForSave[$counter][0];
        $counter++;
    }
    echo "<br><br>";
    print_r($printValuesForSave);
    print_r($_SESSION['yatzygame']['dicesToReRoll']);

    $_GET['roundcounter']++;
    $throwCounter = $_GET['roundcounter'];
}



//Go to Round 2 and print-out new state of the dices and handle previous choices:
if($_GET['roundcounter'] == 2)
{
    foreach($_SESSION['yatzygame']['dicesToSave'] as $diceSaved)
    {
        echo "Dices saved from last round: {$diceSaved}";
    }

    //Reroll dices indirectly chosen to be rerolled earlier:
    foreach($_SESSION['yatzygame']['dicesToReRoll'] as $dice)
    {
        $dice->ThrowDieEnhanced();
    }

    //Get the new values from the rerolled dices:
    $newValuesArray = Array();
    foreach($_SESSION['yatzygame']['dicesToReRoll'] as $diceNmbr => $diceValue)
    {
        $newValuesArray[$diceNmbr] = $_SESSION['yatzygame']['dicesToReRoll'][$diceNmbr]->GetLastThrow();
    }

    foreach($newValuesArray as $newDiceValue => $newValue)
    {
        echo "<br><br>Here comes the {$newDiceValue} new value: {$newValue}";
    }
}

//Print the form..
echo <<<EOD
        <form action="framework_Test.php" method="get">
        <input type="hidden" name="roundcounter" value="{$throwCounter}">
        <button type="submit" name="button" {$status} value="kasta">Kasta</button>
        <input type="text" name="dicekeeping" {$status2} autofocus>
        <input type="hidden" name="dicestokeep" value="{$dicesToKeep}">

        <button type="submit" name="button" {$status2}value="continue">Fortsätt</button>
        <button type="submit" name="button" {$status2} value="enough">Nöjd</button>
        <a href="{$_SERVER['PHP_SELF']}" {$status}>Starta om</a>
EOD;
?>

Для классов, которые используются, код приведен ниже: основной код, который расширяет CDiceSvg.php, который я в основном использую в этом примере;

private $iLastThrow = 0;


//Function that throws a dice and returns a random value
private function ThrowDie()
{
    return rand(1,6);   
}

public function ThrowDieEnhanced()
{
    $this->iLastThrow = 0;
    $this->iLastThrow = $this->ThrowDie();
    return $this->iLastThrow;
}
    public function GetLastThrow()
{
    return $this->iLastThrow;
}

Я все еще новичок во всем этом кодировании на языке PHP и не очень знаком с SESSION, но, на мой взгляд, логика этой "основы"- для yahtzee/ кода должна быть достаточной, не имею ни малейшего представления, что происходит не так:/ Пожалуйста, Помогите! Застрял в этой проблеме более 4 дней...

Говоря метафорически, я так сильно ударился головой о стены, что это уже не было узнаваемо, я потянулся за волосы, чтобы облысеть, и начал карабкаться по стенам. Как бы я ни разбирался в коде, ничего не приходит в голову:/ - Другими словами, отчаянно нужно просвещение:)

Спасибо заранее и кстати. Я открыт для предложений, если есть лучшие способы делать то, что я пытаюсь сделать.

1 ответ

Кто -то поправит меня, если я ошибаюсь, но я не уверен, что ++ оператор аккумулятора возможен с $_GET переменные. где у вас есть:

$_GET['roundcounter']++;
$throwCounter = $_GET['roundcounter'];

.
.
.

if($_GET['roundcounter'] == 2)
{
    ...
}

Я думаю, что вы должны сделать что-то вроде:

$throwCounter = $_GET['roundcounter'];
$throwCounter++;

.
.
.

if($throwCounter == 2)
{
    ...
}
Другие вопросы по тегам