游戏:原神游戏开发代码(谢苏)

原神

原神

游戏发生在一个被称作“提瓦特大陆”的幻想世界,在这里,被神选中的人将被授予“神之眼”,导引元素之力。玩家将扮演一位名为“旅行者”的神秘角色,在自由的旅行中邂逅性格各异、能力独特的同伴们,和他们一起击败强敌,找回失散的亲人——同时,逐步发掘“原神”的真相 。

一.主要人物角色

旅行者荧
1.荧拥有着与空相同的力量 ,他们曾经一同远渡重天,能够凝聚翅膀飞翔于蓝天。双子的惯用武器都是单手剑,但有别于空的菱形两端的横形剑格单手剑,荧的单手剑剑格是弯月形的。在与天理的维系者的战斗中,双子被维系者所封印 。空在这之后失去了力量,但荧却保留了下来。不同于空,荧因为坎瑞亚覆灭于七神之手,拒绝使用元素力,所以服饰上的发光部位常亮白光 。

class Traveler:
    def __init__(self, name, has_wings=True, weapon="单手剑", element=None, power_lost=False):
        self.name = name
        self.has_wings = has_wings
        self.weapon = weapon
        self.element = element  # None表示未使用元素力
        self.power_lost = power_lost
        self.is_sealed = False
        self.glow_color = "白光"  # 默认白光,使用元素力时会变色
        
    def seal(self):
        """被天理维系者封印"""
        self.is_sealed = True
        print(f"{self.name}被天理的维系者封印了!")
        
    def lose_power(self):
        """失去力量"""
        self.power_lost = True
        self.has_wings = False
        print(f"{self.name}失去了力量,无法再飞翔...")
        
    def fly(self):
        """使用翅膀飞翔"""
        if self.has_wings:
            print(f"{self.name}展开翅膀,翱翔于蓝天之上!")
        else:
            print(f"{self.name}无法飞翔,因为失去了力量...")
            
    def use_elemental_power(self, element):
        """使用元素力"""
        if self.power_lost:
            print(f"{self.name}已经失去了力量,无法使用元素力!")
            return
            
        if self.element == element:
            print(f"{self.name}正在使用{element}元素力!")
            self.glow_color = self._get_element_color(element)
        else:
            self.element = element
            self.glow_color = self._get_element_color(element)
            print(f"{self.name}切换到{element}元素力!")
            
    def refuse_elemental_power(self):
        """拒绝使用元素力"""
        self.element = None
        self.glow_color = "白光"
        print(f"{self.name}拒绝使用元素力,服饰发出柔和的白光。")
            
    def _get_element_color(self, element):
        """获取元素对应的颜色"""
        colors = {
            "风": "青色",
            "岩": "金色",
            "雷": "紫色",
            "草": "绿色",
            "水": "蓝色",
            "火": "红色",
            "冰": "青色"
        }
        return colors.get(element, "白光")
        
    def __str__(self):
        status = "已被封印" if self.is_sealed else "自由"
        power_status = "失去力量" if self.power_lost else "保留力量"
        element_status = f"使用{self.element}元素" if self.element else "不使用元素力"
        return f"{self.name} - 状态: {status}, {power_status}, {element_status}, 武器: {self.weapon}, 发光颜色: {self.glow_color}"

# 创建双子角色
aether = Traveler("空", weapon="菱形两端的横形剑格单手剑")
lumine = Traveler("荧", weapon="弯月形剑格单手剑")

# 模拟与天理的战斗
print("与天理的维系者战斗中...")
aether.seal()
lumine.seal()

# 战斗后的状态
print("\n战斗结束后:")
aether.lose_power()
lumine.refuse_elemental_power()

# 尝试使用能力
print("\n尝试使用能力:")
aether.fly()
lumine.fly()

aether.use_elemental_power("风")
lumine.use_elemental_power("风")

# 查看角色状态
print("\n角色状态:")
print(aether)
print(lumine)

这个代码实现了以下功能:
创建了旅行者基类,可以表示空和荧
包含了翅膀飞行能力、元素力使用和封印状态
空失去了力量,无法飞行或使用元素力
荧保留了力量但拒绝使用元素力,因此服饰发出白光
可以查看角色当前状态,包括是否被封印、是否失去力量等
你可以进一步扩展这个类,添加更多原神中的元素,比如战斗技能、属性数值或者与其他角色的互动。

旅行者荧外貌

相貌衣着
荧蓄着金色短发,眼瞳为亮金色。发上稍高位置饰有两朵坎瑞亚国花“因提瓦特”,花蕊发着白色的光,近耳处饰有羽毛。穿着为蓝白配色的异域服装,配有兔耳结白色袖套和白金配色的木底长靴,裙摆等处饰有多件金色的菱形配饰,脖上系着一条白色分叉围巾,两条飘带垂至腿部。飘带、长靴、连衣裙上的透明菱形装饰常亮白光,在黑暗的环境下格外显眼 。

class Traveler:
    def __init__(self, name, has_wings=True, weapon="单手剑", element=None, power_lost=False):
        self.name = name
        self.has_wings = has_wings
        self.weapon = weapon
        self.element = element  # None表示未使用元素力
        self.power_lost = power_lost
        self.is_sealed = False
        self.glow_color = "白光"  # 默认白光,使用元素力时会变色
        
        # 外貌特征 - 初始化为空,可在创建角色后设置
        self.hair = ""
        self.eye_color = ""
        self.accessories = []
        self.clothing = {}
        self.scarf = ""
        self.footwear = ""
        self.glowing_ornaments = False
        
    def set_appearance(self, hair, eye_color, accessories, clothing, scarf, footwear, glowing_ornaments=True):
        """设置角色外貌特征"""
        self.hair = hair
        self.eye_color = eye_color
        self.accessories = accessories
        self.clothing = clothing
        self.scarf = scarf
        self.footwear = footwear
        self.glowing_ornaments = glowing_ornaments
        
    def describe_appearance(self):
        """描述角色外貌"""
        description = f"{self.name}有着{self.hair}{self.eye_color}的眼睛。"
        
        if self.accessories:
            description += f"发饰有:{', '.join(self.accessories)}。"
            
        clothing_desc = []
        for part, desc in self.clothing.items():
            clothing_desc.append(f"{part}{desc}")
            
        if clothing_desc:
            description += f"穿着:{', '.join(clothing_desc)}。"
            
        if self.scarf:
            description += f"脖子上系着{self.scarf}。"
            
        if self.footwear:
            description += f"脚上穿着{self.footwear}。"
            
        if self.glowing_ornaments:
            description += f"服饰上的透明菱形装饰散发着柔和的白光,在黑暗中格外显眼。"
            
        return description
    
    # 其他方法保持不变...
    def seal(self):
        """被天理维系者封印"""
        self.is_sealed = True
        print(f"{self.name}被天理的维系者封印了!")
        
    def lose_power(self):
        """失去力量"""
        self.power_lost = True
        self.has_wings = False
        print(f"{self.name}失去了力量,无法再飞翔...")
        
    def fly(self):
        """使用翅膀飞翔"""
        if self.has_wings:
            print(f"{self.name}展开翅膀,翱翔于蓝天之上!")
        else:
            print(f"{self.name}无法飞翔,因为失去了力量...")
            
    def use_elemental_power(self, element):
        """使用元素力"""
        if self.power_lost:
            print(f"{self.name}已经失去了力量,无法使用元素力!")
            return
            
        if self.element == element:
            print(f"{self.name}正在使用{element}元素力!")
            self.glow_color = self._get_element_color(element)
        else:
            self.element = element
            self.glow_color = self._get_element_color(element)
            print(f"{self.name}切换到{element}元素力!")
            
    def refuse_elemental_power(self):
        """拒绝使用元素力"""
        self.element = None
        self.glow_color = "白光"
        print(f"{self.name}拒绝使用元素力,服饰发出柔和的白光。")
            
    def _get_element_color(self, element):
        """获取元素对应的颜色"""
        colors = {
            "风": "青色",
            "岩": "金色",
            "雷": "紫色",
            "草": "绿色",
            "水": "蓝色",
            "火": "红色",
            "冰": "青色"
        }
        return colors.get(element, "白光")
        
    def __str__(self):
        status = "已被封印" if self.is_sealed else "自由"
        power_status = "失去力量" if self.power_lost else "保留力量"
        element_status = f"使用{self.element}元素" if self.element else "不使用元素力"
        return f"{self.name} - 状态: {status}, {power_status}, {element_status}, 武器: {self.weapon}, 发光颜色: {self.glow_color}"

# 创建双子角色
aether = Traveler("空", weapon="菱形两端的横形剑格单手剑")
lumine = Traveler("荧", weapon="弯月形剑格单手剑")

# 设置荧的外貌特征
lumine.set_appearance(
    hair="金色短发",
    eye_color="亮金色",
    accessories=["两朵坎瑞亚国花'因提瓦特'(花蕊发着白光)", "近耳处的羽毛装饰"],
    clothing={
        "异域服装": "蓝白配色",
        "袖套": "兔耳结白色袖套",
        "裙摆": "饰有多件金色菱形配饰",
        "连衣裙": "蓝白配色,带有透明菱形装饰"
    },
    scarf="白色分叉围巾(两条飘带垂至腿部)",
    footwear="白金配色的木底长靴",
    glowing_ornaments=True
)

# 打印荧的外貌描述
print("荧的外貌描述:")
print(lumine.describe_appearance())

# 模拟与天理的战斗
print("\n与天理的维系者战斗中...")
aether.seal()
lumine.seal()

# 战斗后的状态
print("\n战斗结束后:")
aether.lose_power()
lumine.refuse_elemental_power()

# 尝试使用能力
print("\n尝试使用能力:")
aether.fly()
lumine.fly()

aether.use_elemental_power("风")
lumine.use_elemental_power("风")

# 查看角色状态
print("\n角色状态:")
print(aether)
print(lumine)

这个升级版的代码增加了以下功能:
添加了外貌特征相关的属性:头发、眼睛颜色、饰品、服装、围巾、鞋子和发光装饰
新增了set_appearance方法来设置角色的外貌特征
新增了describe_appearance方法来生成详细的外貌描述
为荧设置了详细的外貌特征,包括:
金色短发和亮金色眼瞳
发上饰有两朵坎瑞亚国花 “因提瓦特”(花蕊发白光)
近耳处饰有羽毛
蓝白配色的异域服装
兔耳结白色袖套和白金配色的木底长靴
裙摆等处饰有多件金色的菱形配饰
白色分叉围巾,两条飘带垂至腿部
飘带、长靴、连衣裙上的透明菱形装饰常亮白光
你可以通过调用lumine.describe_appearance()来查看荧的详细外貌描述。

旅行者空
2.空拥有远渡重天的力量,能够凝聚翅膀飞翔于蓝天。但在与天理的维系者的战斗中,空的力量被维系者所封印,因此受困于提瓦特大陆 。虽然失去了力量,但空能从神灵的造像“七天神像”中获得相应属性的元素力,无需神之眼就能导出元素力 。此外,空还拥有净化深渊的力量的能力。
空使用的武器是单手剑,常用的攻击是五段连续剑击 。触碰神像,获得风元素力后,空和派蒙讨论过如何抓住无形的风,开发出在掌中汇聚真空涡流的战技风涡剑;和派蒙一起研究蝴蝶的振翅,学会了导引风行进的路途,唤出持续前进的龙卷风 取得岩元素力后,空与派蒙讨论过流星的终点,于是掌握了从大地深处升起荒星,引发爆炸的战技星陨剑。与派蒙一起研究过群山深处的脉动,习得如何激活大地深处的岩元素,引发扩散的震荡波 。取得雷元素力后,空和派蒙讨论了电的所有可能路径,研究过丛云剑忽闪的电光,开发出战技雷影剑并学会如何唤来雷霆绕身的加护 。取得草元素力后,空与派蒙一起观察草叶边缘锋利的流形,开发出挥动武器散布锋利的叶片的战技草缘剑;还和派蒙一起研究过雨后草叶抽芽的声响,掌握了凝聚花果草木的力量创造出草灯莲 。

class Traveler:
    def __init__(self, name, has_wings=True, weapon="单手剑", element=None, power_lost=False):
        self.name = name
        self.has_wings = has_wings
        self.weapon = weapon
        self.element = element  # 当前使用的元素力
        self.power_lost = power_lost
        self.is_sealed = False
        self.glow_color = "白光"  # 默认白光,使用元素力时会变色
        self.unlocked_elements = set()  # 已解锁的元素
        self.has_grass_lamp_lotus = False  # 是否拥有草灯莲
        
    def seal(self):
        """被天理维系者封印"""
        self.is_sealed = True
        print(f"{self.name}被天理的维系者封印了!")
        
    def lose_power(self):
        """失去力量"""
        self.power_lost = True
        self.has_wings = False
        print(f"{self.name}失去了力量,无法再飞翔...")
        
    def fly(self):
        """使用翅膀飞翔"""
        if self.has_wings:
            print(f"{self.name}展开翅膀,翱翔于蓝天之上!")
        else:
            print(f"{self.name}无法飞翔,因为失去了力量...")
            
    def touch_statue(self, element):
        """触碰七天神像,获得元素力"""
        if self.power_lost:
            print(f"{self.name}从七天神像中获得了{element}元素力!")
            self.unlocked_elements.add(element)
            self.element = element
            self.glow_color = self._get_element_color(element)
        else:
            print(f"{self.name}不需要触碰神像也能使用元素力!")
            
    def use_elemental_power(self, element):
        """使用元素力"""
        if self.power_lost and element not in self.unlocked_elements:
            print(f"{self.name}尚未从神像获得{element}元素力,无法使用!")
            return
            
        if self.element == element:
            print(f"{self.name}正在使用{element}元素力!")
            self.glow_color = self._get_element_color(element)
        else:
            self.element = element
            self.glow_color = self._get_element_color(element)
            print(f"{self.name}切换到{element}元素力!")
            
    def refuse_elemental_power(self):
        """拒绝使用元素力"""
        self.element = None
        self.glow_color = "白光"
        print(f"{self.name}拒绝使用元素力,服饰发出柔和的白光。")
            
    def _get_element_color(self, element):
        """获取元素对应的颜色"""
        colors = {
            "风": "青色",
            "岩": "金色",
            "雷": "紫色",
            "草": "绿色",
            "水": "蓝色",
            "火": "红色",
            "冰": "青色"
        }
        return colors.get(element, "白光")
        
    def normal_attack(self):
        """普通攻击:五段连续剑击"""
        print(f"{self.name}使用五段连续剑击!")
        
    def skill_wind_whirl_sword(self):
        """风元素战技:风涡剑"""
        if self.element == "风":
            print(f"{self.name}在掌中汇聚真空涡流,释放风涡剑!")
        else:
            print(f"{self.name}当前不是风元素状态,无法使用风涡剑!")
            
    def skill_tornado(self):
        """风元素战技:龙卷风"""
        if self.element == "风":
            print(f"{self.name}唤出持续前进的龙卷风!")
        else:
            print(f"{self.name}当前不是风元素状态,无法使用龙卷风!")
            
    def skill_meteor_sword(self):
        """岩元素战技:星陨剑"""
        if self.element == "岩":
            print(f"{self.name}从大地深处升起荒星,引发爆炸!")
        else:
            print(f"{self.name}当前不是岩元素状态,无法使用星陨剑!")
            
    def skill_earthquake(self):
        """岩元素战技:地震波"""
        if self.element == "岩":
            print(f"{self.name}激活大地深处的岩元素,引发扩散的震荡波!")
        else:
            print(f"{self.name}当前不是岩元素状态,无法使用地震波!")
            
    def skill_thunder_shadow_sword(self):
        """雷元素战技:雷影剑"""
        if self.element == "雷":
            print(f"{self.name}释放雷影剑,电光闪烁!")
        else:
            print(f"{self.name}当前不是雷元素状态,无法使用雷影剑!")
            
    def skill_thunder_aura(self):
        """雷元素战技:雷霆加护"""
        if self.element == "雷":
            print(f"{self.name}唤来雷霆绕身的加护!")
        else:
            print(f"{self.name}当前不是雷元素状态,无法使用雷霆加护!")
            
    def skill_grass_edge_sword(self):
        """草元素战技:草缘剑"""
        if self.element == "草":
            print(f"{self.name}挥动武器散布锋利的叶片!")
        else:
            print(f"{self.name}当前不是草元素状态,无法使用草缘剑!")
            
    def skill_create_grass_lamp_lotus(self):
        """草元素战技:创造草灯莲"""
        if self.element == "草":
            self.has_grass_lamp_lotus = True
            print(f"{self.name}凝聚花果草木的力量,创造出草灯莲!")
        else:
            print(f"{self.name}当前不是草元素状态,无法创造草灯莲!")
            
    def purify_abyss(self):
        """净化深渊的力量"""
        print(f"{self.name}释放净化深渊的力量,驱散黑暗!")
        
    def __str__(self):
        status = "已被封印" if self.is_sealed else "自由"
        power_status = "失去力量" if self.power_lost else "保留力量"
        element_status = f"使用{self.element}元素" if self.element else "不使用元素力"
        return f"{self.name} - 状态: {status}, {power_status}, {element_status}, 武器: {self.weapon}, 发光颜色: {self.glow_color}"

# 创建双子角色
aether = Traveler("空", weapon="菱形两端的横形剑格单手剑")
lumine = Traveler("荧", weapon="弯月形剑格单手剑")

# 模拟与天理的战斗
print("与天理的维系者战斗中...")
aether.seal()
lumine.seal()

# 战斗后的状态
print("\n战斗结束后:")
aether.lose_power()
lumine.refuse_elemental_power()

# 空触碰七天神像获取元素力
print("\n空触碰七天神像:")
aether.touch_statue("风")
aether.touch_statue("岩")
aether.touch_statue("雷")
aether.touch_statue("草")

# 空尝试使用各种能力
print("\n空尝试使用能力:")
aether.normal_attack()
aether.purify_abyss()

# 风元素能力
aether.use_elemental_power("风")
aether.skill_wind_whirl_sword()
aether.skill_tornado()

# 岩元素能力
aether.use_elemental_power("岩")
aether.skill_meteor_sword()
aether.skill_earthquake()

# 雷元素能力
aether.use_elemental_power("雷")
aether.skill_thunder_shadow_sword()
aether.skill_thunder_aura()

# 草元素能力
aether.use_elemental_power("草")
aether.skill_grass_edge_sword()
aether.skill_create_grass_lamp_lotus()

# 查看角色状态
print("\n角色状态:")
print(aether)
print(lumine)

这个代码实现了以下功能:
为 “空” 添加了从七天神像获取元素力的机制
实现了 “空” 的各种元素战技:
风元素:风涡剑、龙卷风
岩元素:星陨剑、地震波
雷元素:雷影剑、雷霆加护
草元素:草缘剑、创造草灯莲
添加了 “空” 的特殊能力:净化深渊的力量
保留了之前的基础功能:封印、失去力量、拒绝使用元素力等
你可以通过调用不同的方法来模拟 “空” 在游戏中的各种能力表现。

3.游戏中拥有许多可操控角色,开局的默认角色可以选择性别,此外的角色性别固定。除旅行者外的角色,可以通过剧情、祈愿和活动获取 。如安柏是游戏中除主角外,玩家可通过剧情激活的第一个角色 。大部分角色都需要通过祈愿获取,祈愿分为常驻祈愿和活动祈愿,祈愿需要消耗相遇之缘或纠缠之缘 。

角色体力值
游戏中的角色拥有体力值的设定,在飞行、奔跑、游泳和蓄力攻击(除弓箭角色外)会消耗,体力为0时会使角色进入步行(奔跑)、坠落(滑翔与攀爬)、溺水死亡(游泳)和无法进行蓄力攻击的状态。体力可以通过体力恢复的料理和休息恢复。在动作进行的时候也可以通过呼出面板食用料理进行恢复

角色基础属性,进阶属性,元素属性

import time

class Character:
    def __init__(self, max_stamina=100):
        self.max_stamina = max_stamina
        self.current_stamina = max_stamina
        self.is_swimming = False
        self.is_climbing = False
        self.is_flying = False
        self.is_running = False
        
    def consume_stamina(self, amount):
        """消耗体力"""
        self.current_stamina = max(0, self.current_stamina - amount)
        self.check_stamina_state()
        
    def recover_stamina(self, amount):
        """恢复体力"""
        self.current_stamina = min(self.max_stamina, self.current_stamina + amount)
        
    def check_stamina_state(self):
        """检查体力状态并触发相应效果"""
        if self.current_stamina <= 0:
            if self.is_swimming:
                print("⚠️ 体力耗尽,溺水死亡!")
                self.is_swimming = False
            elif self.is_climbing or self.is_flying:
                print("⚠️ 体力耗尽,坠落!")
                self.is_climbing = False
                self.is_flying = False
            elif self.is_running:
                print("⚠️ 体力耗尽,无法继续奔跑!")
                self.is_running = False
            print("无法进行蓄力攻击!")
            
    def run(self, duration):
        """模拟奔跑"""
        self.is_running = True
        print("开始奔跑...")
        for _ in range(duration):
            self.consume_stamina(5)
            print(f"当前体力: {self.current_stamina}/{self.max_stamina}")
            if self.current_stamina <= 0:
                break
            time.sleep(0.5)
        self.is_running = False
        
    def swim(self, duration):
        """模拟游泳"""
        self.is_swimming = True
        print("开始游泳...")
        for _ in range(duration):
            self.consume_stamina(8)
            print(f"当前体力: {self.current_stamina}/{self.max_stamina}")
            if self.current_stamina <= 0:
                break
            time.sleep(0.5)
        self.is_swimming = False
        
    def climb(self, duration):
        """模拟攀爬"""
        self.is_climbing = True
        print("开始攀爬...")
        for _ in range(duration):
            self.consume_stamina(10)
            print(f"当前体力: {self.current_stamina}/{self.max_stamina}")
            if self.current_stamina <= 0:
                break
            time.sleep(0.5)
        self.is_climbing = False
        
    def fly(self, duration):
        """模拟飞行"""
        self.is_flying = True
        print("开始飞行...")
        for _ in range(duration):
            self.consume_stamina(7)
            print(f"当前体力: {self.current_stamina}/{self.max_stamina}")
            if self.current_stamina <= 0:
                break
            time.sleep(0.5)
        self.is_flying = False
        
    def use_skill(self):
        """使用技能(蓄力攻击)"""
        if self.current_stamina >= 20:
            self.consume_stamina(20)
            print("使用蓄力攻击!")
        else:
            print("体力不足,无法使用蓄力攻击!")
            
    def eat_food(self, food_amount):
        """食用料理恢复体力"""
        self.recover_stamina(food_amount)
        print(f"食用料理,恢复了{food_amount}点体力!")
        print(f"当前体力: {self.current_stamina}/{self.max_stamina}")

# 示例用法
if __name__ == "__main__":
    player = Character()
    
    # 模拟游戏操作
    player.run(15)
    player.eat_food(30)
    player.climb(8)
    player.eat_food(50)
    player.swim(10)
    player.fly(5)
    player.use_skill()

这个代码实现了以下功能:
角色拥有最大体力值和当前体力值
不同动作消耗不同体力:奔跑 (5 / 秒)、游泳 (8 / 秒)、攀爬 (10 / 秒)、飞行 (7 / 秒)、蓄力攻击 (20 点)
体力为 0 时会触发相应惩罚状态:溺水死亡、坠落、无法奔跑或使用蓄力攻击
可以通过食用料理恢复体力
模拟了游戏中实时消耗体力的过程
你可以根据需要调整体力消耗速率、恢复速度或添加更多功能,比如不同角色有不同体力上限或恢复速度。

二.敌人与魔物
游戏中的怪物种类十分繁多,每个怪物都有各自的特色与攻击方式。

1.史莱姆
自然之中的元素形成的魔物。在游戏中是普通级别的魔物,有七种属性,对应提瓦特大陆的七元素,按照体型分为普通史莱姆和大型史莱姆,雷史莱姆还有变异形态。
在这里插入图片描述

class Slime:
    # 史莱姆的元素类型(对应提瓦特大陆七元素)
    ELEMENTS = ['Anemo', 'Geo', 'Electro', 'Dendro', 'Hydro', 'Pyro', 'Cryo']
    
    def __init__(self, element: str, size: str = 'normal'):
        # 检查元素是否合法
        if element not in self.ELEMENTS:
            raise ValueError(f"元素必须是以下之一: {', '.join(self.ELEMENTS)}")
        
        # 检查体型是否合法
        if size not in ['normal', 'large']:
            raise ValueError("体型必须是 'normal' 或 'large'")
        
        self.element = element
        self.size = size
        self.is_mutated = False  # 雷史莱姆变异状态
        
        # 特殊处理:雷史莱姆可以变异
        if self.element == 'Electro':
            self.is_mutated = False  # 默认未变异
    
    def mutate(self):
        """将雷史莱姆变为变异形态"""
        if self.element == 'Electro':
            self.is_mutated = True
            print("⚡ 雷史莱姆已变异!")
        else:
            print("只有雷史莱姆可以变异!")
    
    def __str__(self):
        size_str = "大型" if self.size == 'large' else "普通"
        mutation_str = "(变异)" if self.is_mutated else ""
        return f"{size_str}{self.element}史莱姆{mutation_str}"

# 示例用法
if __name__ == "__main__":
    # 创建不同元素的史莱姆
    pyro_slime = Slime('Pyro', 'normal')
    large_geo_slime = Slime('Geo', 'large')
    electro_slime = Slime('Electro', 'normal')
    
    print(pyro_slime)
    print(large_geo_slime)
    print(electro_slime)
    
    # 让雷史莱姆变异
    electro_slime.mutate()
    print(electro_slime)
    
    # 尝试让非雷史莱姆变异
    pyro_slime.mutate()

2.吞星之鲸
神秘的异界巨兽,无光星海彼端的访客。位于塞洛海原,击败奖励每周只能获取一次。战斗中,吞星之鲸将积累敌意。敌意会随着时间自动积累,玩家也可以通过攻击引起吞星之鲸的敌意。敌意累积达到上限后,吞星之鲸会将玩家吞噬。在巨鲸腹内,玩家将面对会释放幻形攻击黑色幻影。使用芒性或荒性的攻击可以中断幻形攻击,并对黑色幻影造成伤害。战胜黑色幻影将对吞星之鲸造成可观的伤害,并使其暂时陷入虚弱状态。玩家也可以从巨鲸腹中逃出。

吞星之鲸

import random

class StarDevouringWhale:
    def __init__(self):
        self.max_hp = 10000
        self.current_hp = self.max_hp
        self.aggro = 0
        self.max_aggro = 100
        self.is_vulnerable = False
        self.vulnerable_timer = 0
        self.weekly_reward_claimed = False
        self.location = "塞洛海原"
        
    def reset_weekly_reward(self):
        """重置每周奖励状态"""
        self.weekly_reward_claimed = False
        print("吞星之鲸的每周奖励已重置!")
        
    def gain_aggro(self, amount):
        """增加敌意值"""
        self.aggro = min(self.max_aggro, self.aggro + amount)
        print(f"吞星之鲸的敌意值增加到{self.aggro}/{self.max_aggro}")
        
    def auto_aggro(self):
        """自动增加敌意值"""
        self.gain_aggro(random.randint(2, 5))
        
    def check_aggro(self):
        """检查敌意值是否达到上限"""
        if self.aggro >= self.max_aggro:
            return True
        return False
        
    def swallow_player(self):
        """吞噬玩家"""
        print("吞星之鲸张开巨口,将你吞噬!")
        self.aggro = 0  # 重置敌意值
        return True
        
    def enter_vulnerable_state(self, duration):
        """进入虚弱状态"""
        self.is_vulnerable = True
        self.vulnerable_timer = duration
        print(f"吞星之鲸进入虚弱状态,持续{duration}回合!")
        
    def update_vulnerable_state(self):
        """更新虚弱状态计时器"""
        if self.is_vulnerable:
            self.vulnerable_timer -= 1
            if self.vulnerable_timer <= 0:
                self.is_vulnerable = False
                print("吞星之鲸恢复正常状态!")
                
    def take_damage(self, amount, attack_type=None):
        """受到伤害"""
        if self.is_vulnerable:
            amount *= 1.5  # 虚弱状态下受到额外伤害
            
        self.current_hp = max(0, self.current_hp - amount)
        
        if attack_type == "芒性" or attack_type == "荒性":
            print(f"你使用{attack_type}攻击,对吞星之鲸造成{amount}点伤害!")
        else:
            print(f"你对吞星之鲸造成{amount}点伤害!")
            
        if self.current_hp <= 0:
            self.current_hp = 0
            print("吞星之鲸被击败了!")
            self.drop_reward()
            
    def drop_reward(self):
        """掉落奖励"""
        if not self.weekly_reward_claimed:
            print("你获得了吞星之鲸的每周奖励!")
            self.weekly_reward_claimed = True
        else:
            print("你已经领取过本周的奖励,击败吞星之鲸不会再获得额外奖励。")
            
    def __str__(self):
        return f"吞星之鲸 (HP: {self.current_hp}/{self.max_hp}, 敌意: {self.aggro}/{self.max_aggro}, 状态: {'虚弱' if self.is_vulnerable else '正常'})"

class BlackPhantom:
    def __init__(self):
        self.max_hp = 3000
        self.current_hp = self.max_hp
        self.is_using_illusion_attack = False
        
    def use_illusion_attack(self):
        """使用幻形攻击"""
        self.is_using_illusion_attack = True
        print("黑色幻影正在使用幻形攻击!")
        
    def take_damage(self, amount, attack_type=None):
        """受到伤害"""
        if attack_type == "芒性" or attack_type == "荒性":
            if self.is_using_illusion_attack:
                print(f"你使用{attack_type}攻击中断了幻形攻击!")
                self.is_using_illusion_attack = False
            print(f"你对黑色幻影造成{amount}点伤害!")
        else:
            if self.is_using_illusion_attack:
                print("你的攻击未能中断幻形攻击!")
            else:
                print(f"你对黑色幻影造成{amount}点伤害!")
                
        self.current_hp = max(0, self.current_hp - amount)
        
        if self.current_hp <= 0:
            self.current_hp = 0
            print("黑色幻影被击败了!")
            return True
        return False
        
    def __str__(self):
        return f"黑色幻影 (HP: {self.current_hp}/{self.max_hp}, 状态: {'幻形攻击中' if self.is_using_illusion_attack else '正常'})"

# 模拟战斗
whale = StarDevouringWhale()
print(f"你在{whale.location}遇到了{whale}")

# 战斗回合
for turn in range(1, 16):
    print(f"\n--- 回合 {turn} ---")
    
    # 吞星之鲸自动增加敌意
    whale.auto_aggro()
    
    # 玩家攻击
    attack_type = random.choice(["普通", "芒性", "荒性"])
    damage = random.randint(200, 500)
    
    if whale.is_vulnerable:
        print("吞星之鲸正处于虚弱状态,是攻击的好时机!")
        
    whale.take_damage(damage, attack_type)
    
    # 增加敌意
    whale.gain_aggro(random.randint(5, 15))
    
    # 检查是否被吞噬
    if whale.check_aggro():
        whale.swallow_player()
        
        # 巨鲸腹内战斗
        phantom = BlackPhantom()
        print(f"你在巨鲸腹内遇到了{phantom}")
        
        # 腹内战斗回合
        for inner_turn in range(1, 6):
            print(f"--- 腹内回合 {inner_turn} ---")
            
            # 幻影使用幻形攻击
            if random.random() < 0.6:
                phantom.use_illusion_attack()
                
            # 玩家攻击幻影
            inner_attack_type = random.choice(["普通", "芒性", "荒性"])
            inner_damage = random.randint(400, 800)
            defeated = phantom.take_damage(inner_damage, inner_attack_type)
            
            if defeated:
                print("你击败了黑色幻影,对吞星之鲸造成了可观的伤害!")
                whale.take_damage(3000)  # 对巨鲸造成巨大伤害
                whale.enter_vulnerable_state(3)  # 使巨鲸虚弱3回合
                break
                
        # 逃出巨鲸腹
        print("你成功从巨鲸腹中逃出!")
        
    # 更新虚弱状态
    whale.update_vulnerable_state()
    
    # 检查战斗是否结束
    if whale.current_hp <= 0:
        break
        
    print(whale)

这个代码实现了吞星之鲸的核心战斗机制:
敌意系统:敌意会随时间自动增加,攻击也会增加敌意值,达到上限时玩家会被吞噬
腹内战斗:在巨鲸腹内,玩家需要面对黑色幻影
特殊攻击机制:使用芒性或荒性攻击可以中断幻影的幻形攻击
虚弱状态:击败幻影后,巨鲸会陷入虚弱状态,受到额外伤害
每周奖励:击败巨鲸后每周只能获取一次奖励
你可以根据需要扩展这个系统,比如添加更多战斗机制、特殊技能或与其他游戏系统的交互。

三.物品道具

1.武器装备
玩家可操控角色拥有两类装备。一类是武器,按照角色的攻击方式装备对应的武器;一类是圣遗物,装备在角色身上的道具,组成套装会有额外属性。

武器
武器可通过祈愿、开宝箱以及任务等方式获取。武器会按星级区分品质,分为金色五星,紫色四星,蓝色三星,绿色二星和灰色一星 。武器共分为单手剑、双手剑、法器、弓和长柄武器5类。
武器
武器

import random

class Weapon:
    # 武器类型和星级
    WEAPON_TYPES = ["单手剑", "双手剑", "法器", "弓", "长柄武器"]
    RARITY_LEVELS = ["灰色一星", "绿色二星", "蓝色三星", "紫色四星", "金色五星"]
    
    def __init__(self, name, weapon_type, rarity, attack_power):
        # 检查武器类型是否合法
        if weapon_type not in self.WEAPON_TYPES:
            raise ValueError(f"武器类型必须是以下之一: {', '.join(self.WEAPON_TYPES)}")
            
        # 检查星级是否合法
        if rarity not in self.RARITY_LEVELS:
            raise ValueError(f"星级必须是以下之一: {', '.join(self.RARITY_LEVELS)}")
            
        self.name = name
        self.weapon_type = weapon_type
        self.rarity = rarity
        self.attack_power = attack_power
        
    def __str__(self):
        return f"{self.rarity} {self.weapon_type} - {self.name} (攻击力: {self.attack_power})"

class WeaponSystem:
    def __init__(self):
        # 武器库
        self.weapon_pool = {
            "单手剑": {
                "金色五星": ["天空之剑", "风鹰剑", "雾切之回光"],
                "紫色四星": ["西风剑", "祭礼剑", "匣里灭辰"],
                "蓝色三星": ["铁蜂刺", "黑剑", "冷刃"],
                "绿色二星": ["训练剑", "旅行剑"],
                "灰色一星": ["破损的剑"]
            },
            "双手剑": {
                "金色五星": ["天空之傲", "无工之剑", "赤角石溃杵"],
                "紫色四星": ["西风大剑", "祭礼大剑", "钟剑"],
                "蓝色三星": ["铁影阔剑", "黑缨枪", "钺矛"],
                "绿色二星": ["训练大剑", "旅行大剑"],
                "灰色一星": ["破损的大剑"]
            },
            "法器": {
                "金色五星": ["天空之卷", "四风原典", "神乐之真意"],
                "紫色四星": ["西风秘典", "祭礼残章", "匣里日月"],
                "蓝色三星": ["铁峰刺", "黑岩绯玉", "流浪乐章"],
                "绿色二星": ["训练法器", "旅行法器"],
                "灰色一星": ["破损的书"]
            },
            "弓": {
                "金色五星": ["天空之翼", "阿莫斯之弓", "若水"],
                "紫色四星": ["西风弓", "祭礼弓", "绝弦"],
                "蓝色三星": ["铁蜂刺弓", "黑岩战弓", "鸦羽弓"],
                "绿色二星": ["训练弓", "旅行弓"],
                "灰色一星": ["破损的弓"]
            },
            "长柄武器": {
                "金色五星": ["护摩之杖", "和璞鸢", "贯虹之槊"],
                "紫色四星": ["西风长枪", "祭礼长枪", "千岩长枪"],
                "蓝色三星": ["铁影枪", "黑缨枪", "钺矛"],
                "绿色二星": ["训练长枪", "旅行长枪"],
                "灰色一星": ["破损的长枪"]
            }
        }
        
    def wish_for_weapon(self, pity=0):
        """祈愿获取武器"""
        print("正在进行武器祈愿...")
        
        # 基础概率
        probabilities = {
            "金色五星": 0.01,  # 1%
            "紫色四星": 0.06,  # 6%
            "蓝色三星": 0.33,  # 33%
            "绿色二星": 0.35,  # 35%
            "灰色一星": 0.25   # 25%
        }
        
        # 增加保底机制
        if pity >= 75:
            probabilities["金色五星"] += 0.02 * (pity - 75)
            probabilities["紫色四星"] += 0.03 * (pity - 75)
            
        # 随机选择星级
        rarity = random.choices(
            list(probabilities.keys()),
            weights=list(probabilities.values())
        )[0]
        
        # 随机选择武器类型
        weapon_type = random.choice(Weapon.WEAPON_TYPES)
        
        # 随机选择武器名称
        weapon_name = random.choice(self.weapon_pool[weapon_type][rarity])
        
        # 生成攻击力 (星级越高,攻击力范围越大)
        attack_power = self._generate_attack_power(rarity)
        
        print(f"恭喜获得: {rarity} {weapon_type} - {weapon_name} (攻击力: {attack_power})")
        return Weapon(weapon_name, weapon_type, rarity, attack_power)
        
    def _generate_attack_power(self, rarity):
        """根据星级生成攻击力"""
        base_power = 10
        rarity_index = Weapon.RARITY_LEVELS.index(rarity)
        return base_power + (rarity_index * 15) + random.randint(0, 10)
        
    def open_chest(self):
        """开宝箱获取武器"""
        print("正在打开宝箱...")
        
        # 宝箱中获取高星级武器的概率较低
        probabilities = {
            "金色五星": 0.005,  # 0.5%
            "紫色四星": 0.03,   # 3%
            "蓝色三星": 0.20,   # 20%
            "绿色二星": 0.40,   # 40%
            "灰色一星": 0.365   # 36.5%
        }
        
        # 随机选择星级
        rarity = random.choices(
            list(probabilities.keys()),
            weights=list(probabilities.values())
        )[0]
        
        # 随机选择武器类型
        weapon_type = random.choice(Weapon.WEAPON_TYPES)
        
        # 随机选择武器名称
        weapon_name = random.choice(self.weapon_pool[weapon_type][rarity])
        
        # 生成攻击力
        attack_power = self._generate_attack_power(rarity)
        
        print(f"恭喜获得: {rarity} {weapon_type} - {weapon_name} (攻击力: {attack_power})")
        return Weapon(weapon_name, weapon_type, rarity, attack_power)
        
    def complete_quest(self, quest_difficulty):
        """完成任务获取武器"""
        print(f"完成{quest_difficulty}难度任务...")
        
        # 根据任务难度调整概率
        if quest_difficulty == "简单":
            probabilities = {
                "金色五星": 0.0,   # 0%
                "紫色四星": 0.0,   # 0%
                "蓝色三星": 0.20,  # 20%
                "绿色二星": 0.50,  # 50%
                "灰色一星": 0.30   # 30%
            }
        elif quest_difficulty == "普通":
            probabilities = {
                "金色五星": 0.0,   # 0%
                "紫色四星": 0.10,  # 10%
                "蓝色三星": 0.40,  # 40%
                "绿色二星": 0.40,  # 40%
                "灰色一星": 0.10   # 10%
            }
        elif quest_difficulty == "困难":
            probabilities = {
                "金色五星": 0.05,  # 5%
                "紫色四星": 0.30,  # 30%
                "蓝色三星": 0.50,  # 50%
                "绿色二星": 0.15,  # 15%
                "灰色一星": 0.0   # 0%
            }
        else:
            raise ValueError("任务难度必须是'简单'、'普通'或'困难'")
            
        # 随机选择星级
        rarity = random.choices(
            list(probabilities.keys()),
            weights=list(probabilities.values())
        )[0]
        
        # 随机选择武器类型
        weapon_type = random.choice(Weapon.WEAPON_TYPES)
        
        # 随机选择武器名称
        weapon_name = random.choice(self.weapon_pool[weapon_type][rarity])
        
        # 生成攻击力
        attack_power = self._generate_attack_power(rarity)
        
        print(f"恭喜获得: {rarity} {weapon_type} - {weapon_name} (攻击力: {attack_power})")
        return Weapon(weapon_name, weapon_type, rarity, attack_power)

# 模拟游戏过程
if __name__ == "__main__":
    weapon_system = WeaponSystem()
    
    # 祈愿获取武器
    weapon_system.wish_for_weapon(pity=80)
    
    # 开宝箱获取武器
    weapon_system.open_chest()
    
    # 完成任务获取武器
    weapon_system.complete_quest("困难")

这个代码实现了以下功能:
定义了武器类(Weapon),包含名称、类型、星级和攻击力等属性
实现了武器系统(WeaponSystem),包含武器库和获取武器的三种方式:
祈愿获取(有保底机制)
开宝箱获取
完成任务获取(根据任务难度调整获得高品质武器的概率)
武器分为五个星级:金色五星、紫色四星、蓝色三星、绿色二星和灰色一星
武器类型包括:单手剑、双手剑、法器、弓和长柄武器
你可以将这个武器系统与之前的角色类结合,让角色能够装备和使用不同的武器。

2.圣遗物
圣遗物可通过秘境挑战、开宝箱以及任务等方式获取。其分为了五类:死之羽、空之杯、时之沙、生之花和理之冠。圣遗物可以组成套装,获得套装的技能,不同数量下的套装所组合出来的技能都有所不同,分为两件套和四件套技能 。
圣遗物
圣遗物

import random

class Artifact:
    """圣遗物类"""
    TYPES = ["死之羽", "空之杯", "时之沙", "生之花", "理之冠"]
    RARITY_LEVELS = ["灰色一星", "绿色二星", "蓝色三星", "紫色四星", "金色五星"]
    
    def __init__(self, name, artifact_type, rarity, main_stat, sub_stats, set_name):
        self.name = name
        self.artifact_type = artifact_type
        self.rarity = rarity
        self.main_stat = main_stat
        self.sub_stats = sub_stats
        self.set_name = set_name
        
    def __str__(self):
        sub_stats_str = ", ".join([f"{k}:{v}" for k, v in self.sub_stats.items()])
        return f"{self.rarity} {self.artifact_type} - {self.name}({self.set_name})\n主属性: {self.main_stat}\n副属性: {sub_stats_str}"

class ArtifactSystem:
    """圣遗物系统"""
    def __init__(self):
        # 圣遗物套装库
        self.artifact_sets = {
            "角斗士的终幕礼": {
                "2件套": "攻击力+20%",
                "4件套": "装备该套装的角色为单手剑、双手剑、长柄武器角色时,基础攻击力提高40%"
            },
            "流浪大地的乐团": {
                "2件套": "元素精通+80",
                "4件套": "装备该套装的角色为法器、弓角色时,元素伤害提高35%"
            },
            "宗室之仪": {
                "2件套": "生命值+20%",
                "4件套": "施放元素爆发后,全队攻击力提高20%,持续12秒"
            },
            "魔女的炎之花": {
                "2件套": "火元素伤害加成+15%",
                "4件套": "元素战技命中敌人后,普通攻击与重击伤害提高30%,持续6秒"
            }
        }
        
        # 各类型圣遗物主属性
        self.main_stats = {
            "死之羽": ["攻击力"],
            "空之杯": ["攻击力", "生命值", "防御力", "火元素伤害加成", "水元素伤害加成", "雷元素伤害加成", "风元素伤害加成", "岩元素伤害加成", "冰元素伤害加成", "物理伤害加成"],
            "时之沙": ["攻击力", "生命值", "防御力", "元素精通", "元素充能效率"],
            "生之花": ["生命值"],
            "理之冠": ["攻击力", "生命值", "防御力", "暴击率", "暴击伤害", "治疗加成", "元素精通"]
        }
        
        # 副属性池
        self.sub_stats_pool = ["攻击力", "攻击力%", "生命值", "生命值%", "防御力", "防御力%", "元素精通", "元素充能效率", "暴击率", "暴击伤害"]
        
    def _get_random_main_stat(self, artifact_type):
        """随机获取主属性"""
        return random.choice(self.main_stats[artifact_type])
        
    def _get_random_sub_stats(self, rarity):
        """根据星级获取随机副属性"""
        sub_stats_count = 1 if rarity in ["灰色一星", "绿色二星"] else 2 if rarity == "蓝色三星" else 3 if rarity == "紫色四星" else 4
        sub_stats = {}
        
        for _ in range(sub_stats_count):
            stat = random.choice(self.sub_stats_pool)
            while stat in sub_stats:  # 避免重复属性
                stat = random.choice(self.sub_stats_pool)
                
            # 根据星级生成属性值
            if "%" in stat:
                base_value = random.uniform(3.5, 5.8) if rarity == "金色五星" else random.uniform(2.7, 4.5)
                sub_stats[stat] = f"{base_value:.1f}%"
            elif stat in ["元素精通", "元素充能效率"]:
                value = random.randint(16, 23) if rarity == "金色五星" else random.randint(12, 18)
                sub_stats[stat] = value
            else:
                value = random.randint(14, 19) if rarity == "金色五星" else random.randint(10, 15)
                sub_stats[stat] = value
                
        return sub_stats
        
    def get_artifact_from_domain(self):
        """从秘境挑战获取圣遗物"""
        print("正在挑战秘境...")
        
        # 秘境获取高星级概率较高
        probabilities = {
            "金色五星": 0.25,  # 25%
            "紫色四星": 0.45,  # 45%
            "蓝色三星": 0.20,  # 20%
            "绿色二星": 0.08,  # 8%
            "灰色一星": 0.02   # 2%
        }
        
        return self._generate_artifact(probabilities)
        
    def get_artifact_from_chest(self):
        """从宝箱获取圣遗物"""
        print("正在打开宝箱...")
        
        # 宝箱获取高星级概率较低
        probabilities = {
            "金色五星": 0.05,  # 5%
            "紫色四星": 0.20,  # 20%
            "蓝色三星": 0.40,  # 40%
            "绿色二星": 0.25,  # 25%
            "灰色一星": 0.10   # 10%
        }
        
        return self._generate_artifact(probabilities)
        
    def get_artifact_from_quest(self, quest_difficulty):
        """从任务获取圣遗物"""
        print(f"完成{quest_difficulty}难度任务...")
        
        # 根据任务难度调整概率
        if quest_difficulty == "简单":
            probabilities = {
                "金色五星": 0.0,   # 0%
                "紫色四星": 0.10,  # 10%
                "蓝色三星": 0.50,  # 50%
                "绿色二星": 0.30,  # 30%
                "灰色一星": 0.10   # 10%
            }
        elif quest_difficulty == "普通":
            probabilities = {
                "金色五星": 0.05,  # 5%
                "紫色四星": 0.30,  # 30%
                "蓝色三星": 0.45,  # 45%
                "绿色二星": 0.15,  # 15%
                "灰色一星": 0.05   # 5%
            }
        elif quest_difficulty == "困难":
            probabilities = {
                "金色五星": 0.20,  # 20%
                "紫色四星": 0.50,  # 50%
                "蓝色三星": 0.25,  # 25%
                "绿色二星": 0.05,  # 5%
                "灰色一星": 0.0   # 0%
            }
        else:
            raise ValueError("任务难度必须是'简单'、'普通'或'困难'")
            
        return self._generate_artifact(probabilities)
        
    def _generate_artifact(self, probabilities):
        """生成圣遗物"""
        # 随机选择星级
        rarity = random.choices(list(probabilities.keys()), weights=list(probabilities.values()))[0]
        
        # 随机选择类型
        artifact_type = random.choice(Artifact.TYPES)
        
        # 随机选择套装
        set_name = random.choice(list(self.artifact_sets.keys()))
        
        # 随机生成名称 (简化处理,实际游戏中有特定名称)
        name = f"{set_name.split('的')[1]}{artifact_type}"
        
        # 获取主属性
        main_stat = self._get_random_main_stat(artifact_type)
        
        # 获取副属性
        sub_stats = self._get_random_sub_stats(rarity)
        
        artifact = Artifact(name, artifact_type, rarity, main_stat, sub_stats, set_name)
        print(f"获得了新圣遗物: {artifact.name}")
        return artifact
        
    def check_set_bonus(self, artifacts):
        """检查套装效果"""
        set_counts = {}
        
        # 统计各套装数量
        for artifact in artifacts:
            set_counts[artifact.set_name] = set_counts.get(artifact.set_name, 0) + 1
            
        # 检查套装效果
        for set_name, count in set_counts.items():
            if count >= 2:
                print(f"触发{set_name}两件套效果: {self.artifact_sets[set_name]['2件套']}")
            if count >= 4:
                print(f"触发{set_name}四件套效果: {self.artifact_sets[set_name]['4件套']}")

# 模拟游戏过程
if __name__ == "__main__":
    artifact_system = ArtifactSystem()
    
    # 从秘境获取圣遗物
    artifact1 = artifact_system.get_artifact_from_domain()
    print(artifact1)
    
    # 从宝箱获取圣遗物
    artifact2 = artifact_system.get_artifact_from_chest()
    print(artifact2)
    
    # 从任务获取圣遗物
    artifact3 = artifact_system.get_artifact_from_quest("困难")
    print(artifact3)
    
    # 检查套装效果
    print("\n检查套装效果:")
    artifacts = [artifact1, artifact2, artifact3, 
                 artifact_system.get_artifact_from_domain(), 
                 artifact_system.get_artifact_from_domain()]
    artifact_system.check_set_bonus(artifacts)

这个代码实现了以下功能:
定义了圣遗物类(Artifact),包含名称、类型、星级、主属性、副属性和套装名称
实现了圣遗物系统(ArtifactSystem),包含圣遗物获取方式:
秘境挑战获取
开宝箱获取
完成任务获取
圣遗物分为五类:死之羽、空之杯、时之沙、生之花和理之冠
实现了套装效果系统,包括两件套和四件套效果
不同星级圣遗物有不同数量的副属性
你可以将这个圣遗物系统与之前的角色类结合,让角色能够装备圣遗物并获得相应属性加成。

3.消耗品
游戏中的消耗品分为货币、素材、料理三类,货币可以通过开宝箱、秘境通关奖励、完成任务、供奉神像、击杀野怪等方式获得;素材大多通过开启宝箱和采矿获取;料理需要消耗材料按照对应食谱制作。

货币
游戏中的货币分为摩拉、元素之印、原石、创世结晶四种,从左往右稀有度依次增加,各自有着不同的用处。摩拉是提瓦特大陆的通用货币,日常消费和角色养成都能使用 ;元素之印通过开启宝箱获得,可以用来兑换部分高级材料 ;原石主要用于祈愿抽奖和购买体力,祈愿可获得星辉与星尘,可以在商城兑换材料;创世结晶用于兑换原石、购买补给包和角色衣装。
摩拉

原石

import random

class ConsumableSystem:
    """消耗品系统"""
    def __init__(self):
        # 初始化货币
        self.currencies = {
            "摩拉": 0,
            "元素之印": 0,
            "原石": 0,
            "创世结晶": 0
        }
        
        # 初始化素材
        self.materials = {}
        
        # 初始化食谱和料理
        self.recipes = {}
        self.dishes = {}
        
    def gain_currency(self, currency_type, amount):
        """获得货币"""
        if currency_type not in self.currencies:
            print(f"错误:未知货币类型 {currency_type}")
            return
            
        self.currencies[currency_type] += amount
        print(f"获得 {amount} {currency_type}")
        
    def spend_currency(self, currency_type, amount):
        """花费货币"""
        if currency_type not in self.currencies:
            print(f"错误:未知货币类型 {currency_type}")
            return
            
        if self.currencies[currency_type] < amount:
            print(f"货币不足:当前{currency_type}{self.currencies[currency_type]},需要{amount}")
            return
            
        self.currencies[currency_type] -= amount
        print(f"花费 {amount} {currency_type}")
        return True
        
    def open_chest(self):
        """打开宝箱获得奖励"""
        print("打开宝箱...")
        
        # 宝箱中可能获得的货币
        rewards = {
            "摩拉": random.randint(500, 2000),
            "元素之印": random.randint(1, 5),
            "原石": random.randint(0, 5)
        }
        
        for currency, amount in rewards.items():
            if amount > 0:
                self.gain_currency(currency, amount)
                
        # 宝箱中可能获得的素材
        materials = ["铁矿", "白铁矿", "水晶矿", "发光髓", "蒲公英籽"]
        material_type = random.choice(materials)
        material_amount = random.randint(1, 3)
        self.gain_material(material_type, material_amount)
        
    def complete_domain(self):
        """完成秘境获得奖励"""
        print("完成秘境挑战...")
        self.gain_currency("摩拉", random.randint(1000, 3000))
        self.gain_currency("原石", random.randint(5, 15))
        
        # 随机获得素材
        materials = ["混沌装置", "混沌回路", "混沌炉心", "繁荣的教导", "繁荣的指引"]
        for _ in range(random.randint(1, 3)):
            material_type = random.choice(materials)
            self.gain_material(material_type, 1)
            
    def complete_quest(self, quest_type):
        """完成任务获得奖励"""
        print(f"完成{quest_type}任务...")
        
        if quest_type == "主线":
            self.gain_currency("摩拉", random.randint(5000, 10000))
            self.gain_currency("原石", random.randint(20, 50))
        elif quest_type == "支线":
            self.gain_currency("摩拉", random.randint(2000, 5000))
            self.gain_currency("原石", random.randint(5, 15))
        elif quest_type == "日常":
            self.gain_currency("摩拉", random.randint(1000, 2000))
            self.gain_currency("原石", random.randint(5, 10))
            
    def offer_to_statue(self):
        """供奉神像获得奖励"""
        print("向神像供奉...")
        self.gain_currency("摩拉", random.randint(500, 1500))
        
    def defeat_enemy(self):
        """击败敌人获得奖励"""
        print("击败敌人...")
        self.gain_currency("摩拉", random.randint(100, 500))
        
        # 有几率获得元素之印
        if random.random() < 0.3:
            self.gain_currency("元素之印", 1)
            
    def mine_ore(self):
        """采矿获得素材"""
        print("采矿...")
        ores = ["铁矿", "白铁矿", "水晶矿"]
        ore_type = random.choice(ores)
        ore_amount = random.randint(1, 3)
        self.gain_material(ore_type, ore_amount)
        
    def gain_material(self, material_type, amount):
        """获得素材"""
        self.materials[material_type] = self.materials.get(material_type, 0) + amount
        print(f"获得 {amount}{material_type}")
        
    def learn_recipe(self, recipe_name, ingredients):
        """学习食谱"""
        if recipe_name in self.recipes:
            print(f"已经学会了{recipe_name}的食谱")
            return
            
        self.recipes[recipe_name] = ingredients
        print(f"学会了制作{recipe_name}的食谱")
        
    def cook_dish(self, recipe_name):
        """烹饪料理"""
        if recipe_name not in self.recipes:
            print(f"没有{recipe_name}的食谱")
            return
            
        ingredients = self.recipes[recipe_name]
        
        # 检查材料是否足够
        for material, amount in ingredients.items():
            if self.materials.get(material, 0) < amount:
                print(f"材料不足:需要{amount}{material},当前只有{self.materials.get(material, 0)}个")
                return
                
        # 消耗材料
        for material, amount in ingredients.items():
            self.materials[material] -= amount
            
        # 制作料理
        self.dishes[recipe_name] = self.dishes.get(recipe_name, 0) + 1
        print(f"成功制作了{recipe_name}")
        
    def show_inventory(self):
        """显示当前物品栏"""
        print("\n--- 物品栏 ---")
        
        print("货币:")
        for currency, amount in self.currencies.items():
            print(f"- {currency}: {amount}")
            
        print("\n素材:")
        for material, amount in self.materials.items():
            print(f"- {material}: {amount}")
            
        print("\n料理:")
        for dish, amount in self.dishes.items():
            print(f"- {dish}: {amount}")
            
        print("---------------\n")

# 模拟游戏过程
if __name__ == "__main__":
    game = ConsumableSystem()
    
    # 打开宝箱
    game.open_chest()
    
    # 完成秘境
    game.complete_domain()
    
    # 完成任务
    game.complete_quest("主线")
    
    # 供奉神像
    game.offer_to_statue()
    
    # 击败敌人
    game.defeat_enemy()
    
    # 采矿
    game.mine_ore()
    
    # 学习食谱
    game.learn_recipe("提瓦特煎蛋", {"禽肉": 1})
    
    # 烹饪料理
    game.cook_dish("提瓦特煎蛋")  # 材料不足
    game.gain_material("禽肉", 1)
    game.cook_dish("提瓦特煎蛋")  # 材料足够
    
    # 显示物品栏
    game.show_inventory()

这个代码实现了以下功能:
货币系统:包含四种货币(摩拉、元素之印、原石、创世结晶),并实现了多种获取方式
素材系统:通过开宝箱、采矿等方式获取各种素材
料理系统:学习食谱后,消耗材料制作料理
物品栏展示:显示当前拥有的各种消耗品
你可以将这个消耗品系统与之前的角色类结合,让角色能够使用消耗品获得各种效果。

四.世界地图
《原神》的冒险在包括蒙德、璃月、稻妻、须弥、枫丹、纳塔、至冬七座主要城邦的提瓦特大陆,以及神秘的覆灭古国“坎瑞亚”遗址下展开 。玩家来到新区域激活一座七天神像,地图上就会解锁相应的新区域。目前已开放蒙德、璃月、稻妻、须弥、枫丹、纳塔六个城邦供玩家探索

1.蒙德
蒙德位于提瓦特大陆东北部的自由城邦。群山和广袤的平原间,自由之风携着蒲公英的气息吹拂过果酒湖,为坐落于湖心岛上的蒙德城送去风神巴巴托斯的祝福与恩泽
蒙德城四面被果酒湖包围,仅一座石桥与外界连接,城市的最深处是一座宏伟的教堂,名为"西风大教堂",教堂外广场上竖立着风神巴巴托斯的雕像。
蒙德
蒙德

class Mondstadt:
  def_init_(self):
    self.name = "蒙德"
    self.region = "提瓦特东北部"
    self.archon = "巴巴托斯(风神)"
    self.characteristic = "自由之城"
    self.landmarks = self._init_landmarks()
    self.factions = self._init_landmarks()
    self.factions = ["西风骑士团","晨曦酒庄","冒险家协会"]
    self.specialties = ["蒲公英""风车菊","塞西莉亚花"]

def_init_landmarks(self):
  """初始化蒙德地标数据"""
  return{
   "蒙德城":{
      "位置":"果酒湖中央",
      "结构":{
        "城门桥":"唯一陆路通道",
        "西风大教堂":
           "位置":"城市最高处",
           "功能"["七天神像","祈祷场所""修女办公处"],
           "特殊NPC":["维多利亚修女","芭芭拉"]
                                            },
          "风神广场""标志物""巴巴托斯雕像",
           "事件触发点":["每日委托","风花节活动"]
           }
           }                                                    },
  "果酒湖":{
    "生态"["螃蟹","垂钓点"],
    "环绕状态":"完成包围蒙德城"
},
  "星落湖":{
  "七天神像":"初始解锁点""特殊机制":"水面可冻结行走"
  }
  }
def get_travel_guide(self):
  """生成蒙德旅行指南"""
  return{
     "推荐等级":"1-25级",
     "元素主题":"风元素",
     "特色玩法":[
       "风神瞳收集""蒲公英探索""风龙废墟解谜"
       ],
       "传送点分布":self._get_teleport_points()
       }
     
     def _get_teleport_points(self):
     """获取所有传送锚点数据"""
     return[
      {"名称":"蒙德城正门","类型":"城市锚点"},
      {"名称":"西风大教堂","类型":"特殊锚点"},
      {"名称":"风起地","类型":"野外锚点"}
      ]
    def trigger_special_events(self,event_type):
      """蒙德特色事件触发"""
      if evnent_type == "风花节":
         return self._windblume_festival()
     elif evnet_type = ="羽球节":
       return self._summer_festival()
     
     def_windblum_festival(self):
        """风花节活动数据"""
        return{
         "持续时间":"游戏内15天",
         "特殊NPC":["温迪","琴"],
         "限定玩法":["风花球射击","诗歌创作"]
         }

class PlayerInterraction:
   def_init_(self,player):
     self.player = palyer
     self.region_status = {
     "探索度":0.0
     "解锁传送点":[],
     "收集进度":{
       "风神瞳":0,
       "宝箱":{"普通":0,"精致":0"珍贵":0}
       }
       }
      def update_exploration(self,area):
       """更新区域探索数据"""
       self.region_status["探索度"] += area[ 
                 } 
         
          
             

           
           
                                            

蒙德是一个多山的国家,地形以山地和峡谷为主,主要分为五个部分:明冠山地、苍风高地、坠星山谷、风啸山坡以及龙脊雪山。龙脊雪山更是当前游戏内最高点所在地,仅有风起地、坠星山谷、风龙废墟、晨曦酒庄等地存在部分平原。果酒湖是当前游戏内最大的湖泊,蒙德城坐落于果酒湖中心偏南的一座大岛上

2.璃月是提瓦特大陆七国之一,位于大陆东方,以商港璃月港为核心,该港口灵感来源于凤凰古城与悬空寺 。作为全大陆唯一铸币厂“黄金屋”所在地,璃月生产通用货币摩拉,信仰岩神摩拉克斯并以“契约之城”著称 。该国地貌多样,涵盖丘陵、山地和平原,曾为魔神战争主战场 。经济发展得益于三面环山的地理位置,陆路矿藏经冶炼成为出口工艺品,海运贸易路线成熟使其成为提瓦特重要商业中心。行政由璃月七星管理,主要节日包括海灯节与逐月节。

璃月

class Nation:
    def __init__(self, name, region, capital, faith, currency):
        self.name = name
        self.region = region
        self.capital = capital
        self.faith = faith
        self.currency = currency
        self.landforms = []
        self.economy = {}
        self.history = []
        self.government = []
        self.festivals = []
        
    def add_landform(self, landform):
        """添加地形特征"""
        self.landforms.append(landform)
        
    def set_economy(self, economy):
        """设置经济体系"""
        self.economy = economy
        
    def add_history(self, event):
        """添加历史事件"""
        self.history.append(event)
        
    def set_government(self, government):
        """设置政府机构"""
        self.government = government
        
    def add_festival(self, festival):
        """添加节日"""
        self.festivals.append(festival)
        
    def describe(self):
        """描述国家信息"""
        print(f"🏮 {self.name}")
        print(f"位置:{self.region}")
        print(f"首都:{self.capital}")
        print(f"信仰:{self.faith}")
        print(f"货币:{self.currency}")
        
        print("\n地形特征:")
        for landform in self.landforms:
            print(f"- {landform}")
            
        print("\n经济体系:")
        for key, value in self.economy.items():
            print(f"- {key}: {value}")
            
        print("\n历史事件:")
        for event in self.history:
            print(f"- {event}")
            
        print("\n政府机构:")
        for agency in self.government:
            print(f"- {agency}")
            
        print("\n传统节日:")
        for festival in self.festivals:
            print(f"- {festival}")

# 创建璃月
liyue = Nation(
    name="璃月",
    region="提瓦特大陆东方",
    capital="璃月港",
    faith="岩神摩拉克斯",
    currency="摩拉"
)

# 添加地形特征
liyue.add_landform("丘陵")
liyue.add_landform("山地")
liyue.add_landform("平原")

# 设置经济体系
liyue.set_economy({
    "铸币业": "拥有全大陆唯一铸币厂'黄金屋'",
    "矿业": "陆路矿藏经冶炼成为出口工艺品",
    "海运贸易": "成熟的海运贸易路线,成为提瓦特重要商业中心",
    "港口特色": "商港璃月港,灵感来源于凤凰古城与悬空寺"
})

# 添加历史事件
liyue.add_history("曾为魔神战争主战场")
liyue.add_history("以'契约之城'著称")

# 设置政府机构
liyue.set_government(["璃月七星"])

# 添加传统节日
liyue.add_festival("海灯节")
liyue.add_festival("逐月节")

# 描述璃月
liyue.describe()

这个代码实现了璃月的基本设定,包括:
地理位置和首都
信仰体系和货币
多样的地形特征
独特的经济体系(铸币业、矿业、海运贸易)
重要历史事件
政府管理机构(璃月七星)
传统节日(海灯节、逐月节)
你可以通过调用liyue.describe()来查看璃月的详细信息。

五.特色系统

1.声望系统

与特定NPC对话,将可以接取任务,提升声望值。声望等级提高后,将解锁各类声望奖励。玩家冒险等阶达到25级后开放城市声望系统,城市声望分为蒙德声望和璃月声望,其中蒙德声望的解锁条件是完成魔神任务序章 第一幕“捕风的异乡人”;璃月声望解锁条件是完成魔神任务第一章 第二幕“辞行久远之躯”;稻妻声望解锁条件是完成魔神任务第二章·第一幕“不动鸣神,恒常乐土”。
地区声望解锁后,玩家可以在“西风骑士团”后勤·赫塔、“璃月总务司”干事·小雨和“社奉行代行”斑目百兵卫处,接取新的“讨伐悬赏”、“居民请求”任务,也能领取“世界探索”、“蒙德任务”、“璃月任务”、“稻妻任务”或“须弥任务”带来的声望值提升。声望等级提升后,可以解锁特殊城市功能,领取食谱、声望小道具锻造图纸、名片、风之翼等奖励

声望任务

稻妻任务

class ReputationSystem:
    def __init__(self):
        # 声望数据结构
        self.reputation = {
            "蒙德": {"level": 0, "exp": 0, "unlocked": False, "requirements": "魔神任务序章 第一幕'捕风的异乡人'"},
            "璃月": {"level": 0, "exp": 0, "unlocked": False, "requirements": "魔神任务第一章 第二幕'辞行久远之躯'"},
            "稻妻": {"level": 0, "exp": 0, "unlocked": False, "requirements": "魔神任务第二章·第一幕'不动鸣神,恒常乐土'"}
        }
        
        # 声望等级所需经验
        self.level_requirements = {
            1: 100,
            2: 250,
            3: 450,
            4: 700,
            5: 1000,
            6: 1400,
            7: 1900,
            8: 2500
        }
        
        # 声望奖励
        self.rewards = {
            "蒙德": {
                1: {"type": "食谱", "item": "提瓦特煎蛋"},
                2: {"type": "锻造图纸", "item": "风之翼初级"},
                3: {"type": "名片", "item": "蒙德风之名片"},
                4: {"type": "功能", "item": "蒙德地区快速传送折扣"},
                5: {"type": "食谱", "item": "风神杂烩"},
                6: {"type": "锻造图纸", "item": "风之翼高级"},
                7: {"type": "名片", "item": "西风骑士团名片"},
                8: {"type": "功能", "item": "蒙德商店折扣"}
            },
            "璃月": {
                1: {"type": "食谱", "item": "璃月鱼汤"},
                2: {"type": "锻造图纸", "item": "岩之翼初级"},
                3: {"type": "名片", "item": "璃月港名片"},
                4: {"type": "功能", "item": "璃月地区快速传送折扣"},
                5: {"type": "食谱", "item": "璃月糯米鸡"},
                6: {"type": "锻造图纸", "item": "岩之翼高级"},
                7: {"type": "名片", "item": "璃月七星名片"},
                8: {"type": "功能", "item": "璃月商店折扣"}
            },
            "稻妻": {
                1: {"type": "食谱", "item": "稻妻寿司"},
                2: {"type": "锻造图纸", "item": "雷之翼初级"},
                3: {"type": "名片", "item": "稻妻城名片"},
                4: {"type": "功能", "item": "稻妻地区快速传送折扣"},
                5: {"type": "食谱", "item": "稻妻拉面"},
                6: {"type": "锻造图纸", "item": "雷之翼高级"},
                7: {"type": "名片", "item": "雷电将军名片"},
                8: {"type": "功能", "item": "稻妻商店折扣"}
            }
        }
        
        # NPC对话任务
        self.npcs = {
            "蒙德": {"name": "西风骑士团后勤·赫塔", "location": "蒙德城", "quests": ["讨伐悬赏", "居民请求"]},
            "璃月": {"name": "璃月总务司干事·小雨", "location": "璃月港", "quests": ["讨伐悬赏", "居民请求"]},
            "稻妻": {"name": "社奉行代行·斑目百兵卫", "location": "稻妻城", "quests": ["讨伐悬赏", "居民请求"]}
        }
    
    def unlock_reputation(self, city, player_level, completed_quests):
        """解锁城市声望系统"""
        if self.reputation[city]["unlocked"]:
            print(f"{city}声望系统已解锁!")
            return
            
        if player_level < 25:
            print(f"冒险等阶不足25级,无法解锁{city}声望系统!")
            return
            
        required_quest = self.reputation[city]["requirements"]
        if required_quest not in completed_quests:
            print(f"未完成解锁条件:{required_quest}")
            return
            
        self.reputation[city]["unlocked"] = True
        print(f"🎉 成功解锁{city}声望系统!")
        print(f"你现在可以在{self.npcs[city]['location']}找到{self.npcs[city]['name']}接取任务了。")
        
    def gain_reputation(self, city, amount):
        """增加声望值"""
        if not self.reputation[city]["unlocked"]:
            print(f"{city}声望系统未解锁,无法获得声望值!")
            return
            
        self.reputation[city]["exp"] += amount
        print(f"获得{amount}{city}声望值!")
        
        # 检查是否升级
        self.check_level_up(city)
        
    def check_level_up(self, city):
        """检查是否可以升级"""
        current_level = self.reputation[city]["level"]
        current_exp = self.reputation[city]["exp"]
        
        for level, required_exp in self.level_requirements.items():
            if level > current_level and current_exp >= required_exp:
                self.reputation[city]["level"] = level
                print(f"恭喜!{city}声望等级提升至Lv.{level}!")
                self.claim_reward(city, level)
                
    def claim_reward(self, city, level):
        """领取声望奖励"""
        if level in self.rewards[city]:
            reward = self.rewards[city][level]
            print(f"获得奖励:{reward['type']} - {reward['item']}")
        else:
            print("当前等级没有奖励。")
            
    def talk_to_npc(self, city, npc_name):
        """与NPC对话接取任务"""
        if not self.reputation[city]["unlocked"]:
            print(f"{city}声望系统未解锁,无法与NPC对话!")
            return
            
        if self.npcs[city]["name"] != npc_name:
            print(f"{npc_name}不是{city}声望系统的NPC!")
            return
            
        print(f"你与{self.npcs[city]['location']}{npc_name}对话成功!")
        print(f"可接取的任务:{', '.join(self.npcs[city]['quests'])}")
        quest_choice = input("请选择要接取的任务:")
        
        if quest_choice in self.npcs[city]["quests"]:
            print(f"你接取了'{quest_choice}'任务!完成后将获得声望值奖励。")
            # 这里可以添加任务完成逻辑
            self.gain_reputation(city, 50)  # 假设任务奖励50声望值
        else:
            print("无效的任务选择!")
            
    def show_status(self):
        """显示声望状态"""
        print("\n--- 声望系统状态 ---")
        for city, data in self.reputation.items():
            status = "已解锁" if data["unlocked"] else "未解锁"
            print(f"{city}声望:Lv.{data['level']} ({data['exp']}/{self.level_requirements.get(data['level']+1, 'MAX')} EXP) - {status}")
            if not data["unlocked"]:
                print(f"  解锁条件:冒险等阶25级,完成任务'{data['requirements']}'")
        print("----------------------\n")

# 模拟游戏过程
if __name__ == "__main__":
    player_level = 20
    completed_quests = ["魔神任务序章 第一幕'捕风的异乡人'"]
    reputation_system = ReputationSystem()
    
    # 初始状态
    reputation_system.show_status()
    
    # 尝试解锁声望(等级不足)
    reputation_system.unlock_reputation("蒙德", player_level, completed_quests)
    
    # 提升玩家等级
    player_level = 25
    print(f"\n玩家冒险等阶提升至{player_level}级!")
    
    # 解锁蒙德声望
    reputation_system.unlock_reputation("蒙德", player_level, completed_quests)
    
    # 解锁璃月声望(未完成任务)
    reputation_system.unlock_reputation("璃月", player_level, completed_quests)
    
    # 完成璃月解锁任务
    completed_quests.append("魔神任务第一章 第二幕'辞行久远之躯'")
    print("\n你完成了璃月解锁任务!")
    
    # 解锁璃月声望
    reputation_system.unlock_reputation("璃月", player_level, completed_quests)
    
    # 显示当前状态
    reputation_system.show_status()
    
    # 与NPC对话接取任务
    reputation_system.talk_to_npc("蒙德", "西风骑士团后勤·赫塔")
    
    # 显示更新后的状态
    reputation_system.show_status()
    
    # 通过世界探索获得声望
    print("\n通过世界探索获得声望值!")
    reputation_system.gain_reputation("璃月", 150)
    
    # 显示最终状态
    reputation_system.show_status()

这个代码实现了以下功能:
声望系统的解锁机制,包括冒险等阶要求和剧情任务要求
城市声望数据管理,包括等级、经验值和解锁状态
与特定 NPC 对话接取任务的功能
声望等级提升和奖励领取系统
声望奖励包括食谱、锻造图纸、名片和特殊功能
你可以根据需要进一步扩展这个系统,比如添加更多城市(须弥、枫丹等)或丰富任务类型和奖励内容。

2.钓鱼系统
需要开启“尘歌壶”系统并完成任务“鱼群大爆发”才能解锁。若在某水域中看到水面波纹荡漾,说明此处是一个鱼群汇聚的钓鱼点,接近钓鱼点与之交互后开始钓鱼。每个钓鱼点的刷新周期为3天,在刷新周期内,昼夜交替会影响鱼群的出没。为了方便钓鱼点的记录,地图标点中新增了鱼点图标。玩家可以按需进行标记。
每处水域生活的鱼类不尽相同,在钓鱼准备中可以查看此处出没的鱼类,并挑选对应的鱼竿和鱼饵。在不同区域使用对应的鱼竿,可以提高钓鱼成功率。玩家可以在合成台制作鱼饵,不同种类的鱼儿喜爱的鱼饵也不同。玩家可以在“图鉴-生物志”当中,查看已经钓获的各类游鱼。钓获的鱼类可以在各地的钓鱼协会兑换物品,也可以加工为鱼肉食材。在璃月钓鱼协会处,玩家可以兑换“灵沼云池”摆设图纸,通过钓鱼获得的观赏鱼,可被饲养于这种水池中。在稻妻钓鱼协会处,玩家可以兑换“长柄武器·渔获”及其精炼材料

钓鱼系统

class FishingSystem:
  def_init_(self):
    self.unlocked =' False # 是否已解锁钓鱼系统
    self.fishing_spots = {} # 钓鱼点数据
    self.fish_records = {}  # 图鉴记录
    self.palyer_gear = { # 玩家装备
       'rods':{},      #拥有的鱼竿
       'baist':{}      #拥有的鱼饵
      }
 def unlock_system(self):
  """完成'鱼群大爆发'任务后解锁"""
  if check_quest_completed("鱼群大爆发")and check_realm_unloacked():
  self.ublocked  = True
  self._init_map_markers()

def _init_map_makers(self):
  """初始化地图点标记"""
  self.fishing_spots = load_fishing_spots_data()
  add_custom_map_maker("fish_spot","鱼点图标"def start_fishing(self,spot_id):
"""在指定钓鱼点开始钓鱼"""
 if not self.ulocked:
    raise SystemLockedError("请先完成'鱼群大爆发'任务")
   
   spot = self.fishing_spots[spot_id]
   current_fish = self._get_available_fish(spot)
   
   if not self._check_gear_suitable(spot):
      print("警告:当前装备不适合此钓点)
   
   return FishingMiniGame(
       spot=spot,
       avaibalbe_fish=current_fish,
       player_gear=self.palyer_gear
       )
     def record_fish(self,fish_type):
      """记录钓到的鱼类"""
      self.fish_records[fish_type] = self.fish_records.get(fish_type,0)+1
      update_illustration("生物志",fish_type)
   
   def exchange_rewards(self,region):
       """在钓鱼协会兑换奖励"""
       if region == "璃月":
         return self.exchange_liyue()
        elif region == "稻草":
          return self._exchangde_inazuma()
        
        def _exchange_liyue(self):
        """璃月钓鱼协会兑换"""
        if check_fish_count("观赏鱼",10:
          return"灵沼云池摆设图纸"
        
       def_exchange_inazuma(self):
          """稻妻钓鱼协会兑换"""
          if check_fish_count("特种鱼",20):
             return"长柄武器-渔获"
            elif check_fish_count("特种鱼",10:
              return"渔获精炼材料"

class FishingMiniGame:
    """钓鱼小游戏逻辑"""
    def_init_(self,spot,available_fish,player_gear):
    self.spot = spot
    self.available_fish = available_fish
    self.current_gear = player_gear

def cast_line(self):
  """抛竿"""
  self._calculate_success_rate()
  self._start_timing()
 
  def _calculate_success_rate(self):
    """计算成功率"""
    base_rate = 0.7
    #区域匹配加成
    if self.current_gear['rod']['region'] == self.spot['region']:
    base_rate += 0.2
    #鱼饵匹配检测
    if self.current_gear['rod'][region']==self.spot['region']:
    base_rate += 0.2
  #鱼饵匹配检测
  if self.current_gear['bait'] in self.available_fish['preferred_baits']:
    base_rate += 0.1
    return min(base_rate,0.95)
 
 def handle_bite(self,reaction_time)"""处理鱼咬钩"""
   if reaction_time < self.available_fish['difficulty']:
   return self._reel_in()
  else:
    return"鱼跑掉了"
 
 def _reel_in(self):
     """收杆"""
     fish_tyep = self._determine_catch()
     return{
      'success':True,
      'fish_type':fish_type,
      'weight':random.uniform(1.0,5.0)
      }
 
 #实用函数
 def check_time_of_day():
    """检查当前游戏内昼夜时间"""
    return current_game_time()

def load_fishing_spots_data():
 """从游戏数据加载钓鱼点信息"""
 return game_db.query("FishingSpots")

def check_quest_completed(quest_name):
  """检查任务是否完成"""
  return palyer.quest_long.check_completed(quest_name)
           
      
       
   
  

   
                   
                      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值