猫史档案馆


【python原创作品】文字回合式战斗题材作品

用户:夜明逢生夜明逢生查看: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可以在下方评论区恢复


回复

上一页1 页 / 共 1下一页
夜明逢生夜明逢生

720和743行的'f'少了 但不会影响运行结果 可以自行添加

点赞0


评论


安澜仙帝安澜仙帝

没有数据储存库

 

点赞0


评论


五梦樱川五梦樱川

不错,用类了

点赞0


评论


安澜仙帝安澜仙帝

为什么运行显示错误

 

点赞0


评论


活波的飓风雀HSWK活波的飓风雀HSWK

牛的。

点赞0


评论


活波的飓风雀HSWK活波的飓风雀HSWK

VScode?

点赞0


评论