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