Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于为什么在PHP游戏中获得分数不起作用的建议_Php_Mysql_If Statement - Fatal编程技术网

关于为什么在PHP游戏中获得分数不起作用的建议

关于为什么在PHP游戏中获得分数不起作用的建议,php,mysql,if-statement,Php,Mysql,If Statement,我现在正在创建一个基于文本的黑手党游戏。不,不是另外一个。我只是为了练习PHP制作了一个。我已经学到了很多,但我遇到了一个问题,我无法在互联网上找到答案,因为我不知道搜索什么,因此我需要你的帮助 我正在做的函数是某种盗窃函数。你可以选择一个选项,然后你将有一个确定的机会,这取决于你的成功排名。如果您成功,您将获得“XP”(经验值)。我会加上钱和计时器,这样你就不能重做了,但这不是问题所在 假设你是“平民”等级,那么如果你成功,你将获得经验值,这是有效的,如果你通过100经验值,你的等级将变为“想

我现在正在创建一个基于文本的黑手党游戏。不,不是另外一个。我只是为了练习PHP制作了一个。我已经学到了很多,但我遇到了一个问题,我无法在互联网上找到答案,因为我不知道搜索什么,因此我需要你的帮助

我正在做的函数是某种盗窃函数。你可以选择一个选项,然后你将有一个确定的机会,这取决于你的成功排名。如果您成功,您将获得“XP”(经验值)。我会加上钱和计时器,这样你就不能重做了,但这不是问题所在

假设你是“平民”等级,那么如果你成功,你将获得经验值,这是有效的,如果你通过100经验值,你的等级将变为“想要的”。现在,如果你是一个想要它将是相同的,虽然这一次你将不得不达到250 XP排名。现在代码就是不起作用了

很明显,我已经创建了MySQL连接和数据库选择,它正在工作。我只是不明白在这里共享的代码中包含这一点的意义

$id  = $row['id'];
$rank   = $row['rank'];
$xp     = $row['xp'];
$theft  = $_POST['option'];
$chance = rand(1,100);

if ($theft == 1) {

    if ($rank == 'Civilian') {

    if ($chance > '60') {
       echo "You made it.";
       mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");

    if ($xp > '100') {
    mysql_query("UPDATE users SET rank = 'Wannabe' WHERE id=$id");
        }

    } else {
        echo 'You did not make it';
    }
}

} else if ($rank == 'Wannabe') {

if ($chance > '50') {
    echo "You made it.";
        mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");

    if ($xp > '250') {
            mysql_query("UPDATE users SET rank = 'Thief' WHERE id=$id");
    }

} else {
        echo 'You did not make it';
    }
}
我完全知道这可能不是最好的编程方式,尽管这可能是我现在能做的最好的方式。在我的代码中不起作用的是什么?还有什么我能让它工作的吗?还有更好的解决方案吗

我真的很感谢你的回复。即使这只是一个线索,这样我就可以进步了


编辑:这些只是表单中第一个选项的前两个等级。您可以进行四种不同的犯罪,即
$盗窃==1
。还有三个。还有大约5个等级。所以我认为这是糟糕的编码。我只是不知道如何才能做得更好。

不直接回答你的问题,而是考虑为上面的逻辑使用一个开关语句。当你添加其他等级时,它会使它不那么混乱

例如:

<?php
$rank = "civillian";

switch ($rank){
    case "wannabe":
        dostuff();
        break;
    case "civillian":
        doOtherStuff();
        break;
}
?>


>P>不直接回答你的问题,但是考虑上面的逻辑使用一个开关语句。当你添加其他等级时,它会使它不那么混乱

例如:

<?php
$rank = "civillian";

switch ($rank){
    case "wannabe":
        dostuff();
        break;
    case "civillian":
        doOtherStuff();
        break;
}
?>

好吧,我马上看到一个问题:

您正在读取当前的XP值:

$xp = $row['xp'];
然后,在成功时,更新DB值:

mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");
但是您随后使用成功前的值来测试XP值

所以你没有考虑新的50分

成功后,使您的$xp=$xp+50

然后将数据库值设置为该值


另外,我100%同意@PiX06——看看
switch
语句,它们是你在这里的朋友!另外,考虑将所有XP更新内容放在一个单独的函数中,并在必要时调用它,因为这个逻辑只是被反复重复。每当你看到你多次输入相同的代码时,就是时候寻找重构的方法了。

好吧,我马上看到一个问题:

您正在读取当前的XP值:

$xp = $row['xp'];
然后,在成功时,更新DB值:

mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");
但是您随后使用成功前的值来测试XP值

所以你没有考虑新的50分

成功后,使您的$xp=$xp+50

然后将数据库值设置为该值


另外,我100%同意@PiX06——看看
switch
语句,它们是你在这里的朋友!另外,考虑将所有XP更新内容放在一个单独的函数中,并在必要时调用它,因为这个逻辑只是被反复重复。每当您看到您多次输入相同的代码时,就是时候寻找重构的方法了。

PHP for games。有意思,到底是什么不起作用?是否将xp添加到数据库中?您正在与$chance变量进行比较,该变量是rand()的结果。在与字符串进行比较时,rand()返回一个整数:
$chance>'50'
应该是
$chance>50
。总的来说,您似乎太依赖PHP的类型转换了。@MikeB是的,但很大程度上是一个编码风格的问题,考虑到PHP的类型模型,因为它仍将按预期运行:我知道您只是在学习,但您真的应该开始学习使用面向对象的PHP。它正是为这种事情而做的。您还可以学习使用
mysqli
PDO
来使用MySQL,而不是不推荐使用的
MySQL.*
函数。最后,在使用数据库时,请确保实际检查了查询结果并处理了错误。这将使调试游戏代码1000x.PHP变得更容易。有意思,到底是什么不起作用?是否将xp添加到数据库中?您正在与$chance变量进行比较,该变量是rand()的结果。在与字符串进行比较时,rand()返回一个整数:
$chance>'50'
应该是
$chance>50
。总的来说,您似乎太依赖PHP的类型转换了。@MikeB是的,但很大程度上是一个编码风格的问题,考虑到PHP的类型模型,因为它仍将按预期运行:我知道您只是在学习,但您真的应该开始学习使用面向对象的PHP。它正是为这种事情而做的。您还可以学习使用
mysqli
PDO
来使用MySQL,而不是不推荐使用的
MySQL.*
函数。最后,在使用数据库时,请确保实际检查了查询结果并处理了错误。这将使调试代码1000x变得更容易。谢谢,我知道我忘记了一些简单的事情。但我仍然不知道为什么我的代码不能工作。不过,如果我把它换成case的话,它可能就行了。谢谢,我知道我忘记了一些简单的事情。但我仍然不知道为什么我的代码不能工作。不过,如果我把它换成case的话,可能就行了。谢谢你,伙计。我来看看:)谢谢你,伙计。我会检查这个:)