2015-08-26 4 views
2

Мне нужна сессия PHP для хранения переменной $ CurrentPos для местоположения игрока, но по какой-то причине она не работает. Вероятно, потому, что я неправильно реализовал код, но я просто не могу понять это.PHP сеанс игры не работает

<?php 
session_start(); 
include_once 'index.php'; 
$World = simplexml_load_file("gameworld.xml"); 
$_SESSION["CurrentPos"] = 0 ; 
$CurrentPos = $_SESSION["CurrentPos"]; 
print "<br>"; 
printplace(); 
function printplace() { 
    GLOBAL $World, $CurrentPos; 
    $Room = $World->ROOM[$CurrentPos]; 
    $Name = $Room->NAME; 
    $Desc = wordwrap((string)$Room->DESC); 
    print "$Name<br>"; 
    print str_repeat('-', strlen($Name)); 
    print "<br>$Desc<br>"; 
    if ((string)$Room->NORTH != '-') { 
     $index = (int)$Room->NORTH; 
     print "North: {$World->ROOM[$index]->NAME}<br>"; 
    } 
    if ((string)$Room->SOUTH != '-') { 
     $index = (int)$Room->SOUTH; 
     print "South: {$World->ROOM[$index]->NAME}<br>"; 
    } 
    if ((string)$World->ROOM[$CurrentPos]->WEST != '-') { 
     $index = (int)$Room->WEST; 
     print "West: {$World->ROOM[$index]->NAME}<br>"; 
    } 
    if ((string)$World->ROOM[$CurrentPos]->EAST != '-') { 
     $index = (int)$Room->EAST; 
     print "East: {$World->ROOM[$index]->NAME}<br>"; 
    } 
    print "<br>"; 
} 

$input = explode(' ', $input); 
print "<br>"; 
foreach ($input as $command) { 
    switch ($command) { 
     case 'north': 
      if ((string)$World->ROOM[$CurrentPos]->NORTH != '-') { 
       $CurrentPos = (int)$World->ROOM[$CurrentPos]->NORTH; 
       printplace() ; 
      } else { 
       print "You cannot go north!<br>"; 
      } 
      break; 
     case 'south': 
      if ((string)$World->ROOM[$CurrentPos]->SOUTH != '-') { 
       $CurrentPos = (int)$World->ROOM[$CurrentPos]->SOUTH; 
       printplace() ; 
      } else { 
       print "You cannot go south!<br>"; 
      } 
      break; 
     case 'west': 
      if ((string)$World->ROOM[$CurrentPos]->WEST != '-') { 
       $CurrentPos = (int)$World->ROOM[$CurrentPos]->WEST; 
       printplace() ; 
      } else { 
       print "You cannot go west!<br>"; 
      } 
      break; 
     case 'east': 
      if ((string)$World->ROOM[$CurrentPos]->EAST != '-') { 
       $CurrentPos = (int)$World->ROOM[$CurrentPos]->EAST; 
       printplace() ; 
      } else { 
       print "You cannot go east!<br>"; 
      } 
      break; 
     case 'look': 
      printplace() ; 
      break; 
     default: 
      print "not a valid command... <br>"; 
      break; 
    } 
} 
print "<br>Thanks for playing!<br>"; 
?> 

По какой-то причине, моя сессия переменная не может работать - смотреть на my game, чтобы увидеть, что я имею в виду (я не знаю, как это объяснить, я РНР новичку: P).

Любая помощь приветствуется.

+0

Вы сбрасывая сеанс 0 каждый раз, когда этот сценарий называется. – versalle88

+0

Так как бы я только установил его в 0 в первый раз? – dumpong

+0

Вы можете изменить $ _SESSION ["CurrentPos"] = 0; to $ _SESSION ["CurrentPos"] = (isset ($ _ SESSION ['CurrentPos']) $ $ _SESSION ['CurrentPos']: 0); – versalle88

ответ

3

Вам необходимо установить сеанс в текущую позицию внутри корпусов коммутаторов. После каждой строки (к примеру):

$CurrentPos = (int)$World->ROOM[$CurrentPos]->EAST; 

Добавьте эту строку:

$_SESSION['CurrentPos'] = $CurrentPos; 
+0

Большое вам спасибо! Работал как шарм. – dumpong