Python 基于回合的作战系统开发问题

Python 基于回合的作战系统开发问题,python,python-3.x,Python,Python 3.x,所以,我最近开始编写代码,目前正在开发一个基于回合的小型RPG,但我在战斗系统中遇到了一些实际问题。我还在学习,我从来没有想过在这里提问。无论如何,在正确地完成了很多事情之后,我遇到了这样一个问题:由于某种原因,使用防御命令会提高玩家的生命值。代码如下: import random import sys import os class Entity(): def __init__(self, hp, atk, dif): self.hp = hp self

所以,我最近开始编写代码,目前正在开发一个基于回合的小型RPG,但我在战斗系统中遇到了一些实际问题。我还在学习,我从来没有想过在这里提问。无论如何,在正确地完成了很多事情之后,我遇到了这样一个问题:由于某种原因,使用防御命令会提高玩家的生命值。代码如下:

import random
import sys
import os
class Entity():
    def __init__(self, hp, atk, dif):
        self.hp = hp
        self.atk = atk
        self.dif = dif

class Battle():

    def Attack(self, attacker, defender):
        damage = attacker.atk - defender.dif
        defender.hp -= damage

    def Combat(self, player, enemy):
        turns = []
        while True:
            while len(turns) < 5:
                turn = random.randint(1, 2)
                if turn == 1:
                    turns.append("player")
                else:
                    turns.append("enemy")

            for current_turn in turns:
                print(player.hp, enemy.hp)
                if current_turn == "player":
                    print(f"TURNS: \n{current_turn}\n{turns[turns.index(current_turn)+ 1:]}")
                    choice = input("1. Attack\n2. Defend\n")
                    if choice == "1":
                        self.Attack(player, enemy)
                        player.dif = 20
                    elif choice == "2":
                        player.dif *= 2
                    else:
                        print("Lost your chance!")
                elif current_turn == "enemy":
                    print("Enemy turn!")
                    print(f"Next turns are: {turns}")
                    enemy_choice = random.randint(1, 2)
                    if enemy_choice == 2:
                        print("He attacks you!")
                        self.Attack(enemy, player)
                        enemy.dif = 0
                    else:
                        print("He defends himself.")
                        enemy.dif = 10
                os.system("clear")
                turns.pop(0)
                if player.hp <= 0:
                    print("You died!")
                    sys.exit(0)
                elif enemy.hp <= 0:
                    print("YOU WON!")
                    sys.exit(0)
                break




charachter = Entity(100, 15, 15)
boss = Entity(300, 40, 0)
testbattle = Battle()
testbattle.Combat(charachter, boss)
随机导入
导入系统
导入操作系统
类实体():
定义初始(自我、hp、atk、dif):
self.hp=hp
self.atk=atk
self.dif=dif
阶级斗争():
def攻击(自身、攻击者、防御者):
伤害=攻击者.atk-防御者.dif
defender.hp-=伤害
def战斗(自身、玩家、敌人):
圈数=[]
尽管如此:
当len(圈数)<5时:
turn=random.randint(1,2)
如果匝数=1:
回合。附加(“玩家”)
其他:
转身。追加(“敌人”)
对于当前_匝数:
打印(player.hp,敌方.hp)
如果当前回合==“玩家”:
打印(f“TURNS:\n{current\u turn}\n{TURNS[TURNS.index(current\u turn)+1:}”)
选择=输入(“1.攻击\n2.防御\n”)
如果选项==“1”:
自我攻击(玩家、敌人)
player.dif=20
elif选项==“2”:
player.dif*=2
其他:
打印(“失去你的机会!”)
elif当前回合==“敌人”:
打印(“敌人回合!”)
打印(f“下一轮为:{turns}”)
敌人的选择=random.randint(1,2)
如果敌人选择==2:
打印(“他攻击你!”)
自攻(敌人、玩家)
0.dif=0
其他:
打印(“他为自己辩护。”)
1.dif=10
操作系统(“清除”)
旋转。弹出(0)

如果玩家.hp在你的
战斗.攻击中
方法:

def Attack(self, attacker, defender):
        damage = attacker.atk - defender.dif
        defender.hp -= damage
如果
attacker.atk-defender.dif
是一个负数,那么您将从
defender.hp
中减去一个负数,并增加它


如果我是玩家,我的防御开始为
15
,然后我进行防御,我的防御将变成
30
,因为
player.dif*=2
。如果我在下一回合再次防御,我的防御将是
60
,这比老板的
40
攻击更大。因此,如果老板在战斗中攻击我。攻击
,我们将得到
伤害=40-60
,也就是
伤害=-20
,有效地治疗玩家20分。

如果攻击者的攻击值小于防御者的防御值,实体将被治疗。也许你可以使用防御因子/乘数来代替减去2个值,你是指攻击方法吗?如果伤害为负数(dif大于攻击),则减法将转换为加法,使敌人的生命值更高。作为解决方案,您可以将该行更改为
damage=max(attacker.atk-defender.dif,0)
。非常感谢!我通过简单地将player.dif调整到15来做到这一点,当他防守自己时,然后像以前一样加倍。