2013-10-14 31 views
0

我試圖設計一個PHP瀏覽器遊戲只是爲了好玩和練習。我目前正在研究戰鬥劇本,並且遇到了無限循環。我無法弄清楚它發生的原因。不管怎麼說,這裏是代碼:無盡的瀏覽器遊戲while循環

<?php 
session_start(); 

// Script PHP pentru simularea luptelor single player 

/* 
    1 = Magic 
    2 = Attack 
    3 = Defence 
    5 = Maximum HP 
    6 = Current HP 
    4 = Gold coins 
    17 = Experience 
*/ 

require_once("config.php"); 

$username = $_SESSION['username']; 
$query = ("SELECT id FROM users WHERE username = '$username'"); 
$user_id = mysql_query($query) or die (mysql_error()); 

// Momentan monstrii sunt alesi in mod aleatoriu 
$query = ("SELECT id FROM monsters ORDER BY RAND() LIMIT 1"); 
$monster_id = mysql_query($query) or die (mysql_error()); 

$query = ("SELECT value FROM user_stats WHERE stat_id = 6 AND user_id = '$user_id'"); 
$player_hp = mysql_query($query) or die (mysql_error()); 

$query = ("SELECT value FROM monster_stats WHERE stat_id = 5 AND monster_id = '$monster_id'"); 
$monster_hp = mysql_query($query) or die (mysql_error()); 

if ($player_hp <= 0) 
{ 
    $query = ("SELECT value FROM user_stats WHERE stat_id = 4 AND user_id = '$user_id'"); 
    $player_gc = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM monster_stats WHERE stat_id = 4 AND user_id = '$monster_id'"); 
    $monster_gc = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM user_stats WHERE stat_id = 17 AND user_id = '$monster_id'"); 
    $player_exp = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM monster_stats WHERE stat_id = 17 AND monster_id = '$monster_id'"); 
    $monster_exp = mysql_query($query) or die (mysql_error()); 

    $player_gc = $player_gc + $monster_gc; 
    $player_exp = $player_exp + $monster_exp; 

    // item drop trebuie facut 

    echo "Congratulations! You won the battle and you gained " . $monster_gc . " gold coins and " . $monster_exp . " experience points."; 
} 
elseif ($monster_hp <= 0) 
{ 
    echo "You lost the battle."; 
} 
else 
{ 
    $query = ("SELECT value FROM user_stats WHERE stat_id = 1 AND user_id = '$user_id'"); 
    $player_magic = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM monster_stats WHERE stat_id = 1 AND monster_id = '$monster_id'"); 
    $monster_magic = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM user_stats WHERE stat_id = 2 AND user_id = '$user_id'"); 
    $player_attack = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM monster_stats WHERE stat_id = 2 AND monster_id = '$monster_id'"); 
    $monster_attack = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM user_stats WHERE stat_id = 3 AND user_id = '$user_id'"); 
    $player_defence = mysql_query($query) or die (mysql_error()); 

    $query = ("SELECT value FROM monster_stats WHERE stat_id = 3 AND monster_id = '$monster_id'"); 
    $monster_defence = mysql_query($query) or die (mysql_error()); 

    $turn = rand(0,1); 
    while (($player_hp > 0) && ($monster_hp > 0) &&($turn < 6)) 
    { 
     $turn++; 

     // Player turn 
     if ($turn % 2 == 0) 
     { 
      echo $monster_hp . "<br>"; 
      $monster_hp -= ($player_attack + $player_magic/2 - $monster_defence - $monster_magic/2); 
      var_dump ($monster_hp); 
     } 
     // Monster turn 
     else 
     { 
      echo $player_hp . "<br>"; 
      $player_hp -= ($monster_attack + $monster_magic/2 - $player_defence - $player_magic/2); 
      var_dump ($player_hp); 
     } 
    } 
} 

>

的,而在別人打倒。我知道MySQL是折舊的。謝謝!

+4

PS:遊戲會很無聊! :D – SporeDev

+4

嘗試更換$ player_hp - with $ player_hp - =也許?和monster_hp一樣... – Maximus2012

+1

不僅它很無聊,它還有SQL注入漏洞,你可以駕駛卡車通過。 – geoffspear

回答

4

你在這之後(操作員是不是-=-):

// Player turn 
if ($turn % 2 == 0) 
{ 
    $monster_hp -= ($player_attack + $player_magic/2 - $monster_defence - $monster_magic/2); 
} 
// Monster turn 
else 
{ 
    $player_hp -= ($monster_attack + $monster_magic/2 - $player_defence - $player_magic/2); 
} 

CNC中,如果你的變量是Resource id #5等,這意味着你沒有正確地從PHP重試你的MySQL數據。試試這個:

$query = ("SELECT value FROM user_stats WHERE stat_id = 3 AND user_id = '$user_id'"); 
$player_defence = mysql_query($query) or die (mysql_error()); 
$player_defence = mysql_fetch_assoc($player_defence); 
$player_defence = $player_defence['value']; 

你需要爲你得到的每個查詢結果(或類似的)做這件事。它將您的查詢結果轉換爲關聯數組,然後轉換爲您需要的變量。

手冊:http://php.net/manual/en/function.mysql-fetch-assoc.php

+0

這是問題之一。然而,循環仍然是無止境的。 :( – SporeDev

+1

將手動限制放到你說的50的while循環中,然後'var_dump'每個循環上的每個變量來查看邏輯中發生了什麼 –

+0

@SporeDev:在'while循環中添加以下語句:'var_dump ($ player_hp> 0)&&($ monster_hp> 0))' - 它輸出了什麼? –

2

在while循環,你永遠不會真正改變怪物和玩家的惠普:

$monster_hp - ($player_attack + $player_magic/2 - $monster_defence - $monster_magic/2); 

您的意思是使用類似這個:

$monster_hp -= ($player_attack + $player_magic/2 - $monster_defence - $monster_magic/2); 

-=運營商真的是一種快速編程方式equals itself minus...

// The following lines are identical in logic: 
$var-=1 
$var=$var-1; 
+0

偉大的提示!非常感謝你! :) – SporeDev