游戲模式:
- 假設(shè)有怪獸(monster)和英雄(hero)兩個(gè)角色,二者為敵對(duì)狀態(tài)
假設(shè)兩個(gè)角色初始血量為100,攻擊力的傷害服從隨機(jī)分布(7,17),二者相互攻擊,判斷誰(shuí)獲勝?
# # 定義精靈
class Sprite:
def __init__(self, name):
self.blood = 100 # 假設(shè)初始血量為:100
self.power = 12 # 假設(shè)基礎(chǔ)攻擊能力:12
self.name = name
def attack(self, monster):
# 假設(shè)每一次攻擊的傷害 服從隨機(jī)分布(7,17)
minus = rn.randrange(self.power - 5, self.power + 5)
print(minus)
if monster.has_living():
monster.minus_blood(minus)
print(monster.name + ' 剩余血量:\n' + str(monster.blood) + "\n")
print('---------------------')
# 輸出剩余血量
def minus_blood(self, num):
self.blood -= num
def has_living(self): # 判斷是否還有血量
if self.blood > 0:
return True
return False
###########################################################
m = Sprite('【魔王】') # 創(chuàng)建實(shí)例"魔王"
h = Sprite('【圣騎士】') # 創(chuàng)建實(shí)例“圣騎士”
print(m.name + '的初始血量:(保密 @-@)')
print(h.name + '的初始血量:100')
while m.has_living() and h.has_living():
print(m.name + ' 對(duì) ' + h.name + '\n造成傷害:')
m.attack(h)
print(h.name + ' 對(duì) ' + m.name + ' 造成傷害:')
h.attack(m)
if m.has_living():
print(m.name + ' 勝利!')
print('【游戲結(jié)束】')
elif h.has_living():
print(h.name + ' 勝利~!')
print('【游戲結(jié)束】')
else:
print(m.name + ' 和 ' + h.name + '均陣亡!')
print('【游戲結(jié)束】')
內(nèi)存分析:

游戲模擬內(nèi)存分析.png
運(yùn)行結(jié)果:
【魔王】的初始血量:(保密 @-@)
【圣騎士】的初始血量:100
【魔王】 對(duì) 【圣騎士】
造成傷害:
8
【圣騎士】 剩余血量:
92
---------------------
【圣騎士】 對(duì) 【魔王】 造成傷害:
9
【魔王】 剩余血量:
91
+++++
# 為簡(jiǎn)短篇幅,此處縮略部分
+++++
---------------------
【圣騎士】 對(duì) 【魔王】 造成傷害:
7
【魔王】 剩余血量:
24
---------------------
【魔王】 對(duì) 【圣騎士】
造成傷害:
15
【圣騎士】 剩余血量:
0
---------------------
【圣騎士】 對(duì) 【魔王】 造成傷害:
15
【魔王】 剩余血量:
9
---------------------
【魔王】 勝利!
【游戲結(jié)束】
第一次進(jìn)階:
通過(guò)繼承Sprite類,來(lái)嘗試開發(fā)一個(gè)新的功能:
- 給玩家(Hero)角色加一個(gè)終結(jié)技能(英雄有10%的幾率觸發(fā)終結(jié)技能);
- 為了保證游戲的體驗(yàn)感(不能厚此薄彼?(′???`?)),給怪獸(Monster)增加血量、增加基礎(chǔ)傷害;
這里主要寫了兩個(gè)繼承Sprite類的子類
class Hero(Sprite):
def bug_attack(self,monster):
monster.minus_blood(monster.blood)
def attack(self,monster):
super(Hero, self).attack(monster)
num = rn.randint(0,4)
if num == 1:
print(self.name + ' 使用技能:終結(jié)')
print(h.name + '對(duì)' + m.name + '造成傷害:%d'%(monster.blood))
self.bug_attack(monster)
class Monster(Sprite):
def __init__(self, name):
self.blood = 200
self.power = 15
self.name = name
輸出實(shí)例:
【魔王】的初始血量:(保密 @-@)
【圣騎士】的初始血量:100
【魔王】 對(duì) 【圣騎士】造成傷害:
12
【圣騎士】 剩余血量:
88
---------------------
【圣騎士】 對(duì) 【魔王】 造成傷害:
8
【魔王】 剩余血量:
192
---------------------
【魔王】 對(duì) 【圣騎士】造成傷害:
14
【圣騎士】 剩余血量:
74
---------------------
【圣騎士】 對(duì) 【魔王】 造成傷害:
13
【魔王】 剩余血量:
179
---------------------
【圣騎士】 使用技能:終結(jié)
【圣騎士】對(duì)【魔王】造成傷害:179
【圣騎士】 勝利~!
【游戲結(jié)束】