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