0

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

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

假设您是“平民”级别,那么您将获得 XP,如果您成功了,这很有效,如果您超过 100 XP,您的级别将变为“Wannabe”。现在,如果你是一个崇拜者,它会是一样的,虽然这一次你必须达到 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';
    }
}

我完全意识到这可能不是最好的编程方式,尽管这可能是我现在能做的最好的。什么在我的代码中不起作用?无论如何我可以让它工作吗?有没有更好的解决方案?

我真的很感谢任何回复。即使它只是某种领先,所以我可以进步。

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

4

2 回答 2

2

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

您正在阅读当前的 XP 值:

$xp = $row['xp'];

然后,成功后,更新 DB 值:

mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");

但是您随后会使用成功前的值测试 XP 值的进度

if ($xp > '100')...

所以你没有考虑新的50分......

成功后,让你的 $xp = $xp + 50

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

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

于 2013-09-26T17:47:29.367 回答
1

不直接回答您的问题,但考虑为上述逻辑使用 switch 语句。当您添加其他等级时,它会减少混乱。

例如:

<?php
$rank = "civillian";

switch ($rank){
    case "wannabe":
        dostuff();
        break;
    case "civillian":
        doOtherStuff();
        break;
}
?>
于 2013-09-26T17:39:15.077 回答