多人团战

这次的小游戏实际上我是一点头绪都没的,后面是收到了黄金同学的启发,同时他也给了我很多意见,还参考和借鉴了他的相关过程,但是还是有一个问题没能解决,就是没办法随机使用技能,(暂时累了,不想想了)同时有点拿剧情凑行数的嫌疑,,在这里插入图片描述

import time
import random
import threading
import copy

def story():
print(‘这是人类历史上的阴影,为了应对强敌,人们制造了大量的克隆人’)
print(‘这早已经不是人们想象中的那样,道德和伦理已经丧失,这里只有活下来的强者’)
time.sleep(0.3)
print(‘他们没有名字,只有代号,他们只有一个任务,那就是为人类挑选出最强的战士’)

def back():
print(‘天空中破碎的黑洞散发出紫色的光芒,传来了地狱般的声音,要么诚服,要么死亡,无数的黑点袭击了人类的聚集地’)
print(‘爆发出来的蓝色的光芒吞噬了一切,幸存下来的人类只能看着自己的家园支离破碎’,在废墟中无能为力的痛哭)
time.sleep(0.3)
print(‘生命诚可贵,但是自由更可贵,诚服于这样的敌人也绝对没有什么好下场,于是剩下的人类开始了这场与神之间的斗争’)
print(’ 人们为了弥补战斗力上的缺陷,被迫只能启用火种计划’)
def tinder plan()
print(‘这是一个绝密的计划,很早之前人们制造大量冬日战士,但是他们没办法控制这些危险的工具,绝大数的人决定毁灭这些武器,但是在这一轮投票中,保守方赢得了绝大多数人的认可,他们提议保留这些战士,为人类的未来留下火种。’)
time.sleep(0.3)
print(‘在牺牲了一部分研究人员和战士的情况下,他们成功将这些怪物冰封于北极,现在讽刺的是,现在能拯救人类的居然是这些冰封中的怪物’)
time.sleep(0.3)
print(‘能消灭怪物的只有怪物,要想消灭怪物的方法就是让自己也变成怪物------冷祁,人类的未来会是怎么样呢?没人说的清楚,但是这是唯一的机会,不行动只能等待灭绝’)

#世界里的魔法清单
MAGIC_BOOKS={
0:[‘光之束缚’,1],
1:[‘诸刃手里剑’,2],
2:[‘致残打击’,0.5],
3:[“龙魂附体”,-1],
4:[‘影狱十字杀’,2],
5:[‘狂风绝曦斩’,1],
6:[‘大荒星陨’,1]
}

class Body():

ACCACK = 1

def __init__(self,IS_HUMAN_= False,NAME_='Ice NPC',LOCATION_={"x":0,"y":0},WAY_ = [],HP_=5,MP_=3,MAX_HP_=5,MAX_MP_=3,ATTACK_=1,MAGIC_ATTACK_=1.3,DEFENSE_=0,LEVEL_=1,EXPRIENCE_=0,MAX_EXPRIENCE_ = 20,FUNCTION_POINT_=0,HAS_MAGIC_=[],POS_NAME_='南昌理工学院南大门'):

    self.IS_HUMAN = IS_HUMAN_                  #判断是否位人类
    self.NAME = NAME_                          #姓名
    self.WAY = WAY_
    self.HP = HP_                              #血量
    self.MP = MP_                              #魔法值
    self.MAX_HP = MAX_HP_                      #最大血量
    self.MAX_MP = MAX_MP_                      #最大魔法值
    self.ATTACK = ATTACK_                      #普通攻击
    self.MAGIC_ATTACK = MAGIC_ATTACK_          #魔法攻击
    self.DEFENSE = DEFENSE_                    #防御
    self.POS_NAME = POS_NAME_                  #地点
    self.HAS_MAGIC = HAS_MAGIC_                #会的魔法

def Display_Magic(self):      #显示魔法
    for i in self.HAS_MAGIC:
        print(MAGIC_BOOKS[i][0]+"每次攻击消耗"+str(abs(MAGIC_BOOKS[i][1]))+"点魔法值")

def Display_Status(self):    #显示人物状态
    print('\n\r', '    状态:' + self.NAME)
    print("等级:"+str(self.LEVEL)+"     距离下次升级还需"+str(self.MAX_EXPERIENCE-self.EXPERIENCE)+"经验", end='')
    print('\n血量:' + '❤' * int(self.HP), '\n  魔法值:' + '⚓' * int(self.MP),'\n  防御:' + '🛡' * int(self.DEFENSE))
    print('地点:' + self.POS_NAME)

    if self.HAS_MAGIC == []:
        print('无魔法')
    else:
        self.Display_Magic()

#展示战斗状态
def display_status_fighting(self):

    print('\n\r', '    状态:' + self.NAME, end='')
    print('\n血量:' + '❤' * int(self.HP), '  魔法值:' + '⚓' * int(self.MP),'  防御:' + '🛡' * int(self.DEFENSE))

def Attack_One_Time(self,CHOOSE,NPC_):       #对敌方进行一次攻击
    if CHOOSE == -2:
        self.Display_Magic()

    elif CHOOSE == -1:
        hit = 1 - NPC_.DEFENSE
        if hit > 0:
            NPC_.HP -= hit
            print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了"+str(hit)+"点攻击")
        else:
            print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")
            print("无魔法消耗")

    else:
        #是否有魔法
        if CHOOSE in self.HAS_MAGIC:
            if self.MP > MAGIC_BOOKS[CHOOSE][1]:            #魔法值是否充足
                if MAGIC_BOOKS[CHOOSE][1] > 0 :
                    hit = self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1] - NPC_.DEFENSE
                    self.MP -= MAGIC_BOOKS[CHOOSE][1]
                    if hit > 0:
                        NPC_.HP -= hit
                        print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了" + str(
                            hit) + "点攻击")
                        print("消耗了" + str(abs(MAGIC_BOOKS[CHOOSE][1])) + "点魔法")
                    else:
                        print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了0点攻击")
                else:
                    self.MP += MAGIC_BOOKS[CHOOSE][1]
                    self.HP -= self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1]
                    print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "回复了自身" + str(-self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1])+"点生命值")

            else:
                print("魔法值不足")
                hit = 1 - NPC_.DEFENSE
                if hit > 0:
                    NPC_.HP -= hit
                    print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
                else:
                    print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")

        else:
            print("你没有此魔法")
            hit = 1 - NPC_.DEFENSE
            if hit > 0:
                NPC_.HP -= hit
                print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
            else:
                print(self.NAME + "使用普攻攻击了" + NPC_.NAME + "造成了0点攻击")

    if NPC_.HP <= 0:
        return 1
    else:
        return 0

def talk_to(self, NPC_, NPC_SCRIPT_, delay=0):
    # 按剧本和NPC聊天
    print('在' + self.POS_NAME + '遇到 ' + NPC_.NAME)

    for i in range(len(NPC_SCRIPT_)):
        if i % 2 == 1:  # 判断当前说话的人
            TURN = self.NAME
        else:
            TURN = NPC_.NAME

        print(TURN + ':' + NPC_SCRIPT_[i])
        time.sleep(delay)

def display_magic(self):  # 显示魔法
    print(self.MP,self.NAME + '会如下几种魔法:')
    print('魔法名 ,消耗点数')
    i = 0
    for iMagic in self.HAS_MAGIC:
        print('第', i+1, '个魔法:', MAGIC_BOOKS[iMagic])
        i = i + 1

#NPC选择最优攻击方式
def Choose_Action(self,NPC_):
    if self.HP < 2:
        if 3 in self.HAS_MAGIC:
            return 3
        else:
            HAS_MAGIC = [MAGIC_BOOKS[i][1] for i in self.HAS_MAGIC]
            HAS_MAGIC.sort()
            HAS_MAGIC.reverse()
            for i in HAS_MAGIC:
                for key, value in MAGIC_BOOKS.items():
                    if i in value:
                        if self.MP >= i:
                            return key
    else:
        HAS_MAGIC = [MAGIC_BOOKS[i][1] for i in self.HAS_MAGIC]
        HAS_MAGIC.sort()
        HAS_MAGIC.reverse()
        for i in HAS_MAGIC:
            for key, value in MAGIC_BOOKS.items():
                if i in value:
                    if self.MP >= i:
                        return key
    return -1

#同属性战斗
def Choose_Action1(self,NPC_,WAY_,index1):
    return WAY_[index1]
#玩家提升属性
#挑战NPC
def Fight_With(self,NPC_):
    print('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')

    MAX_ROUND = 100
    IS_DEAD = 0

    for i in range(MAX_ROUND):
        if i%2==0:
            if self.IS_HUMAN:
                self.display_status_fighting()  # 显示玩家状态
                self.Display_Magic()  # 显示玩家魔法
                NPC_.display_status_fighting()  # 显示NPC状态
                HAS_MAGIC = []
                for j in self.HAS_MAGIC:
                    HAS_MAGIC.append(str(j))
                HAS_MAGIC = "/".join(HAS_MAGIC)
                choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
                IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_magic)
                IS_DEAD = IS_DEAD * 2  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
            else:
                choose_action = self.Choose_Action(NPC_)
                IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_action)
                IS_DEAD *= 2
        if i%2 == 1:
            if not NPC_.IS_HUMAN:
                choose_action = NPC_.Choose_Action(self)
                IS_DEAD = NPC_.Attack_One_Time(NPC_=self, CHOOSE=choose_action)
            else:
                self.display_status_fighting()  # 显示玩家状态
                self.Display_Magic()  # 显示玩家魔法
                NPC_.Display_Status()  # 显示NPC状态
                HAS_MAGIC = []
                for j in self.HAS_MAGIC:
                    HAS_MAGIC.append(str(j))
                HAS_MAGIC = "/".join(HAS_MAGIC)
                choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
                IS_DEAD = self.Attack_One_Time(NPC_=NPC_, CHOOSE=choose_magic)
            IS_DEAD = IS_DEAD*4   #用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
        if IS_DEAD>=1:
            print('【战斗结束】')
            #恢复状态
            self.HP = self.MAX_HP
            self.MP = self.MAX_MP
            NPC_.MP = NPC_.MAX_MP
            NPC_.HP = NPC_.MAX_HP
            #判断胜利者
            if IS_DEAD==2:
                print('【',self.NAME+'战胜了'+NPC_.NAME,'】')
                VICTORY.append(self)
                if self.IS_HUMAN:
                    self.Add_Attribute()


            elif IS_DEAD==4:
                VICTORY.append(NPC_)
                print('【',NPC_.NAME+'战胜了'+self.NAME,'】')
                if NPC_.IS_HUMAN:
                    NPC_.Add_Attribute()

            return IS_DEAD
        else:
            if i % 2 == 1:
                print('【第' + str(1 + int(i / 2)) + '回合结束!】\n===================================')

class World:

#如果只是做简单的话 实际上只要构建好攻击和掉血的机制就差不多了

PLAYER = Body(DEFENSE_=0.5,IS_HUMAN_=True)

def __init__(self):
    self.NPCs = {
        'school elder sister': Body(NAME_='school elder sister', HAS_MAGIC_=[0, 1,3]),
        'ice monster': Body(NAME_='ice monster', HAS_MAGIC_=[2]),
        'fire monster': Body(NAME_='fire monster', HAS_MAGIC_=[0])
    }
    print("欢迎来到最强战士之战的游戏")
    # self.PLAYER.NAME = input("请输入玩家姓名")
    print('....这个残酷的世界即将开始.....')

    welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎加入最强战士之战'
    # self.display_a_line(script=welcome_script)
    print(welcome_script)

def self_NPC_(self):
    NPCs = []
    t = []
    for i in range(10):
        NPC = Body(NAME_="克隆人"+str(i),HP_=random.randint(3,6),MP_=random.randint(2,10),HAS_MAGIC_=[random.randint(0,6) for i in range(2)])
        NPCs.append(NPC)
        VICTORY.append(NPC)
    for i in range(5):
        NPC1 = random.choice(NPCs)
        NPCs.remove(NPC1)
        NPC2 = random.choice(NPCs)
        NPCs.remove(NPC2)
        t1 = threading.Thread(target=self.NPC,args=(NPC1,NPC2))
        t.append(t1)
    #开启线程
    for i in t:
        i.start()

#NPC遭遇
def NPC(self,NPC1,NPC2):
    print(NPC1.NAME + "与" + NPC2.NAME)
    NPC1.talk_to(NPC_=NPC2, NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)
    NPC1.npc_learn_Magic_from(NPC2)
    NPC1.Fight_With(NPC2)

#NPC比赛
def Game(self):
    SILVER_MEDAL = []
    BRONZE_MEDAL = []
    t = []
    for i in range(100):
        NPC = Body(NAME_="克隆人"+str(i),HP_=random.randint(3,6),MP_=random.randint(2,4),HAS_MAGIC_=[random.randint(0,6) for i in range(2)])
        VICTORY.append(NPC)
    while len(VICTORY) > 1:
        if len(VICTORY) == 4:
            BRONZE_MEDAL.extend(VICTORY)
        if len(VICTORY) == 2:
            SILVER_MEDAL.extend(VICTORY)
        for i in range(int(len(VICTORY)/2)):
            NPC1 = random.choice(VICTORY)
            VICTORY.remove(NPC1)
            NPC2 = random.choice(VICTORY)
            VICTORY.remove(NPC2)
            t1 = threading.Thread(target=NPC1.Fight_With, args=(NPC2,))
            t.append(t1)
            t1.start()
        for i in t:
            i.join()

        player = [i.NAME for i in VICTORY]
        print(player)

    VICTORY1 = copy.deepcopy(VICTORY)
    BRONZE_MEDAL = list(set(BRONZE_MEDAL) - set(SILVER_MEDAL))
    SILVER_MEDAL = list(set(SILVER_MEDAL) - set(VICTORY))
    VICTORY.clear()
    BRONZE_MEDAL[0].Fight_With(BRONZE_MEDAL[1])

    print("金牌:", VICTORY1[0].NAME)
    time.sleep(0.3)
    print(VICTORY1[0].NAME  +  ':你们之中一个能打的都没有吗?')
    print("银牌:", SILVER_MEDAL[0].NAME)
    time.sleep(0.3)
    print(SILVER_MEDAL[0].NAME  +':死亡在敲门,不,敲门的是我')
    print("铜牌:", VICTORY[0].NAME)
    time.sleep(0.3)
    print(VICTORY[0].NAME +':要么战斗,要么被遗忘')
    time.sleep(0.3)


#npc同属性战斗
def With_Game(self):
    SILVER_MEDAL = []
    BRONZE_MEDAL = []
    t = []
    for i in range(20):
        NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
                   HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [1,1,0,3,-1,-1,-1,-1])
        VICTORY.append(NPC)
    for i in range(20,40):
        NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
                   HAS_MAGIC_=[0, 1, 3,4,5,6], WAY_=[0, 1, 0, 3, -1, -1, -1, -1])
        VICTORY.append(NPC)
    for i in range(40,60):
        NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
                   HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [0,0,3,-1,-1,-1,-1,-1])
        VICTORY.append(NPC)
    for i in range(60,80):
        NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
                   HAS_MAGIC_=[0,1,3,4,5,6],WAY_= [1,1,3,-1,-1,-1,-1,-1])
        VICTORY.append(NPC)
    for i in range(80,100):
        NPC = Body(NAME_="克隆人" + str(i), HP_=5, MP_=3,
                   HAS_MAGIC_=[0,1,3,4,5,6],WAY990_= [-1,-1,0,3,0,-1,-1,-1])
        VICTORY.append(NPC)
    while len(VICTORY) > 1:
        if len(VICTORY) == 4:
            BRONZE_MEDAL.extend(VICTORY)
        if len(VICTORY) == 2:
            SILVER_MEDAL.extend(VICTORY)
        for i in range(int(len(VICTORY) / 2)):
            NPC1 = random.choice(VICTORY)
            VICTORY.remove(NPC1)
            NPC2 = random.choice(VICTORY)
            VICTORY.remove(NPC2)
            t1 = threading.Thread(target=NPC1.Fight_With, args=(NPC2,))
            t.append(t1)
            t1.start()
        for i in t:
            i.join()

        player = [i.NAME for i in VICTORY]
        print(player)

    VICTORY1 = copy.deepcopy(VICTORY)
    BRONZE_MEDAL = list(set(BRONZE_MEDAL) - set(SILVER_MEDAL))
    SILVER_MEDAL = list(set(SILVER_MEDAL) - set(VICTORY))
    VICTORY.clear()
    BRONZE_MEDAL[0].Fight_With(BRONZE_MEDAL[1])

    print("金牌:", VICTORY1[0].NAME)
    time.sleep(0.3)
    print(VICTORY1[0].NAME+'你们之中一个能打的都没有吗?')
    print("银牌:", SILVER_MEDAL[0].NAME)
    time.sleep(0.3)
    print(SILVER_MEDAL[0].NAME+'死亡在敲门,不,敲门的是我')
    print("铜牌:", VICTORY[0].NAME)
    time.sleep(0.3)
    print(VICTORY[0].NAME+'要么战斗,要么被遗忘')



#随机选择NPC进行交流,学习,战斗
def Draw_NPC(self):
    NPCs = [i for i in self.NPCs.keys()]
    num = random.randint(0,len(NPCs)-1)
    return self.NPCs[NPCs[num]]


    #随机选择NPVC
    NPC_ = self.Draw_NPC()

    #遭遇NPC
    self.PLAYER.talk_to(NPC_=NPC_,NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)

    #向NPC进行学习
    self.PLAYER.Learn_Magic_From(NPC_)

    #随机挑战NPC
    NPC_ = self.Draw_NPC()
    self.PLAYER.Fight_With(NPC_)

if name == “main”:
magic_world = World()

# #npc遭遇、交流、战斗
# magic_world.self_NPC_()

# #玩家
# magic_world.run()
back()
story()
#npc比赛
magic_world.Game()

# #npc同属性下比赛
# magic_world.With_Game()


如果有什么方法能改进我的代码,希望各位观众老爷能和我说一声,在这里谢谢了
内容概要:本文围绕可变桨叶四旋翼无机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无机飞控系统的设计与优化提供了理论依据和技术支持。; 适合群:具备一定自动控制理论基础和Matlab编程能力,从事无机控制、飞行器动力学或机器系统研究的科研员及研究生。; 使用场景及目标:① 实现四旋翼无机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值