我现在正在创建一个基于文本的黑手党游戏。不,不是另一个。我只是为了练习PHP。我已经学到了很多东西,但是我遇到了一个问题,由于我不知道要搜索什么,因此我在互联网上找不到答案,因此我需要您的帮助。
我正在制作的功能是某种盗窃功能。您可以选择一个选项,然后您将有一个设定的机会,具体取决于您的成功等级。如果你成功了,你将获得"经验值"(经验值(。我会添加金钱和计时器,这样您就不能重做它,但这不是问题。
假设你是"平民"的军衔,那么你如果成功了,你将获得经验值,这行得通,如果你超过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 个等级。所以我认为这是糟糕的编码。我只是不知道如何才能做得更好。
好吧,我马上就看到了一个问题:
您正在读取当前的 XP 值:
$xp = $row['xp'];
然后,在成功时,更新数据库值:
mysql_query("UPDATE users SET xp = xp + 50 WHERE id=$id");
但是,您随后使用成功前的值测试XP值的进度
if ($xp > '100')...
所以你没有考虑到新的 50 分......
成功后,让您的$xp = $xp + 50
然后将数据库值设置为该值。
另外,我 100% 同意@PiX06 - 查看switch
声明,他们是你的朋友!另外,考虑将所有XP更新内容放在一个单独的函数中,并在必要时调用它,因为该逻辑只是一遍又一遍地重复。每当您看到多次键入相同的代码时,就该寻找重构的方法了。
不直接回答您的问题,但请考虑对上面的逻辑使用 switch 语句。当您添加其他等级时,它会使其不那么混乱。
例如:
<?php
$rank = "civillian";
switch ($rank){
case "wannabe":
dostuff();
break;
case "civillian":
doOtherStuff();
break;
}
?>