0

現在、テキスト ベースのマフィア ゲームを作成しています。いいえ、別のものではありません。PHPを練習する目的で作成しています。すでに多くのことを学んでいますが、何を検索すればよいかわからず、インターネットで答えを見つけることができない問題に遭遇したため、あなたの助けが必要です.

私が作っている機能は、ある種の窃盗機能です。オプションを選択すると、成功したランクに応じて設定されたチャンスが得られます。成功すると「XP」(経験値)を獲得できます。お金とタイマーを追加して、やり直しができないようにしますが、それは問題ではありません。

あなたがランク「Civilian」であるとしましょう。それを達成すると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';
    }
}

これが、これをプログラムする最良の方法ではない可能性があることは十分承知していますが、おそらくこれが今できる最善の方法です。私のコードで機能しないのは何ですか? とにかく私はそれを機能させることができますか?そして、より良い解決策はありますか?

どんな回答でも本当に感謝しています。たとえそれがある種のリードであっても、私は前進することができます.

編集:これらは、フォームの最初のオプションの最初の 2 つのランクです。実行できる犯罪は 4 つあります$theft == 1。あと3つあります。ランクも5くらいあります。したがって、これは悪いコーディングだと思います。どうすればもっとうまくやれるのかわからないだけです。

4

2 に答える 2

2

さて、私がすぐに目にする1つの問題:

現在の XP 値を読み込んでいます:

$xp = $row['xp'];

次に、成功すると、DB 値を更新します。

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

ただし、成功前の値を使用して、XP 値の進行状況をテストしています。

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

つまり、新しい 50 ポイントを考慮に入れていません...

成功すると、あなたの $xp = $xp + 50 になります

次に、データベースの値をそれに設定します。

また、私は @PiX06 に 100% 同意します -- 声明をチェックしてswitchください。彼らはあなたの友人です! また、すべての XP 更新プログラムを別の関数に入れ、必要に応じて呼び出すことを検討してください。そのロジックは何度も繰り返されているだけだからです。同じコードを何度も入力していることに気付いたときはいつでも、リファクタリングの方法を探すときです。

于 2013-09-26T17:47:29.367 に答える