所以,我最近开始编写代码,目前正在开发一个小型回合制 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)
答案 0 :(得分:1)
在您的 Battle.Attack
方法中:
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
,比boss的攻击40
大。所以,如果boss然后在Battle.Attack
攻击我,我们会得到damage = 40 - 60
,也就是damage = -20
,有效治疗玩家20点。
答案 1 :(得分:0)
如果攻击者的攻击值小于防御者的防御值,该实体将被治愈。也许不是减去这两个值,您可以使用防御除数/乘数