2017-01-11 11 views
1

私は、テキストベースのポケモンゲームを作成するためにpythonを使用しています。しかし、敵は1ターンで2回の攻撃を行い、毎回同じであるが、ランダムでなければならないにもかかわらず、バグがポップアップし続ける。時のレイアウトの 謝罪ランダム処理が動作しない

CODE

import math, random 
print("-------------POKEMON BROWN-------------") 
print("welcome to pokemon brown") 
print("choose a pokemon") 
print("Charmander, Squirtle, Bulbasaur") 
pokemon_1 = input() 
pokemon_1 = (pokemon_1.lower()) 

print("ahh " + pokemon_1 + " a good choice") 

enemy = 1 

print("Ok lets battle!") 

battle = 1 
hp = 20 
mp = 10 
enemyhp = 20 
enemymp = 10 
print("----Battle Start----") 
print("") 
battle = 1 
while True: 
    turn = 1 
    player_turn = 1 
    if(pokemon_1 == "squirtle"): 
     player_turn = 1 
     print("----Your turn----") 
     print("") 
     print("Pokemon:" + pokemon_1 + "/HP = " + str(hp) + "/MP = " + str(mp)) 
     print("Tackle(1 DMG), Tail Whip(2 DMG, 2MP), Water Gun(5 DMG, 10 MP), Back") 
     move = input() 
     move = (move.lower()) 
     if(move == "tackle"): 
      print("Your Squirtle uses tackle and deals 1 DMG") 
      enemyhp -= 1 
      turn = 1 
     if(move == "tail whip"): 
      if(mp >= 2): 
       print("Your Squirtle uses tail whip and deals 2 DMG") 
       enemyhp -= 2 
       mp -= 2 
       turn = 1 
      else: 
       print("not enough MP") 

     if (move == "water gun"): 
      if(mp >= 10): 
       print("Your Squirtle uses water gun and deals 5 DMG") 
       enemyhp -= 5 
       mp -= 10 
       turn = 1 
      else: 
       print("not enough MP") 

    if(pokemon_1 == "charmander"): 
     player_turn = 1 
     print("") 
     print("----Your turn----")  
     print("Pokemon: " + pokemon_1 + "/HP = " + str(hp) + "/MP = " + str(mp)) 
     print("Scratch(2 DMG), Ember(4 DMG, 5MP), Back") 
     move = input() 
     move = (move.lower()) 
     if(move == "scratch"): 
      print("Your Charmander uses scratch and deals 2 DMG") 
      enemyhp -= 2 
      turn = 1 
     if(move == "ember"): 
      if(mp >= 2): 
       print("Your Charmander uses Ember and deals 4 DMG") 
       enemyhp -= 4 
       mp -= 5 
       turn = 1 
      else: 
       print("not enough MP") 

    if(pokemon_1 == "bulbasaur"): 
     player_turn = 1 
     print("") 
     print("----Your turn----") 

     print("Pokemon: " + pokemon_1 + "/HP = " + str(hp) + "/MP = " + str(mp)) 
     print("Tackle(1 DMG), Vine whip(5 DMG, 5MP)") 
     move = input() 
     move = (move.lower()) 
     if(move == "scratch"): 
      print("Your Bulbasuar uses Tackle and deals 2 DMG") 
      enemyhp -= 2 
      turn = 1 
     if(move == "tail whip"): 
      if(mp >= 2): 
       print("Your Bulbasaur uses Vine Whip and deals 5 DMG") 
       enemyhp -= 4 
       mp -= 5 
       turn = 1 
      else: 
       print("not enough MP") 

    if(turn == 1): 
     if(enemy == 1): 
      print("") 
      print("----Enemy's turn----") 
      print("Enemy Pokemon: Squirtle/HP = " + str(enemyhp) + "/MP = " + str(enemymp)) 


      if(enemymp == 10): 
       enemy_move = random.randint(1,6) 

      if(enemymp < 10 and enemymp >= 2): 
       enemy_move = random.randint(1,5) 

      if(enemymp < 2): 
       enemy_move = 0 

      if(enemy_move == 1 or 2 or 3): 
       print("Enemy Squirtle uses tackle and deals 1 DMG") 
       hp -= 1 
       turn = 0 
      if(enemy_move == 4 or 5): 
       if(mp >= 2): 
        print("Enemy Squirtle uses tail whip and deals 2 DMG") 
        hp -= 2 
        enemymp -= 2 
        turn = 0 
       else: 
        print("not enough MP") 

      if (enemy_move == 6): 
       if(mp >= 10): 
        print("Enemy Squirtle uses water gun and deals 5 DMG") 
        hp -= 5 
        enemymp -= 10 
        turn = 0 
       else: 
        print("not enough MP") 

SHELL

-------------POKEMON BROWN------------- 
welcome to pokemon brown 
choose a pokemon 
Charmander, Squirtle, Bulbasaur 
charmander 
ahh charmander a good choice 
Ok lets battle! 
----Battle Start---- 


----Your turn---- 
Pokemon: charmander/HP = 20/MP = 10 
Scratch(2 DMG), Ember(4 DMG, 5MP), Back 
scratch 
Your Charmander uses scratch and deals 2 DMG 

----Enemy's turn---- 
Enemy Pokemon: Squirtle/HP = 18/MP = 10 
Enemy Squirtle uses tackle and deals 1 DMG 
Enemy Squirtle uses tail whip and deals 2 DMG 

----Your turn---- 
Pokemon: charmander/HP = 17/MP = 10 
Scratch(2 DMG), Ember(4 DMG, 5MP), Back   
+2

[あなたのランダムシードなければなりません](http://stackoverflow.com/questions/22639587/random-seed-what-does-it-do) – Faibbus

答えて

0

if文のような:

... 
      if(enemy_move == 1 or 2 or 3): 
... 
      if(enemy_move == 4 or 5): 
... 
      if (enemy_move == 6): 
... 

最初の2つだけが常に一緒に実行されることに注意してください。なぜなら、ifが評価されると、[敵の移動が1に等しい場合]、[2]または[3]の場合、2と3がenemy_move == 2、enemy_move == 3、 'enemy_move =='を指定しないと、if演算子で常にTRUEと評価され、最後の文字は ... if(enemy_move == 6): ... Don一緒に執行されることはありません。

0

あなたがランダムに使用する場合、あなたは常にユニークな種子を使用する必要があり、あなたはあなたのプログラムがそう

random.seed(...) 

何種子のように起動したときにそうでない場合に生成番号が常に同じ

は一度あなたのシードを設定されます。それが変わる限り、あなたは本当に重要ではありません。ほとんどの人が使用する最も良い例は、現在のタイムスタンプです。 enemy_moveが1に等しい場合

time.time() 

希望は、これは

1
if(enemy_move == 1 or 2 or 3): 

このチェックを助け、それが偽と評価された場合2が真の値、それは常にあるかどうかをチェックします。

if enemy_move in (1, 2, 3): 

それとも、両面範囲チェックを使用することができます:

if 1 <= enemy_move < 4: 

これは、Pythonで、その値は次の3回の比較を必要とする、またはあなたがinを使用できる3つのいずれかであるかどうかを確認するにはif条件のまわりに括弧を入れる必要はありません。

2

主な問題は、orを正しく使用していないことです。

if(enemy_move == 1 or 2 or 3): 
if(enemy_move == 4 or 5): 

毎回Trueと評価されます。論理的に0がFalseのブール値を持ち、他の数はだからあなたの条件として終わるTrue

>>> bool(0) 
False 
>>> bool(1) 
True 

の価値を持っているためです。

if (enemy_move == 1 or True or True): 

正しく動作させるには、各値を比較する必要があります。

if(enemy_move == 1 or enemy_move == 2 or enemy_move == 3) 

これは、さまざまな方法でクリーンアップすることができます。あなたが各1を毎回チェックしたい場合を除き

if enemy_move in (1, 2, 3): 
if 1 <= enemy_move <= 3: 

は今、あなたの他の問題は、あなたが最初から順番に、各1をチェックしますif/elif

if enemy_move in (1, 2, 3): 
    ... 
elif enemy_move in (4, 5): 
    ... 
elif enemy_move == 6: 
    ... 
else: 
    ... 

これを使用する必要があります今、複数のifのステートメントを有するものが挙げられます最後に、評価がFalseになると、条件が満たされると次の値に移動します。True。それから、残りのことはしません。

0

文が は、if文でこれを行わないと、私は思う問題はである:あなたが何をしたいか

if (enemy_move == 2 or 3 or 4): 

は以下の通りです:

if (enemy_move == 2 or enemy_move == 3 or enemy_move =-- 4) 
関連する問題