【问题标题】:How to use for loop in form validation?如何在表单验证中使用 for 循环?
【发布时间】:2015-09-15 13:31:03
【问题描述】:

如何在这个游戏中使用 for 循环?比赛有10个回合。当一名玩家获胜时,他得分+1,直到达到 10 轮,即游戏结束。我还可以问当用户正确输入 2 个字符但拼写错误时使用什么功能?例如,用 ROcc 代替 rock。它会接受用户输入吗?

<html>
<body>
<h1>ROCK PAPER SCISSORS</h1>
<?php

print ('<form action="" method="post">');
print ('<p>Player 1: <input type="text" name="p1" /></p>');
print ('<p>Player 2: <input type="text" name="p2" /></p>');
print ('<input type="submit" name="submit" value="PLAY" />');
print ('</form>');

if (isset($_POST['submit'])) {
    $player1score = 0;
    $player2score = 0;
    $draw = 0;
    $player1 = strtolower($_POST['p1']);
    $player2 = strtolower($_POST['p2']);

    if ($player1 == 'scissors' && $player2 == 'scissors') {
        $draw++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";
    }

    else if ($player1 == 'rock' && $player2 == 'rock') {
        $draw++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";
    }

    else if ($player1 == 'paper' && $player2 == 'paper') {
        $draw++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";
    }

    else if ($player1 =='rock' && $player2 =='scissors') {
        $player1score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";
    }

    else if ($player1 == 'rock' && $player2 =='paper') {
        $player2score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";

    }

    else if($player1 == 'scissors' && $player2 == 'rock') {

        $player2score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";

    }

    else if ($player1 =='scissors' && $player2 =='paper') {
        $player1score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";

    }
    else if ($player1 =='paper' && $player2 =='rock') {
        $player1score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";

    }

    else if ($player1 =='paper' && $player2 == 'scissors') {
        $player2score++;
        print "Player 1: $player1score<br>";
        print "Player 2: $player2score<br>";
        print "DRAW: $draw";
    }
}
?>
</html>
</body>

【问题讨论】:

  • 你试一试,如果你不能让它工作,请告诉我们。我们不是为你写的。
  • 大量重复代码...
  • 一些提示:而不是依赖用户输入,使用

标签: php loops for-loop


【解决方案1】:

下次,请考虑发布一些代码,向我们表明您至少尝试过解决问题。

在这种情况下,您可以创建一个数组,其顺序为:Rock > scissors > paper。

$orderArray = array("rock", "scissors", "paper");

现在,对于每个玩家,我们必须遍历数组:

$player1Answer = 0;
$player2Answer = 0;
for ($i = 0; $i < count($orderArray); $i++) {
    if ($player1 == $orderArray[i])
       $player1Answer = i;
    if ($player2 == $orderArray[i])
       $player2Answer = i;
}

由于我们只有 3 个元素,因此不会对优化造成任何问题。 现在我们必须检查获胜条件。这只是一种方法,我相信还有更好的方法。但它会做:

if ($player1Answer == $player2Answer)
    // DRAW
else if ($player1Answer == $player2Answer + 1 || ($player1Answer == 2 && $player2Answer == 0)
    // 1 wins
else
    // 2 wins

现在,对于您的第二个问题,请下次将其发布在一个单独的问题中,或者在网站上查看,它已得到解答:

startsWith() and endsWith() functions in PHP

该代码尚未在实时服务器上进行测试,因此可能存在一些较小的错误(大写等)。

【讨论】:

    猜你喜欢
    • 2023-01-19
    • 1970-01-01
    • 2020-02-09
    • 2021-07-24
    • 2020-10-14
    • 2016-06-02
    • 2020-08-26
    • 2016-08-23
    • 1970-01-01
    相关资源
    最近更新 更多