php战舰游戏不工作

时间:2009-11-16 12:20:35

标签: php

好的,所以我有这个部分工作的游戏,我知道解决方案在游戏方面应该很简单,但是对于一个菜鸟来说没有什么是简单的,所以在这里,我要求帮助,作为一个菜鸟,我是什么做错了,我认为这是我设置复选框的方式,但我需要其他的眼睛,谢谢。

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" />
<table border="1" align="center" />
<?php
$fire = $_REQUEST["fire"];
$variable = $_REQUEST["variable"];
$step = $_REQUEST["step"];
$i = $_REQUEST["i"];
$j = $_REQUEST["j"];

if(isset($_POST['$i$j']))
{ 
echo 'checked';
}

//first there will be script that randomly generate 5 ships for both users

$step = $_POST['step'];
//4 steps of the game
if ($step > 3) 
{
    $step = 1;
} 
else 
{
    $step += 1;
}//end if
//step 1, first player 
if ($step == 1) 
{
    echo "Player 1";
 // Loop through the alphabet from a to j and stop before k on this for loop
    for ($i = a; $i < k; $i++)
 {
 // Print out the table with the letters from a to j using the variable $i
     echo "<tr><td width='20' align='right'>$i</td>";
  // Loop through the numbers for $j using numbers from 1 to less than 11 which is 10;
       for ($j = 1; $j < 11; $j++)
    {

    echo "<td><input type='submit' value='fire' name='$i$j'></td>";
       } 
    // end for loop
     echo "</tr>";
    } 
 // end for loop
    echo "<tr><td></td>";

 for ($j = 1; $j < 11; $j++)
 {

     echo "<td>$j</td>";
    }
    echo "</tr></table>";
    //step 2 result of first player fire
} 

else if($step == 2)
 {

    echo "Result 1";
        for ($i = a; $i < k; $i++)
  {

     echo "<tr><td width='20' align='right'>$i</td>";
       for ($j = 1; $j < 11; $j++){
      //<input type="checkbox" name="state[]" value="NE">
         echo "<td><input type='checkbox' type='submit' checked='checked' name='$i$j'></td>";
       } // end for loop
     echo "</tr>";
    } // end for loop
    echo "<tr><td></td>";
    for ($j = 1; $j < 11; $j++){
     echo "<td>$j</td>";
    }
    echo "</tr></table><br><input type='submit' name='' value='Player 2 Turn'>";
    //step 3 second player fireing
} else if($step == 3) {
    echo "Player 2";
    for ($i = a; $i < k; $i++){
     echo "<tr><td width='20' align='right'>$i</td>";
       for ($j = 1; $j < 11; $j++){
         echo "<td><input type='submit' value='fire' name='$i$j'></td>";
       } // end for loop
     echo "</tr>";
    } // end for loop
    echo "<tr><td></td>";
    for ($j = 1; $j < 11; $j++){
     echo "<td>$j</td>";
    }
    echo "</tr></table>";
    //step 4 result of second player fire
} else {
    echo "Result 2 ";
    for ($i = a; $i < k; $i++){
     echo "<tr><td width='20' align='right'>$i</td>";
       for ($j = 1; $j < 11; $j++){
         echo "<td><input type='checkbox' checked='checked' disabled='disabled' name='$i$j'></td>";
       } // end for loop
     echo "</tr>";
    } // end for loop
    echo "<tr><td></td>";
    for ($j = 1; $j < 11; $j++){
     echo "<td>$j</td>";
    }
    echo "</tr></table><br><input type='submit' name='' value='Player 1 Turn'>";
}//end if
for ($j = 1; $j < 11; $j++){
       if ($checked){
         echo "<td><input type='checkbox' checked='checked' name='variable'></td>";
        } else {
         echo "<td><input type='checkbox' name='variable'></td>";
        }
       }  

?>

<input type="hidden" name="step" value="<?php echo "$step"; ?>"
</form>
</center>
</html>  

3 个答案:

答案 0 :(得分:2)

我看错了几件事:

  • echo "<td><input type='checkbox' type='submit' checked='checked' name='$i$j'></td>";有两个类型属性。
  • <input type="hidden" name="step" value="<?php echo "$step"; ?>"未关闭输入标记。
  • 您没有关闭桌面广告代码。

尝试通过online html validation service运行您的网页,或使用firefox validation addon验证网页并修复html中的错误。

另一个问题是您没有验证用户的所有输入。即。您的$_REQUEST数据。这可能导致Cross-site scripting并且可能对用户造成危险。虽然在这个例子中这只是微不足道的,但用户输入验证是一个很好的做法,可以适应所有情况。

答案 1 :(得分:0)

我认为它可以帮助您完成代码和调试,将主要的php从html中分离出来。

你的html中间有大块的php,这使你很难看到你可能遇到问题的地方。它也更容易不回显html代码,但将其写为html,然后从需要的变量中删除php。

例如:

这有点凌乱

<?php
echo "Result 2 ";
    for ($i = a; $i < k; $i++){
     echo "<tr><td width='20' align='right'>$i</td>";
       for ($j = 1; $j < 11; $j++){
         echo "<td><input type='checkbox' checked='checked' disabled='disabled' name='$i$j'></td>";
       } // end for loop
     echo "</tr>";
    } // end for loop
    echo "<tr><td></td>";
    for ($j = 1; $j < 11; $j++){
     echo "<td>$j</td>";
    }
    echo "</tr></table><br><input type='submit' name='' value='Player 1 Turn'>";
 ?>

虽然这有点整洁。

<?php
echo "Result 2 ";
    for ($i = a; $i < k; $i++){
?>

<tr>
    <td width='20' align='right'><?php echo $i; ?></td>";

    <?php
       for ($j = 1; $j < 11; $j++){
    ?>

    <td><input type='checkbox' checked='checked' disabled='disabled' name='<?php echo $i$j; ?>' /></td>

    <?php
       } // end for loop
    ?>

</tr>

    <?php
    } // end for loop
    ?>

    <tr>
        <td></td>

        <?php
        for ($j = 1; $j < 11; $j++){
        ?>

        <td><?php echo $j; ?></td>

        <?php
        }
        ?>

    </tr>
</table>
<br />
<input type='submit' name='' value='Player 1 Turn' />

这使得它看起来更像代码,但更多的是线间距。由于你有很多for语句,它没有多大帮助,但是如果你使用带有标记突出显示的编码程序或类似的东西,你将更有可能至少找到html错误它可以帮助你的PHP更具可读性。

不回显html代码也释放了在html中使用单引号或双引号。

答案 2 :(得分:0)

我认为您可以创建一个php方法,该方法可以为您创建单元格,然后调用它,而不是像您那样将所有内容放在一起,这在其中很难阅读和理解。

<?php

function createCells(){

        $cells.='';
        for ($i = A; $i < K; $i++){
        $cells.='<tr>
                <td  class="index ng-binding">'.$i.'</td>';
                 for ($j = 1; $j < 11; $j++){
                 $cells.='<td class="gameCell state_0"><input type='checkbox' checked='checked' disabled='disabled' name='.$i.''.$j.'></td>';
                 }
          $cells.='</tr>';
        }

        return $cells;
    }

?>
<table cellpadding="5" cellspacing="5" border="0" id="gameTable">
            <thead>
                <tr><td>&nbsp;</td>
                <td>1</td>
                <td>2</td>
                <td>3</td>
                <td>4</td>
                <td>5</td>
                <td>6</td>
                <td>7</td>
                <td>8</td>
                <td>9</td>
                <td>10</td>
            </tr>
        </thead>
        <tbody>

 <?php echo reateCells(); ?>

    </tbody>
</table>