开发回合制战斗系统的问题

时间:2021-01-19 15:58:52

标签: python python-3.x

所以,我最近开始编写代码,目前正在开发一个小型回合制 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)

2 个答案:

答案 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)

如果攻击者的攻击值小于防御者的防御值,该实体将被治愈。也许不是减去这两个值,您可以使用防御除数/乘数

相关问题