0

私は基本的な格闘ゲームを書いており、攻撃ごとに敵の健康から攻撃の量を差し引き、敵の現在の健康を出力するようにしようとしています。ただし、スクリプトを 1 回実行してループすると、ヘルスは元の量にリセットされます。現在のヘルスで敵のヘルスを辞任するにはどうすればよいですか?

スクリプトは次のとおりです。

import random

while True:
    HEALTH = 20
    ENEMY_HEALTH = 20

    def punch():
        mylist = (xrange(0,3))
        x = random.choice(mylist)
        if x == 3:
            print"your hit was very effective enemy lost 3 hp"
            print("Enemy Health is" ENEMY_HEALTH - x)
        if x == 2:
            print "Your punch was effective enemy lost 2 hp"
            print("Enemy Health is" ENEMY_HEALTH - x)
        if x == 1:
            print "enemy lost 1 point"
            print("Enemy Health is" ENEMY_HEALTH - x)

    def kick():
        mylist = (xrange(0,5))
        x = random.choice(mylist)
        if x > 3:
            "%d" % x
            print"your kick was very effective enemy lost %d hp"
            print("Enemy Health is", ENEMY_HEALTH - x)
        if x > 1 < 3:
            "%d" % x
            print "Your kick was effective enemy lost %d hp"
            print("Enemy Health is" ENEMY_HEAlTH - x)
        if x == 1:
            print "enemy lost 1 point"
            print("Enemy Health is" ENEMY_HEALTH - x)

    def attackChoice(c):
        if c == "punch":
            punch()
        if c == "kick":
            kick()

    c = raw_input("Choice Attack\nKick Or Punch: ")
    attackChoice(c)

印刷したい:

choose attack
kick or punch:kick
enemy lost 3 hp
enemy's heath is 17
choose attack
kick or punch:punch
enemy lost 1 hp
enemy's health is 16
4

2 に答える 2

2

各ループステップで HEALTH と ENEMY_health をリセットします。次のように、ループの外側でそれらを初期化し、ループの内側で操作を行う必要があります。

HEALTH = 20
ENEMY_HEALTH = 20    
while True:
    #your code
    ENEMY_HEALTH = ENEMY_HEALTH - x

また、スニペットの例に示すように、新しい値を明示的に設定する必要があります。

また、Python スタイル ガイドをお読みください: http://www.python.org/dev/peps/pep-0008/

HEALTH のようなすべての大文字の名前は定数に使用されますが、定数を意味したくないので、小文字を使用してください...

于 2013-04-19T22:17:22.017 に答える
1
  • Blender が指摘したように、ENEMY_HEALTH の値を変更するのではなく、x を差し引いて、その値を代入せずに出力するだけです。
  • 最初の割り当てを while ループの外に移動します。
  • キックコードに余分な文字列があります
  • リストを作成して選択する代わりに randint を使用する

多分好き:

import random
health = 20
enemy_health = 20

def punch():
    global enemy_health
    x = random.randint(1,3)
    enemy_health -= x
    if x == 3:
        print"your hit was very effective enemy lost 3 hp"
    if x == 2:
        print "Your punch was effective enemy lost 2 hp"
    if x == 1:
        print "enemy lost 1 point"
    print "Enemy Health is", enemy_health

def kick():
    global enemy_health
    x = random.randint(1,5)
    enemy_health -= x
    if x > 3:
        print "your kick was very effective enemy lost %d hp" % x
    if x > 1 < 3:
        print "Your kick was effective enemy lost %d hp" % x
    if x == 1:
        print "enemy lost 1 point"
    print "Enemy Health is", enemy_health

def attackChoice(c):
    if c == "punch":
        punch()
    if c == "kick":
        kick()

while True:
    c = raw_input("Choice Attack\nKick Or Punch: ")
    attackChoice(c)
于 2013-04-19T22:20:36.633 に答える