Python开发RPG时如何在定义中区分变量实现种族属性/武器/敌方HP功能
解决方案
1. 种族属性修正值区分方案
用数据类封装种族固定属性,避免零散定义变量造成的混淆,示例实现:
from dataclasses import dataclass @dataclass class Race: name: str dex_bonus: int # 敏捷修正 base_hp: int # 基础HP str_bonus: int # 力量修正,对应你代码里的s变量 # 实例化4个种族配置,全局统一维护 RACES = { "精灵": Race(name="精灵", dex_bonus=3, base_hp=11, str_bonus=1), "人类": Race(name="人类", dex_bonus=1, base_hp=12, str_bonus=2), "矮人": Race(name="矮人", dex_bonus=0, base_hp=14, str_bonus=3), "兽人": Race(name="兽人", dex_bonus=1, base_hp=13, str_bonus=4) }
函数调用时直接传入对应种族实例即可获取对应修正值,不需要单独定义多个区分种族的变量。
2. 武器属性配置方案
同种族配置逻辑,用数据类封装武器属性,统一维护所有武器配置:
@dataclass class Weapon: name: str base_atk: int # 基础攻击加成,对应你代码里的current.weapon变量 WEAPONS = { "铁剑": Weapon(name="铁剑", base_atk=5), "匕首": Weapon(name="匕首", base_atk=3), "战斧": Weapon(name="战斧", base_atk=7), "法杖": Weapon(name="法杖", base_atk=4) }
玩家角色可以新增weapon属性存储当前持有的Weapon实例,需要计算伤害时直接取实例的base_atk属性即可。
3. 战斗逻辑传入敌方HP方案
给battle函数增加入参,将玩家、敌方单位都作为参数传入,敌方HP作为敌方实例的属性存在,不需要单独传HP变量。首先先定义角色通用类:
@dataclass class Character: name: str race: Race hp: int weapon: Weapon
然后优化你原来的战斗相关函数:
import random # 计算攻击判定,传入攻击者实例 def calc_atk(attacker: Character): # d对应敏捷修正,从攻击者种族属性取 return random.randint(1, 20) + attacker.race.dex_bonus # 计算伤害值,传入攻击者实例 def calc_dmg(attacker: Character): # s对应力量修正,从攻击者种族属性取,weapon攻击从当前武器取 return attacker.weapon.base_atk + attacker.race.str_bonus # 战斗函数,传入参战的玩家和敌方实例 def battle(player: Character, enemy: Character): print(f'What will {player.name} do?') # 循环条件直接取双方实例的hp属性判断 while player.hp > 0 and enemy.hp > 0: # 后续战斗逻辑在这里补全即可,不同敌方传入不同的enemy实例自动适配对应HP pass
需要对战不同敌人时,只要实例化不同的Character对象作为enemy传入battle函数即可,比如打普通怪就传hp为10的enemy实例,打boss就传hp为60的enemy实例。
内容的提问来源于stack exchange,提问作者hxu04
相关产品推荐
相关产品推荐

