用户:
夜明逢生查看:0 回复:6 评论:0 创建时间:2023-07-20T15:29:07
这是我目前为止最用心的一个项目
可以当做参考和范例使用 也可以当做引擎来玩
如何运行?
1.将以下代码复制黏贴到py文件上
注意! 要放在同一个目录下 不要分开运行 否则会报错
2.运行 代码1 即可正常运行
注意! 不要在在线海龟编辑器上运行 推荐线下或以python源文件运行
代码1(主体代码)
import random
import copy
import json
from 数据储存 import 数据储存
# 整理数据
数据_ = 数据储存()
我方数据 = 数据_['我方数据']
敌方数据 = 数据_['敌方数据']
操作选项 = {0:'无',1:'攻击',2:'技能',3:'背包',4:'行动',5:'防守'}
行动技能信息 = 数据_['行动技能信息']
物品信息 = 数据_['物品信息']
技能信息 = 数据_['技能信息']
结果信息 = 数据_['结果信息']
分析信息 = 数据_['分析信息']
我方数据现状 = copy.deepcopy(我方数据)
敌方数据现状 = copy.deepcopy(敌方数据)
我方角色列表 = list(我方数据.keys())
敌方角色列表 = list(敌方数据.keys())
删除物品 = []
回合 = 0
class 操作:
# 储存遗传变量
def __init__(self, 我方数据,敌方数据, 我方数据现状,敌方数据现状,角色列表, 我方操作配置,敌方操作配置,行动技能信息,删除物品):
self.我方数据 = 我方数据
self.敌方数据 = 敌方数据
self.我方数据现状 = 我方数据现状
self.敌方数据现状 = 敌方数据现状
self.角色列表 = 角色列表
self.我方操作配置 = 我方操作配置
self.敌方操作配置 = 敌方操作配置
self.行动技能信息 = 行动技能信息
self.删除物品 = 删除物品
def 指挥(self,回答,角色,阵营):
选择 = 选择实行对象(回答,阵营,角色)
if 阵营 == '我方':
self.我方操作配置[角色] = [回答,选择]
if 阵营 == '敌方':
self.敌方操作配置[角色] = [回答,选择]
def 状态检查(self,角色,阵营):
if 阵营 == '我方':
if self.我方数据现状[角色]['血量'] > self.我方数据[角色]['血量']:
self.我方数据现状[角色]['血量'] = self.我方数据[角色]['血量']
if self.我方数据现状[角色]['内力'] > self.我方数据[角色]['内力']:
self.我方数据现状[角色]['内力'] = self.我方数据[角色]['内力']
if self.我方数据现状[角色]['内力'] < 0:
self.我方数据现状[角色]['内力'] = 0
if self.我方数据现状[角色]['力量'] < 0:
self.我方数据现状[角色]['力量'] = 0
if self.我方数据现状[角色]['防御'] < 0:
self.我方数据现状[角色]['防御'] = 0
if self.我方数据现状[角色]['速度'] < 0:
self.我方数据现状[角色]['速度'] = 0
self.我方数据现状[角色]['是否能战斗'] = 1
数据 = self.我方数据现状
else:
if self.敌方数据现状[角色]['血量'] > self.敌方数据[角色]['血量']:
self.敌方数据现状[角色]['血量'] = self.敌方数据[角色]['血量']
if self.敌方数据现状[角色]['内力'] > self.敌方数据[角色]['内力']:
self.敌方数据现状[角色]['内力'] = self.敌方数据[角色]['内力']
if self.敌方数据现状[角色]['内力'] < 0:
self.敌方数据现状[角色]['内力'] = 0
if self.敌方数据现状[角色]['力量'] < 0:
self.敌方数据现状[角色]['力量'] = 0
if self.敌方数据现状[角色]['防御'] < 0:
self.敌方数据现状[角色]['防御'] = 0
if self.敌方数据现状[角色]['速度'] < 0:
self.敌方数据现状[角色]['速度'] = 0
self.敌方数据现状[角色]['是否能战斗'] = 1
数据 = self.敌方数据现状
if random.randint(1,3) == 1:
if '僵硬' in 数据[角色]['状态']:
数据[角色]['是否能战斗'] = 0
print(f'[{角色}]僵硬住了 无法动弹')
if '中邪' in 数据[角色]['状态']:
数据[角色]['是否能战斗'] = 0
伤害 = 数据[角色]['力量'] * random.uniform(5,6)
伤害 = max(伤害 - 数据[角色]['防御'] * random.uniform(4,5), 0)
伤害 = round(伤害)
print(f'[{角色}]异常了 对自己造成{伤害}伤害')
数据[角色]['血量'] -= 伤害
if random.randint(1,4) == 1:
if '虚弱' in 数据[角色]['状态']:
if 数据[角色]['防御'] >= 10:
数据[角色]['防御'] -= 1
print(f'[{角色}]虚弱了 防御减少1')
else:
print(f'[{角色}]虚弱了 无法动弹')
数据[角色]['是否能战斗'] = 0
if 数据[角色]['血量'] <= 0:
数据[角色]['状态'] = 状态(数据[角色]['状态'], '濒喵', '添加')
数据[角色]['血量'] -= 70
else:
数据[角色]['状态'] = 状态(数据[角色]['状态'], '濒喵', '减少')
if 阵营 == '我方':
self.我方数据现状 = 数据
else:
self.敌方数据现状 = 数据
def 判断战斗结果(self,阵营):
T = 0
战斗结果 = 0
if 阵营 == '我方':
数据现状 = self.我方数据现状
else:
数据现状 = self.敌方数据现状
for i in 数据现状:
if 数据现状[i]['血量'] < 0:
T += 1
if T == len(数据现状):
if 阵营 == '我方':
战斗结果 = 1
else:
战斗结果 = 2
T = 0
for keys,i in 行动技能信息.items():
if i['可重复次数'] == i['使用次数']:
T += 1
if T == len(行动技能信息):
战斗结果 = 3
return 战斗结果
def 回合(self,角色,阵营):
删除物品 = []
if 阵营 == '我方':
解包 = self.我方操作配置[角色]
if 解包[0] == 3:
实际数据 = self.我方数据现状[角色]
数据 = self.我方数据现状[解包[1][0]]
else:
数据 = self.我方数据现状[角色]
实际数据 = 数据
if not 解包[0] in{5,3}:
if 解包[1][0] in self.敌方数据:
敌方解包 = self.敌方操作配置[解包[1][0]]
敌方数据_ = self.敌方数据现状[解包[1][0]]
else:
敌方解包 = self.我方操作配置[解包[1][0]]
敌方数据_ = self.我方数据现状[解包[1][0]]
if 解包[0] == 3:
# 相当于自己打自己
if 解包[1][1][1] in self.敌方数据:
敌方解包 = self.敌方操作配置[解包[1][1][1]]
敌方数据_ = self.敌方数据现状[解包[1][1][1]]
else:
敌方解包 = self.我方操作配置[解包[1][1][1]]
敌方数据_ = self.我方数据现状[解包[1][1][1]]
else:
解包 = self.敌方操作配置[角色]
if 解包[0] == 3:
实际数据 = self.敌方数据现状[角色]
数据 = self.敌方数据现状[解包[1][0]]
else:
数据 = self.敌方数据现状[角色]
实际数据 = 数据
if not 解包[0] in{5,3}:
if 解包[1][0] in self.敌方数据:
敌方解包 = self.敌方操作配置[解包[1][0]]
敌方数据_ = self.敌方数据现状[解包[1][0]]
else:
敌方解包 = self.我方操作配置[解包[1][0]]
敌方数据_ = self.我方数据现状[解包[1][0]]
if 解包[0] == 3:
敌方解包 = self.敌方操作配置[解包[1][0]]
敌方数据_ = self.敌方数据现状[解包[1][0]]
print(f'[{角色}]选择施行[{操作选项[解包[0]]}]')
if 阵营 == '我方' and 解包[0] == 3:
操作对象 = 解包[1][1][1]
else:
操作对象 = 解包[1][0]
if not 解包[0] == 5:
print(f'[{角色}]选择对[{操作对象}]施行该操作')
if 解包[0] == 1:
伤害 = 数据['力量'] * random.uniform(5,6)
伤害 = max(伤害 - 敌方数据_['防御'] * random.uniform(4,5), 0)
if 敌方解包[0] == 5:
伤害 = max(伤害 - 0.4 * 伤害, 0)
伤害 = round(伤害)
print(f'[{角色}]对[{操作对象}]造成{伤害}伤害')
敌方数据_['血量'] -= 伤害
if 解包[0] == 2:
技能名称 = 数据['技能'][解包[1][1]]
技能消耗 = 技能信息[技能名称]['内力']
数据['内力'] -= 技能消耗
print(f'[{角色}]使用了[{技能名称}] 消耗了{技能消耗}内力')
分析_ = 分析(技能信息[技能名称],数据,敌方数据_,角色,操作对象,回答)
敌方数据_ = 分析_['对象数据']
数据 = 分析_['我方数据']
if 解包[0] == 3:
if 阵营 == '我方':
物品名称 = 解包[1][1][0]
对象 = 解包[1][1][1]
else:
物品名称 = 解包[1][1]
对象 = 解包[1][1]
del 数据['背包'][数据['背包'].index(物品名称)]
print(f'[{角色}]使用了[{物品名称}]')
分析_ = 分析(物品信息[物品名称],实际数据,敌方数据_,角色,对象,回答)
敌方数据_ = 分析_['对象数据']
数据 = 分析_['我方数据']
if 解包[0] == 4:
行动名称 = 数据['行动技能'][解包[1][1][0]]
print(f'[{角色}]使用了[{行动名称}]')
行动解包 = self.行动技能信息[我方数据[角色]['行动技能'][int(解包[1][1][0])]]
条件 = 0
for i in 行动解包['要求']:
行动变量 = 行动解包['要求'][i]
行动条件 = i.split('-')
if 行动条件[0] == '血量':
if 行动条件[1] == '大于' and 敌方数据_['血量'] >= 行动变量:
条件 += 1
if 行动条件[1] == '小于' and 敌方数据_['血量'] <= 行动变量:
条件 += 1
if 行动条件[0] == '状态':
if 行动条件[1] == '等于' and 行动变量 in 敌方数据_['状态']:
条件 += 1
if 行动条件[1] == '不等于' and not 行动变量 in 敌方数据_['状态']:
条件 += 1
if 行动条件[0] == '条件':
条件_ = 0
for i in self.行动技能信息:
if self.行动技能信息[i]['使用次数'] == self.行动技能信息[i]['可重复次数']:
条件_ += 1
if 行动条件[1] == '全满' and 条件_ == len(self.行动技能信息) - 1:
条件 += 1
if 行动条件[1] == '不全满' and 条件_ != len(self.行动技能信息):
条件 += 1
if 条件 >= 行动解包['要求']['条件次数']:
if 行动解包['使用次数'] == 行动解包['可重复次数']:
print(f'[{角色}]以无法继续使用该[行动]')
else:
print(行动解包['达到要求'])
行动解包['使用次数'] += 1
else:
print(行动解包['没达到要求'])
print(行动解包['提示'])
if 解包[0] == 5:
print(f'[{角色}]本回合内将会免疫40%的普通攻击威力')
if 阵营 == '我方':
self.我方数据现状[角色] = 数据
if not 解包[0] in {5,3}:
self.敌方数据现状[操作对象] = 敌方数据_
elif 解包[0] == 3:
self.我方数据现状[操作对象] = 敌方数据_
else:
self.敌方数据现状[角色] = 数据
if not 解包[0] in {5,3}:
self.我方数据现状[操作对象] = 敌方数据_
input()
def 状态(状态_,效果,说明):
if 说明 == '添加':
if 效果 == '良好':
状态_ = ['良好']
elif not 效果 in 状态_:
状态_.append(效果)
if '良好' in 状态_:
del 状态_[状态_.index('良好')]
if 说明 == '减少':
if 效果 in 状态_:
del 状态_[状态_.index(效果)]
if len(状态_) == 0:
状态_.append('良好')
if 说明 == '检查':
if len(状态_) == 0:
状态_.append('良好')
return 状态_
def 分析(数据,我方数据现状,对象数据现状,角色,名字,回答):
for i in 分析信息:
if i in 数据['性质']:
概率 = 数据['性质'][i][2]
阵营 = 数据['性质'][i][0]
T = 0
i_ = i
if i == '恢复':
i_ = '血量'
if 数据['性质'][i][0] == '攻击方':
名字_ = 角色
操作数据 = 我方数据现状[i_]
else:
名字_ = 名字
if 角色 in 敌方角色列表 and 回答 == 3:
名字_ = 角色
操作数据 = 对象数据现状[i_]
if i == '血量':
变量 = (数据['性质'][i][1] + 我方数据现状['力量']) * random.uniform(5, 6) - 对象数据现状['防御'] * random.uniform(4, 5)
变量 = round(变量)
操作数据 -= 变量
信息 = ['造成',i_]
if i in {'恢复','力量','防御','速度','内力'}:
变量 = 数据['性质'][i][1]
if 数据['性质'][i][3] == '增加':
if 变量 == 404:
操作数据 += 9999
变量 = '恢复'
信息 = ['完全',i_]
else:
操作数据 += 变量
信息 = ['增加',i_]
else:
if 变量 == 404:
操作数据 -= 9999
变量 = '清空'
信息 = ['完全',i_]
else:
操作数据 -= 变量
信息 = ['减少',i_]
if i == '状态':
新状态 = 数据['性质'][i][1]
信息_ = 数据['性质'][i][3]
信息 = [信息_,i_]
if not 新状态 in 操作数据:
变量 = 新状态
else:
T = 1
if random.randint(0, 100) <= 概率 and T == 0:
print(f'[{角色}]对[{名字_}]{信息[0]}{变量}{信息[1]}')
if 数据['性质'][i][0] == '攻击方':
if i == '状态':
操作数据 = 状态(操作数据, 新状态, 信息_)
我方数据现状[i_] = 操作数据
else:
if i == '状态':
操作数据 = 状态(操作数据, 新状态, 信息_)
对象数据现状[i_] = 操作数据
else:
print(f'[{角色}]没有对[{名字_}]{信息[0]}{信息[1]}')
分析_ = {'我方数据':我方数据现状,'对象数据':对象数据现状}
return 分析_
def 打印角色信息(角色列表, 数据,名称,操作配置,数据现状):
print(f'O------------------{名称}-----------------O')
for 角色 in 角色列表:
血量 = 数据[角色]['血量']
血量现状 = 数据现状[角色]['血量']
状态 = 数据现状[角色]['状态']
状态 = ' '.join(str(x) for x in 状态)
操作 = ''
if not 操作配置 == {} and 角色 in 操作配置:
print(f'{角色} 血量:{血量现状}/{血量} 状态:{状态} 操作:{操作选项[操作配置[角色][0]]}')
else:
print(f'{角色} 血量:{血量现状}/{血量} 状态:{状态}')
def 打印攻击对象(对象信息,对象信息_2,阵营,说明,敌方数据,角色,回答,回答_):
if not 对象信息_2 == '':
对象信息_信息 = 对象信息 + 对象信息_2
对象信息_2_ = [f"{i+1}.{x}" for i, x in enumerate(对象信息 + 对象信息_2)]
对象信息_ = ' '.join(str(x) for x in 对象信息_2_)
else:
对象信息_信息 = 对象信息
对象信息_ = [f"{i+1}.{x}" for i, x in enumerate(对象信息)]
对象信息_ = ' '.join(str(x) for x in 对象信息_)
if 阵营 == '我方':
print(f'O--------------选择{说明}对象-------------O')
print(对象信息_)
while True:
选择 = input("输入编号 >>> ")
if 选择.isdigit():
选择 = int(选择)
if not 对象信息_2 == '':
长度 = len(对象信息) + len(对象信息_2)
else:
长度 = len(对象信息)
if 选择 <= 长度:
选择 -= 1
if 回答_ == 3:
if 我方数据现状[对象信息_信息[选择]]['血量'] <= 0:
print('该队友目前以濒喵 无法打开背包')
else:
选择 = 对象信息_信息[选择]
break
else:
选择 = 对象信息_信息[选择]
break
else:
if not 回答 == 3:
选择 = 敌方数据['选取对象']
else:
选择 = 角色
return 选择
def 敌人选择_(数据,选取对象,选择,角色):
技能几率 = 数据['技能选取几率']
for i in 数据['技能']:
if 数据['内力'] >= 技能信息[i]['内力']:
# 敌人要补给自己
if 数据['血量'] < 数据['血量过低'] and (技能信息[i]['属性'] == '强化' or 技能信息[i]['属性'] == '治疗'):
技能几率[i] += 10
if 选取对象[0] in [1, 2]:
if 技能信息[i]['属性'] == '法术' or 技能信息[i]['属性'] == '拳术' or 技能信息[i]['属性'] == '剑术':
技能几率[i] += 10
if 选取对象[0] in [3, 4, 5]:
if 技能信息[i]['属性'] == '辅助' or 技能信息[i]['属性'] == '强化':
技能几率[i] += 10
if len(set(技能几率.values())) == 1:
变量 = random.randint(0,(len(数据['技能'])-1))
if 技能信息[数据['技能'][变量]]['阵营'] == '我方':
选择 = 角色
else:
选择_ = []
for keys,i in 技能几率.items():
for _ in range(len(技能几率)):
t = random.randint(0,random.randint(0,技能几率[max(技能几率, key=lambda x: 技能几率[x])] + 5))
if int(i) >= t:
选择_.append(keys)
选择多少 = {}
for i in 选择_:
if not i in 选择多少:
选择多少[i] = 1
else:
选择多少[i] += 1
变量 = 数据['技能'].index(max(选择多少, key=选择多少.get))
if 技能信息[max(选择多少, key=选择多少.get)]['阵营'] == '我方':
选择 = 角色
print(选择多少,变量)
变量 = [变量,选择]
return 变量
def 敌人选择__(数据,选取对象):
物品几率 = {}
for i in 数据['背包']:
物品几率[i] = 数据['物品选取几率'][i]
for i in 数据['背包']:
# 敌人要补给自己
if 数据['血量'] < 数据['血量过低'] and (物品信息[i]['属性'] == '强化' or 物品信息[i]['属性'] == '治疗'):
物品几率[i] += 20
if 选取对象[0] in [1, 2]:
if 物品信息[i]['属性'] == '法术' or 物品信息[i]['属性'] == '暗器' or 物品信息[i]['属性'] == '喵':
物品几率[i] += 10
if 选取对象[0] in [3, 4, 5]:
if 物品信息[i]['属性'] == '治疗' or 物品信息[i]['属性'] == '强化':
物品几率[i] += 20
if len(set(物品几率.values())) == 1:
变量 = random.randint(0,(len(数据['背包'])-1))
else:
选择 = []
for keys,i in 物品几率.items():
for _ in range(len(物品几率)):
t = random.randint(0,random.randint(0,物品几率[max(物品几率, key=lambda x: 物品几率[x])] + 5))
if int(i) >= t:
选择.append(keys)
选择多少 = {}
for i in 选择:
if not i in 选择多少:
选择多少[i] = 1
else:
选择多少[i] += 1
变量 = 数据['背包'].index(max(选择多少, key=选择多少.get))
变量 = 数据['背包'][变量]
return 变量
def 操作实行(阵营,角色,回答,选择,数据,数据现状):
if 回答 == 2:
if 阵营 == '我方':
print(f'O--------------选择技能编号-------------O')
内力 = 数据[角色]['内力']
内力现状 = 数据现状[角色]['内力']
print(f'内力:{内力现状}/{内力}')
for i in range(len(数据[角色]['技能'])):
技能名称储存 = 数据[角色]['技能']
技能内力消耗 = 技能信息[技能名称储存[i]]['内力']
技能属性 = 技能信息[技能名称储存[i]]['属性']
print(f'{i+1} {技能名称储存[i]} 需要内力:{技能内力消耗} 属性:{技能属性}')
while True:
变量 = input("输入操作 >>> ")
if 变量.isdigit():
变量 = int(变量)
if 变量 <= len(技能名称储存):
变量 -= 1
if 内力现状 >= 技能信息[技能名称储存[变量]]['内力']:
print(技能信息[技能名称储存[变量]]['介绍'])
回答 = input('输入“1”确认使用 >>> ')
if 回答 == '1':
return 变量
break
else:
print('该技能所需内力不够')
else:
变量 = 敌人选择_(数据现状[角色],我方操作配置[选择],选择,角色)
return 变量
if 回答 == 3:
选取物品 = []
if 阵营 == '我方':
if not len(我方操作配置) == 0:
for i in 我方操作配置:
if 我方操作配置[i][0] == 3 and 我方操作配置[i][1][0] == 选择:
选取物品.append(我方操作配置[i][1][1][0])
print('O------------------背包-----------------O')
背包 = 数据现状[选择]['背包']
for i in range(len(背包)):
物品属性 = 物品信息[背包[i]]['属性']
if 背包[i] in 选取物品:
print(f'{i+1}.{背包[i]} 类别:{物品属性} [以使用]')
else:
print(f'{i+1}.{背包[i]} 类别:{物品属性}')
print('O---------------------------------------O')
while True:
变量 = input("输入使用物品编号 >>> ")
if 变量.isdigit():
变量 = int(变量)
if 变量 <= len(背包) and 变量 > 0:
if 背包[变量-1] in 选取物品:
print(f'该物品以被其他队友使用!')
else:
变量 = 背包[变量-1]
物品介绍 = 物品信息[变量]['介绍']
print(f'@ 物品介绍:{物品介绍}')
回答 = input("输入“1”确认使用 >>> ")
if 回答 == '1':
选择 = 打印攻击对象(我方角色列表,敌方角色列表,阵营,'给予','','','',回答)
变量 = [变量,选择]
return 变量
break
else:
变量 = 敌人选择__(数据现状[角色],我方操作配置[数据现状[角色]['选取对象']])
变量 = [变量,角色]
return 变量
if 回答 == 4:
if 阵营 == '我方':
print('O------------------行动-----------------O')
行动 = 数据现状[角色]['行动技能']
for i in range(len(行动)):
次数 = round(行动技能信息[行动[i]]['使用次数'] / 行动技能信息[行动[i]]['可重复次数'] * 100)
print(f'{i+1}.{行动[i]} 正确进程:{次数}%')
print('O---------------------------------------O')
while True:
回答 = input("输入操作 >>> ")
if 回答.isdigit():
回答 = int(回答)
if 回答 <= len(行动):
回答 -= 1
print(f'[{角色}]选择使用[{行动[回答]}]')
变量 = 回答
变量 = [变量,选择]
return 变量
break
def 选择对象(回答,攻击方角色列表,防守方角色列表,攻击方名称):
if 攻击方名称 == '我方':
t = ''
a = ''
b = ''
else:
t = 敌方数据现状[角色]
a = 角色
b = 回答
if 回答 == 1:
选择 = 打印攻击对象(防守方角色列表,'',攻击方名称,'攻击',t,a,b,回答)
if 回答 == 2:
选择 = 打印攻击对象(攻击方角色列表,防守方角色列表,攻击方名称,'施行',t,a,b,回答)
if 回答 == 3:
选择 = 打印攻击对象(攻击方角色列表,'',攻击方名称,'打开',t,a,b,回答)
if 回答 == 4:
选择 = 打印攻击对象(防守方角色列表,'',攻击方名称,'施行',t,a,b,回答)
if 回答 == 5:
选择 = 角色
if 攻击方名称 == '我方':
print()
if 攻击方名称 == '我方':
print(f'[{角色}]选择对[{选择}]施行该操作')
elif 回答 in {3,5}:
print(f'[{角色}]选择对[{角色}]施行该操作')
return 选择
def 选择实行对象(回答,阵营,角色):
变量 = ''
if 阵营 == '我方':
选择 = 选择对象(回答,我方角色列表,敌方角色列表,'我方')
变量 = 操作实行(阵营,角色,回答,选择,我方数据,我方数据现状)
else:
选择 = 选择对象(回答,敌方角色列表,我方角色列表,'敌方')
if 回答 in {2,3,4}:
变量 = 操作实行(阵营,角色,回答,选择,敌方数据,敌方数据现状)
选择 = 变量[1]
变量 = 变量[0]
input()
选择 = [选择,变量]
return 选择
def 速度整理(d):
速度 = {}
for i in d:
if '速度' in d[i]:
速度[i] = d[i]['速度']
return 速度
def 敌人选择(角色,数据,操作配置):
while True:
选择_ = 我方角色列表[random.randint(0,len(我方角色列表) - 1)]
if 我方数据现状[选择_]['血量'] > 0:
break
选择几率 = copy.deepcopy(数据[角色]['选择几率'])
# 当敌人血量过低时,优先选择补给功能
if 数据[角色]['血量'] < 数据[角色]['血量过低']:
if len(数据[角色]['背包']) != 0:
选择几率['3'] += 20
else:
# 敌人会想用技能补给
if 数据[角色]['内力'] > 0:
选择几率['2'] += 15
选择几率['5'] += 10
# 当玩家一直使用攻击或技能时,增加敌人使用技能的几率
if 操作配置[选择_][0] in [1, 2]:
if 数据[角色]['内力'] > 0:
选择几率['2'] += 10
else:
选择几率['1'] += 20
if 数据[角色]['血量'] < 数据[角色]['血量过低']:
选择几率['2'] += 10
else:
if len(数据[角色]['背包']) != 0:
选择几率['3'] += 30
else:
选择几率['5'] += 10
选择 = []
for keys,i in 选择几率.items():
for _ in range(len(选择几率)):
t = random.randint(0,random.randint(0,选择几率[max(选择几率, key=lambda x: 选择几率[x])] + 5))
if int(i) >= t:
选择.append(keys)
选择多少 = {}
for i in 选择:
if not i in 选择多少:
选择多少[i] = 1
else:
选择多少[i] += 1
选择 = max(选择多少, key=选择多少.get)
if 选择 == '2':
t = sum(技能信息[i]['内力'] >= 数据[角色]['内力'] for i in 数据[角色]['技能'])
if t == len(数据[角色]['技能']):
del 选择多少['2']
if len(选择多少) == 0:
while True:
选择 = random.randint(1,5)
if 选择 not in {3, 4}:
break
else:
选择 = max(选择多少, key=选择多少.get)
else:
if len(数据[角色]['背包']) == 0:
del 选择多少['3']
if len(选择多少) == 0:
while True:
选择 = random.randint(1,5)
if 选择 not in {3, 4}:
break
else:
选择 = max(选择多少, key=选择多少.get)
选择 = [int(选择),选择_]
return 选择
while True:
# 回合准备
回合 += 1
我方操作配置 = {}
敌方操作配置 = {}
打包 = 操作(我方数据,敌方数据,我方数据现状,敌方数据现状,敌方角色列表,我方操作配置,敌方操作配置,行动技能信息,删除物品)
for i in 我方角色列表:
我方数据[i]['状态'] = 状态(我方数据[i]['状态'], '', '检查')
打包.状态检查(i,'我方')
for i in 敌方角色列表:
敌方数据[i]['状态'] = 状态(敌方数据[i]['状态'], '', '检查')
打包.状态检查(i,'敌方')
print()
战斗结果 = 打包.判断战斗结果('我方')
战斗结果_ = 打包.判断战斗结果('敌方')
if 战斗结果 in 结果信息:
print(结果信息[战斗结果])
break
if 战斗结果_ in 结果信息:
print(结果信息[战斗结果_])
break
打印角色信息(敌方角色列表, 敌方数据,'敌方',敌方操作配置,敌方数据现状)
打印角色信息(我方角色列表, 我方数据,'我方',我方操作配置,我方数据现状)
print()
for 角色 in 我方角色列表:
print(f'O--------------指挥[{角色}]-------------O')
if 我方数据现状[角色]['血量'] > 0 and 我方数据现状[角色]['是否能战斗'] == 1:
print('1.攻击 2.技能 3.背包 4.行动 5.防守')
while True:
回答 = input("输入操作 >>> ")
if 回答 in {'1','2','3','4','5'}:
t = sum(技能信息[i]['内力'] >= 我方数据现状[角色]['内力'] for i in 我方数据现状[角色]['技能'])
if 回答 == '3' and len(我方数据现状[角色]['背包']) == 0:
print('[{角色}]的背包当中目前无物品')
elif 回答 == '2' and t == len(我方数据现状[角色]['技能']):
print(f'[{角色}]目前无可使用的技能')
else:
回答 = int(回答)
打包.指挥(回答,角色,'我方')
break
else:
我方操作配置[角色] = [0, [角色, None]]
input(f'[{角色}]目前无法战斗...\n')
打印角色信息(敌方角色列表, 敌方数据,'敌方',敌方操作配置,敌方数据现状)
打印角色信息(我方角色列表, 我方数据,'我方',我方操作配置,我方数据现状)
for 角色 in 敌方角色列表:
if 敌方数据现状[角色]['血量'] > 0 and 敌方数据现状[角色]['是否能战斗'] == 1:
print(f'O--------------[{角色}]操作-------------O')
选择 = 敌人选择(角色,敌方数据现状,我方操作配置)
回答 = 选择[0]
敌方数据现状[角色]['选取对象'] = 选择[1]
print(f'[{角色}]选择施行[{操作选项[回答]}]')
打包.指挥(回答,角色,'敌方')
else:
敌方操作配置[角色] = [0, [角色, None]]
print('[{角色}]目前无法战斗...')
print('O--------------回合开始-------------O\n')
速度打包 = {**速度整理(我方数据现状), **速度整理(敌方数据现状)}
速度打包_ = []
for i in 速度打包:
a = 0
for i in 速度打包:
if 速度打包[i] > a and not 速度打包[i] == 999:
a = 速度打包[i]
c = i
速度打包[c] = 999
速度打包_.append(c)
for i in 速度打包_:
print(f'O--------------[{i}]回合-------------O')
if i in 我方角色列表:
if 我方数据现状[i]['血量'] > 0 and 我方数据现状[i]['是否能战斗'] == 1:
打包.回合(i,'我方')
else:
input(f'[{i}]目前无法战斗...\n')
else:
if 敌方数据现状[i]['血量'] > 0 and 敌方数据现状[i]['是否能战斗'] == 1:
打包.回合(i,'敌方')
else:
input(f'[{i}]目前无法战斗...\n')
代码2(储存敌人信息和我方信息等等)
def 数据储存():
我方数据 = {
'陈永康': {
'血量': 500,
'内力':230,
'状态':['良好'],
'力量': 30,
'防御': 17,
'技能':['混元功法','星辰陨落','领域展开','陈李拳法'],
'背包':['回魂丹','爆裂黄符','致命鱼腥喵','七彩果'],
'行动技能':['呼唤','表演话剧'],
'是否能战斗':1,
'速度':2
},
'李兴华': {
'血量': 400,
'内力':270,
'状态':['良好'],
'力量': 25,
'防御': 20,
'技能':['李一刀','九阳神功', '陈李拳法'],
'背包':['七彩果','回魂丹','鬼影飞刀'],
'行动技能':['叫骂'],
'是否能战斗':1,
'速度':1
}
}
敌方数据 = {
'唐白': {
'血量': 1530,
'内力': 700,
'状态': ['良好'],
'力量': 17,
'防御': 12,
'技能': ['混元功法', '领域展开', '阴阳攀升','龙凤重生'],
'背包': ['回魂丹','致命鱼腥喵','七彩果','救命乌龙茶'],
'是否能战斗': 1,
'速度': 3,
'血量过低': 1000,
'选择几率': {
'1': 30,
'2': 30,
'3': 20,
'5': 20
},
'技能选取几率': {
'混元功法': 30,
'领域展开': 30,
'阴阳攀升': 20,
'龙凤重生':20
},
'选取对象': '',
'物品选取几率': {
'回魂丹': 10,
'致命鱼腥喵':30,
'七彩果':20,
'救命乌龙茶':10
}
}
}
技能信息 = {
'混元功法':
{
'内力':50,
'属性':'法术',
'性质':{
'血量':['防守方',15,100],
'状态':['防守方','僵硬',70,'添加']
},
'介绍':'给予对方巨大伤害 并有几率使敌人陷入[僵硬]状态',
'阵营':'敌方'
},
'星辰陨落':
{
'内力':60,
'属性':'法术',
'性质':{
'血量':['防守方',20,100],
'状态':['防守方','中邪',60,'添加']
},
'介绍':'给予对方巨大伤害 并有几率使敌人陷入[中邪]状态',
'阵营':'敌方'
},
'领域展开':
{
'内力':30,
'属性':'辅助',
'性质':{
'恢复':['防守方',200,90,'增加'],
'状态':['防守方','良好',70,'添加'],
'力量':['防守方',3,80,'增加']
},
'介绍':'有几率使对方恢复到[良好]状态并使对方血量和力量得到提升',
'阵营':'我方'
},
'陈李拳法':
{
'内力':60,
'属性':'拳术',
'性质':{
'血量':['防守方',35,80,'减少'],
'力量':['攻击方',3,70,'增加'],
'状态':['防守方','虚弱',70,'添加'],
},
'介绍':'给予对方超级伤害并提高自己力量 有几率使敌人陷入[虚弱]状态',
'阵营':'敌方'
},
'李一刀':
{
'内力':70,
'属性':'剑术',
'性质':{
'血量':['防守方',15,80,'减少'],
'状态':['防守方','虚弱',70,'添加'],
'速度':['攻击方',2,90,'增加']
},
'介绍':'给予对方巨大伤害 并有几率使敌人陷入[虚弱]状态和提高自己速度',
'阵营':'敌方'
},
'九阳神功':
{
'内力':90,
'属性':'法术',
'性质':{
'血量':['防守方',20,80,'减少'],
'状态':['防守方','虚弱',60,'添加'],
'力量':['攻击方',5,80,'增加'],
'防御':['攻击方',5,80,'增加']
},
'介绍':'给予对方巨大伤害 并有几率使敌人陷入[虚弱]状态和提升自身攻防',
'阵营':'敌方'
},
'龙凤重生':
{
'内力':70,
'属性':'辅助',
'性质':{
'状态':['防守方','良好',70,'添加'],
'力量':['防守方',3,80,'增加'],
'防御':['防守方',3,80,'增加']
},
'介绍':'你用不到啦 哈哈哈~',
'阵营':'我方'
},
'阴阳攀升':
{
'内力':100,
'属性':'法术',
'性质':{
'血量':['防守方',25,80,'减少'],
'状态':['防守方','虚弱',60,'添加'],
'状态':['防守方','中邪',60,'添加'],
'力量':['防守方',3,50,'减少'],
'防御':['防守方',5,50,'减少']
},
'介绍':'你用不到啦 哈哈哈~',
'阵营':'敌方'
}
}
行动技能信息 = {
'呼唤': {
'信息': '[陈永康]拼命的去呼唤',
'没达到要求': '然而却得不到任何回应',
'达到要求': '[唐白]的眼神开始动摇',
'要求':{'血量-大于': 700, '血量-小于': 1300,'条件次数':2},
'可重复次数': 5,
'使用次数': 0,
'提示':'尝试让敌人稍微受伤一点吧!'
},
'叫骂': {
'信息': '[李兴华]疯狂的叫骂然而却得不到任何回应',
'没达到要求': '然而却得不到任何回应',
'达到要求': '[唐白]对此似乎想起了什么',
'要求': {'状态-不等于': '良好','状态-等于': '僵硬','条件次数':1},
'可重复次数': 5,
'使用次数': 0,
'提示':'尝试让敌人位于一个[僵硬]或不在[良好]的状态吧!'
},
'表演话剧': {
'信息': '[陈永康]和[李兴华]表演了一段如何使用符纸的短话剧',
'没达到要求': '[唐白]似乎刚到不理解',
'达到要求': '[唐白]抱住头痛苦的喊起来',
'要求': {'条件-全满': 0,'条件次数':1},
'可重复次数': 2,
'使用次数': 0,
'提示':'尝试让敌人可以喵控的地方全给攻略了吧!'
}
}
物品信息 = {
'回魂丹':{
'介绍':'使用后立刻让一位队友复活或回满',
'属性':'治疗',
'性质':{
'恢复':['防守方',404,100,'增加']
},
'阵营':'我方'
},
'爆裂黄符':{
'介绍':'使用后以80%的几率对敌人释放强烈伤害',
'属性':'喵',
'性质':{
'血量':['防守方',20,100,'减少'],
},
'阵营':'敌方'
},
'七彩果':{
'介绍':'使用后内力值回满并且状态清空',
'属性':'治疗',
'性质':{
'内力':['防守方',404,100,'增加'],
'状态':['防守方','良好',100,'添加']
},
'阵营':'我方'
},
'鬼影飞刀':{
'介绍':'使用后以100%的几率对敌人释放伤害并以90%的几率给予敌人[虚弱]状态',
'属性':'暗器',
'性质':{
'血量':['防守方',15,100,'减少'],
'状态':['防守方','虚弱',90,'添加']
},
'阵营':'敌方'
},
'致命鱼腥喵':{
'介绍':'使用后血量减少80 但力速防会得到提升',
'属性':'强化',
'性质':{
'恢复':['防守方',80,100,'减少'],
'力量':['防守方',5,100,'增加'],
'速度':['防守方',5,100,'增加'],
'防御':['防守方',3,100,'增加']
},
'阵营':'我方'
},
'阴阳黄符':{
'介绍':'...',
'属性':'强化',
'性质':{
'状态':['防守方','虚弱',70,'添加'],
'状态':['防守方','僵硬',70,'添加'],
'状态':['防守方','中邪',70,'添加']
},
'阵营':'敌方'
},
'救命乌龙茶':{
'介绍':'...',
'属性':'治疗',
'性质':{
'内力':['防守方',404,100,'增加'],
'恢复':['防守方',404,100,'增加'],
'状态':['防守方','良好',100,'添加'],
'力量':['防守方',3,100,'增加'],
'防御':['防守方',5,100,'增加'],
'速度':['防守方',2,100,'增加']
},
'阵营':'敌方'
}
}
结果信息 = {
1: '我方队员已全部倒下,本次战斗彻底失败!',
2: '敌方队员已全部倒下,本次战斗完全胜利!',
3: '敌方队员以无战斗喵,已经没有需要继续战斗下去的理由!'
}
分析信息 = ['血量','力量','防御','内力','速度','状态','恢复']
数据 = {
'我方数据': 我方数据,
'敌方数据': 敌方数据,
'行动技能信息': 行动技能信息,
'物品信息': 物品信息,
'技能信息': 技能信息,
'结果信息':结果信息,
'分析信息':分析信息
}
return 数据
若出现BUG可以在下方评论区恢复