《倩女幽魂》游戏以聂小倩和宁采臣之间的爱情故事为主线,玩家可以通过剧情任务一步步感受这段恋情,也能够以过客的身份,感受兰若寺的气息,并与小倩、燕赤霞、姥姥面对面接触,本文用python代码介绍:
一.倩女幽魂聂小倩在兰若寺和宁采臣,燕赤霞,姥姥的剧情代码:
import random
from datetime import datetime
class NieXiaoqian
def_init_(self):
self.name = "聂小倩"
self.identity = "幽魂"
self.age = "18岁(去世时)"
self.appearance = "容貌绝美,肤如凝脂"
self.character = "温柔善良但带忧郁"
self.abilities = ["飘浮","夜间显形","琴棋书画"]
self.location = "兰若寺附近"
self.relationships = {
"宁采臣":"爱慕之人",
"姥姥":"控制她的树妖"
"燕赤霞":"帮助她的道士"
}
self.story_progress = 0
self.mood = "忧郁"
self.last_interaction_time = None
def greet(self):
greetings = [
f"self.name}向公子施礼...",
"小倩这厢有礼了...",
"长夜漫漫,公子可愿听小倩抚琴一曲?"
]
return random.choice(greetings)
def respond(self,palyer_input):
self.last_interaction_time = datetime.now()
#更新心情
self.update_mood()
#根据故事进度和输入生成回应
if self.story_progress == 0;
responses = [
"公子为何深夜独自在此?这兰若寺...不太平。",
"小倩本是良家女子,不幸早逝,魂魄被姥姥所困...",
"公子若不嫌弃,可到亭中歇息片刻。"
]
if"名字"in palyer_input or "谁"in player_input:
return f"奴家姓聂,名小倩...公子叫我小倩便好。"
self.story_progress = 1
return random.choice progress == 1:
if"宁采臣"in player_input or "书生" in player_input:
self.mood "羞涩"
return "宁公子...他是个正直善良的人,小倩不敢有非分之想。"
elif."姥姥"in player_input or"树妖"in player_input:
self.mood = "恐惧"
return "嘘...莫要提她。姥姥法力高强,强迫我害人...小倩实在不愿。"
else:
return"公子可知道,这世上有比鬼更可怕的东西..."
elif self.story progeress >= 2:
if"帮助"in player_input or "救"in player_input:
self.mood = "希望"
return"燕大侠说,若能找到我的骨灰坛,让我入土为安,便可解脱..."
elif"骨灰"in player_input or "坛" in player_input:
return "就在寺后老槐树下...但那里有姥姥的耳目。"
else:
return"公子小心,夜已深了..."
def upadate_mood(self):
moods = ["忧郁","哀伤","温柔","感激"]
if self.mood == "恐惧":
self.mood = "忧郁"
else:
self.mood = random.choice(moods)
def play_music(self):
instruments = ["古琴","琵琶","箫"]
Pieces =["《广陵散》","《梅花三弄》","《阳关三叠》"]
return f"{self.name}轻抚{random.choice(instruments)},弹奏起{random.choice(pieces)}..."
def describe(self):
return(
f"{self.name}是一位{self.identity},{self.age}。\n"
f"她{self.appearance},性格{self.character}。\n"
f"当前心情:{self.mood}\n"
f"能力:{','.join(self.abilities)}\n"
f"所在地:{self.location}"
)
#示例交互
if_name_=="_main_":
xiaoqian = NieXiaoqian()
print(xiaoqian.greet())
while True:
user_input = input("你:")
if user_input.lower()in["exit","bye","再见"]:
print(f"xiaoqian.name}:公子保重...小倩告辞了。
break
response = xiaoqian.respond(user_input)
print(f"{xiaoqian.name}:{response}")
#随机触发特殊动作
if random.random() < 0.2:
print(f"[系统]:{xiaoqian.play_music()}")
倩女幽魂兰若寺聂小倩:
倩女幽魂兰若寺聂小倩和宁采臣:
倩女幽魂兰若寺:
二.倩女幽魂游戏主人公宁采臣骑着战狮坐骑来往北京,金陵,杭州,阿格拉四个主城移动的代码:
import time
from enum import Enum
class City(Enum):
BEIJING = "北京"
JINLING = "金陵"
HANGZHOU = "杭州"
AGRA = "阿格拉"
class NingCaichen;
def_init_(self):
self.name = "宁采臣"
self.mount = "战狮"
self.current_city = City.BEIJING # 默认起始城市为北京
def ride_to(self,destination:City):
print(f"{self.name}骑士{self.mount},从{self.current_city.value}出发前往{destination.value}...")
#模拟移动时间
time.sleep(2)
#更新当前城市
self.current_city = destination
print(f"已到达{destination.value}!")
def show_location(self):
print(f"{self.name}当前在{self.current_city.value}")
#使用示例
if_name_=="_main_":
ning = NingCaichen()
#显示初始位置
ning.show_location()
#前往金陵
ning.ride_to(City.JINGLING)
#前往杭州
ning.ride_to(City.HANGZHOU)
#前往阿格拉
ning.ride_to(City.AGRA)
#返回北京
ning.ride_to(City.BEIJING)
#最终位置
ning.show_location()
倩女幽魂金陵:
倩女幽魂杭州:
倩女幽魂阿格拉:
倩女幽魂神机营坐骑战狮:
定义了一个City枚举类,表示四个主城:北京、金陵、杭州和阿格拉
创建了NingCaichen类,表示游戏角色宁采臣
类中包含:
角色名称和坐骑名称属性
当前所在城市属性
骑乘移动方法ride_to()
显示当前位置方法show_location()
展示了宁采臣在四个主城之间的移动过程
三.在《倩女幽魂》中,结婚分为提亲,订亲,合八字,迎娶,婚礼等几个步骤。当玩家双方为单身男女,等级均大于等于50级,并且双方为好友,且友好度大于等于10000,双方没有人进入自杀流程和出家流程就可以申请结婚。
倩女幽魂的婚姻系统代码:
class MarriageSyetem:
def_init_(self):
self.married_couples = {} # 存储已婚玩家ID对
self.marriage_requests = {} # 存储求婚请求
def propose_marriage(self,proposer_id,target_id,ring_item_id):
"""求婚功能"""
if.self.check_marriage_conditions(proposer_id,target_idrri):
self.marriage_requests[target_id] = {
'proposer':proposer_id,
'ring':ring_item_id,
'time':current_time()
}
send_notification(target_id,f"{get_player_name(proposer_id)}向你求婚了!")
return True
return False
def check_marriage_conditions(self,paly1_id,palyer2_id):
***检查结婚条件"""
return(
are players online(player1 id,palyer2 id)and
not self.is_married(player1_id)and
not self.is_married(player2_id)and
get_player_gender(player1_id)!=
get_player_gender(player2_id)and
get_player_level(player1_id) >= 50 and
get_player_level(palyer2_id) >= 50 and
calculate_distance(player1_id,palyer2_id) < 50
)
def accept_marriage(self,acceptor_id):
"""接受求婚"""
if acceptor_id in self.marriage_requests:
request = self.marriage_requests.pop(acceptor_id)
proposer_id = request['proposer']
#创建婚姻关系
self.married_couples[proposer_id] = acceptor_id
self.married_couples[acceptor_id] = proposer_id
#扣除戒指
remove_item(proposer_id,request['ring'])
#触发婚礼场景
start_wedding_ceremony(proposer_id,acceptor_id)
return True
return False
def divorce(self,palyer_id):
"""离婚功能"""
if self.is_married(player_id):
spouse_id = self.married_couples[plaer_id]
del self.married_couples[player_id]
del self.married_couples[spouse_id]
#添加离婚冷却时间
add_divorce_cooldown(player_id,spouse_id)
send_notification(spouse_id,"你的伴侣已与你解除婚姻关系")
return True
return False
def is_married(self,player_id):
"""检查是否已婚"""
return self.married_couples.get(player_id)
def get_spouse(self,player_id):
"""获取配偶信息""'
return self.married_couples.get(player_id)
def get_marriage_benefits(self,player_id):
"""获取婚姻加成"""
if self.is_married(player_id):
spouse_id = self.get_spouse(player_id)
intimacy = get_intimacy_level(palyer_id,spouse_id)
return calculate_benefits(intimacy)
return None
倩女幽魂结婚:
求婚功能:
需要满足等级、性别、距离等条件
需要消耗求婚戒指道具
向对方发送求婚请求
婚礼仪式:
创建专属婚礼场景
邀请好友参加
婚礼特殊效果和动画
婚姻关系:
记录配偶信息
显示婚姻状态
夫妻专属称号
夫妻互动:
亲密度系统
夫妻任务
夫妻技能加成
离婚功能:
单方面离婚
离婚冷却时间
财产分割处理
四.倩女幽魂交易系统摆摊代码:
import time
from enum import Enum
class ItemQuality(Enum):
COMMON = 1 #普通
FINE = 2 #精良
EXQUISITE = 3 #精美
RARE = 4 # 稀有
EPIC = 5 #史诗
class GameItem:
def_init_(self,item_id,name,quality,price,quantity = 1):
self.item_id = item_id
self.name = name
self.quality = quality
self.base_price = price
self.quantity = quantity
def get_display_price(self):
return f"{self.base_price}银两"
class Stall:
MAX_ITEMS = 12 # 最大摆放物品数量
def_init_(self,owner_id,owner_name):
self.owner_id = owner_id
self.owner_name = owner_name
self.items = []
self.open_time = None
self.is_open = False
def add_item(self,item):
if len(self.items)>= self.MAX_ITEMS;
return False,"摊位已满,无法添加更多物品"
if item.quantity <= 0:
return False,"物品数量必须大于0"
self.items.append(item)
return False,"物品数量必须大于0"
self.items.append(item)
return True,f"成功添加物品:{item.name}"
def remove_item(self,item_id):
for i,item in enumerate(self.items):
if item.item_id == item_id:
removed_item = self.items.pop(i)
return True,f"已移除物品:
(removed_item.name)"
return False,"未找到指定物品:"
def open_stall(self,stall_name):
if self.is_open:
return False,"摊位已经开启"
if not self.items:
return False,"摊位没有物品,无法开启"
self.is_open = True
self.open_time = time.time()
self.stall_name = stall_name
retrn True,f"摊位【{stall_name}】已开启"
def close_stall(self):
if not self.is_open:
return False,"摊位已经关闭"
self.is_open = False
duration = time.time() - self.open_time
return True,f"摊位已关闭,本次营业时长:
{duration//60}分钟"
def get_stall_info(self):
info = {
"owner":self.owner_name,
"stall_name":getattr(self,'stall_name','未命名摊'),
"status":"营业中"if self.is_open else"已关闭",
"items":[]
}
for item in self.items:
info["items"].append({
"id":item.item_id,
"name":item.name,
"quality":item.quality.name<
"price":item.get_display_price(),
"quanity":item.quantity
})
return info
class TradeSystem
def_init_(self):
self.active_stalls = {}
def register_stall(self,stall):
if stall.owner_id in self.active_stalls:
return False,"您已经有一个摊位了"
if not stal.items:
return False,"摊位没有物品,无法注册"
self.active_stalls[stall.owener_id] = stall
return True,"摊位注册成功"
def unregister_stall(self,owner_id):
if owner_id not in self.active_stalls:
return False,"您没有活跃的摊位"
stall = self.active_stalls.pop(owner_id)
stall.close_stall()
return True,"摊位已注销"
def browse_stalls(self,filters=None):
"""浏览所有摊位"""
result = []
for stall in self.active_stalls.values():
if not stall.is_open:
continue
stall_info = stall.get_stall_info()
if filters:
if filters.get("min_quality"):
stall_info["items"] = [item for item in stall_info["items"]
if ItemQuality[item["quality"]].value >= filters["min_quality"]]
if filters.get("max_price"):
stall_info["items"] = [item for item in stall_info["items"]
if item["price"] <= filters["max_price"]]
if stall_info["items"]:#只返回有符合条件物品的摊位
result.append(stall_info)
return result
def buy_item(self,buyer_id,stall_owner_id,item_id,quantity):
if stall_owner_id not in self.active_stalls:
return False,"摊位不存在"
stall = self.active_stalls[stall+owner_id ]
if not stall.is_open:
return False,"摊位未营业"
for item in stall.items:
if item.item_id == item_id:
if item.quantity < quantity:
return False,"物品数量不足"
#这里应该有银两交易逻辑
total_price = item.base_price*quantity
#假设有deduct_money和add_money方法处理货币交易
#扣除买家银两,增加卖家银两
#if not deduct_money(buyer_id,total_price):
# return False"银两不足"
#add_money(stall_owner_id,total_price)
item.quantity -= quantity
if item.quantity == 0:
stall.remove_item(item_id)
return True,f"成功购买{quantity}个{item.name}"
return False,"未找到指定物品"
#使用示例
if_name_=="_main_":
#创建交易系统
trade_system = TradeSystem()
#玩家创建物品
word = GeneItem(101,“青锋剑”,ItemQuality.FINE,5000)
armor = GameItem(102,"玄铁甲",ItemQuality.EXQUISITE,15000)
potion = GameItem(201,"回春丹",ItemQuality.COMMON,200,10)
#玩家开设摊位
player_stall = Stall("player_123","江湖商人")
player_stall.add_item(sword)
player_stall.add_item(armor)
player_stall.add_item(potion)
#注册并开启摊位
trade_system.register_stall(player_stall)
player_stall.open_stall("极品装备专卖")
另一个玩家浏览摊位
print("===浏览所有摊位===")
stalls = trade_system.browse_stalls()
for stall in satlls:
print(f"摊位名:{stall['stall_name']},摊主:{stall['owner']}")
for item in stall["items"]:
print(f" - {item['name']}[{item['quality']}]价格:{item['price']}数量:{item['quantity']}"}
#购买物品示例
#success,message = trade_system.buy_item("buyer_456","plyer_123",201,5)
#print(message)
#关闭摊位
player_stall.close_stall()
trade_system.unregister_stall("player_123")
关键功能说明
物品系统:
GameItem 类表示游戏中的可交易物品
包含物品ID、名称、品质、基础价格和数量等属性
摊位系统:
Stall 类实现摊位的基本功能
可以添加/移除物品、开启/关闭摊位
限制最大摆放物品数量(通常为12个)
交易系统:
TradeSystem 管理所有活跃摊位
提供摊位注册/注销功能
支持浏览摊位和购买物品
交易流程:
卖家创建摊位并添加物品
买家浏览摊位并选择购买
系统处理货币交易和物品转移
倩女幽魂交易系统摆摊: