Python设计一个游戏类

设计一个父类,表示游戏角色:派生出多个子类用于表示不同职业的角色,为每一个类设置必要的属性和方法,并实例化对象进行测试。
更多python教学内容及代码访问omegaxyz.com
①父类:Player

所有角色有普通杀与普通防御功能,Hp代表血量,Bubble代表技能冷却时间,Angry代表力量,Defend指代普通防御。

②子类:Tank(坦克)、Assassin(刺客)、Archmage(法师)

坦克特殊技能能够迅速恢复失掉的血量,适用于做肉盾。

刺客身手矫健,能够出其不意攻其不备。

法师拥有魔法,在一定范围内随机改变自身的属性。

③双方的攻击与操作是通过多线程(Threading)来实现的,即两者攻击与防御可以在同一时间出现。

④本代码实例化了坦克和刺客两个对象。

代码:

import random
import threading
import time


class Player(threading.Thread):
    def __init__(self, Name, Angry, Hp, Rank, Bubble, Defend):
        threading.Thread.__init__(self)
        self.__Name = Name
        self.Angry = Angry
        self.Hp = Hp
        self.Rank = Rank
        self.Bubble = Bubble
        self.Defend = Defend

    def getRank(self):
        return self.Rank

    def setRank(self, Rank):
        self.Rank = Rank

    def getHp(self):
        return self.Hp

    def setHp(self, Hp):
        self.Hp = Hp

    def normal_kill(self):
        time.sleep(0.5)
        return -(self.Angry * self.Rank)

    def random_defend(self):
        temp = random.randint(-10, self.Defend)  # Defend越大则防御能力越大
        if temp > 0:
            return True

    def outputinfo(self):
        print('名称:', self.__Name, 'Hp:', self.Hp, '等级:', self.Rank, '技能冷却:', self.Bubble)


class Tank(Player):
    def __init__(self, Name, Angry, Hp, Rank, Bubble, Defend, recovery):
        threading.Thread.__init__(self)
        Player.__init__(self, Name, Angry, Hp, Rank, Bubble, Defend)
        self.__recovery = recovery

    def random_defend(self):
        temp = random.randint(-10, self.Defend + self.__recovery)
        if temp > 0:
            return True

    def regenerate(self):
        if self.Bubble > 0:
            time.sleep(0.5)
            if self.Hp < 100:
                self.Hp += 30
                if self.Hp > 100:
                    self.Hp = 100
            self.Bubble -= 10
        else:
            time.sleep(2)
            self.Hp += 5


class Assassin(Player):
    def __init__(self, Name, Angry, Hp, Rank, Bubble, Defend, Raid):
        Player.__init__(self, Name, Angry, Hp, Rank, Bubble, Defend)
        self.__Raid = Raid

    def Surprise_Attack(self):
        time.sleep(0.5)
        temp = 0 - self.Angry * self.Rank
        if self.Bubble > 0:
            temp2 = random.randint(-10, 20)
            if temp2 > 0:
                temp -= self.__Raid
                self.Bubble -= 10
        return temp


class Archmage(Player):
    def __init__(self, Name, Angry, Hp, Rank, Bubble, Defend, Magic):
        threading.Thread.__init__(self)
        Player.__init__(self, Name, Angry, Hp, Rank, Bubble, Defend)
        self.__Magic = Magic

    def magicHp(self):
        if self.Bubble > 0:
            temp = random.randint(50, 100)
            if temp > self.__Hp:
                self.__Hp = temp + self.__Magic
            self.Bubble -= 10

    def magic_kill(self):
        temp = 0
        if self.Bubble > 0:
            temp2 = random.randint(-10, 20)
            if temp2 > 0:
             temp -= self.__Magic
             self.Bubble -= 10
        return temp


def run_tank(tank, assassin):
    while tank.getHp() > 0 and assassin.getHp() >= 0:
        assassin.setHp(assassin.getHp() + tank.normal_kill())
        tank.outputinfo()
        time.sleep(0.2)
        tank.regenerate()
    if tank1.getHp() > 0:
        print("程咬金赢了")
    else:
        print("荆轲赢了")


def run_assassin(tank, assassin):
    while assassin.getHp() > 0 and tank.getHp() >= 0:
        if tank.random_defend() is True:
            tank.setHp(tank.getHp() + assassin.normal_kill())
        else:
            assassin.Surprise_Attack()
        assassin.outputinfo()
        time.sleep(0.2)



if __name__ == '__main__':
    print("-------------- 一刀999!--------------\n")
    time.sleep(1)
    print("所有角色有普通杀与普通防御功能,Hp代表血量,Bubble代表技能冷却时间\n")
    time.sleep(1)
    print("有坦克、刺客、法师三个角色\n")
    time.sleep(1)
    print("坦克 Tank\n")
    print("坦克特殊技能能够迅速恢复失掉的血量,适用于做肉盾\n")
    time.sleep(1)
    print("刺客 Assassin\n")
    print("刺客身手矫健,能够出其不意攻其不备\n")
    time.sleep(1)
    print("法师 Archmage\n")
    print("法师拥有魔法,随机改变自身的属性\n")
    time.sleep(1)
    print("游戏开始----------------------------------------------------!")
    time.sleep(1)
    # Name, Angry, Hp, Rank, Bubble, Defend, Magic):
    tank1 = Tank("程咬金", 5, 100, 1, 100, 20, 5)
    assassin1 = Assassin("荆轲", 5, 100, 1, 100, 20, 10)
    # run_tank(tank1, assassin1)
    # run_assassin(tank1, assassin1)

    threads = []
    t1 = threading.Thread(target=run_tank, args=(tank1, assassin1))
    threads.append(t1)
    t2 = threading.Thread(target=run_assassin, args=(tank1, assassin1))
    threads.append(t2)
    for t in threads:
        # t.setDaemon(True)
        t.start()

这里写图片描述
更多python教学内容访问omegaxyz.com

网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2018 • OmegaXYZ-版权所有 转载请注明出处

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值