2013-09-26 24 views
0

我现在正在创建一个基于文本的黑手党游戏。不,不是其中之一。我只是为了练习PHP而创建一个。我已经学到了很多东西,但是我遇到了一个问题,在互联网上我找不到答案,因为我不知道要搜索什么,因此我需要您的帮助。关于为什么在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个等级。所以我认为这是不好的编码。我只是不知道我能做得更好。

+0

PHP的游戏。有趣。 – Mark

+1

什么是不工作? xp是否被添加到数据库? – Jason

+1

您正在比较rand()的结果$ chance变量。 rand()返回一个int值,而你正在比较字符串:'$ chance>'50''应该是'$ chance> 50'。总的来说,你似乎太依赖PHP的类型杂耍了。 –

回答

1

不直接回答你的问题,但考虑在你的逻辑上面使用switch语句。当你添加其他行列时,它会减少混乱。

例如:

<?php 
$rank = "civillian"; 

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

谢谢,我知道我已经忘记了那样简单的事情。但我仍然不知道为什么我的代码无法工作。但是,如果我将其与案例切换出来,它可能会正常工作。 –

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更新内容放在一个单独的函数中,并在必要时调用它,因为该逻辑只是反复重复。无论何时您看到您多次输入相同的代码,现在都是寻找重构方式的时候了。

+0

谢谢老兄。我会检查一下:) –