python设计游戏的设计背景_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()

9eedf731c80bf58d994265af59618439.png

更多python教学内容访问omegaxyz.com

网站文章采用知识共享许可协议BY-NC-SA4.0授权

© 2018 • OmegaXYZ-版权所有 转载请注明出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值