python面向对象程序设计实践(初级)
——以《三国演义》中三英大战吕布为例
设计实现思路:
设计类
- 定义武器类:武器名,攻击力
- 定义人物类:继承武器类,姓名,生命值
设计函数简化对象的使用
- 延时函数:延时0.5秒
- 查看生命值:查看所有对象的生命值
- 统一回复生命值:所有对象生命值+1
- 选择英雄
- 攻击:进攻者发起攻击, 使被进攻者生命值减少
- 三连击:进攻者连续三次攻击被进攻者
- 宣布战斗结果
辅助方法打印显示功能
- 打印符号
- 打印菜单
- 显示英雄列表
测试实例化对象,调用编写方法
- 测试对象、类及函数方法:使用while循环,调用函数方法。
下载相关PPT课件,请点击: python面向对象程序设计实践(高级)——以《三国演义》中三英大战吕布为例.pptx
#定义武器类:武器名,攻击力
class Wuqi():
def __init__(self,tools,fight):
self.fight = fight
self.tools = tools
#定义人物类,继承武器类,姓名,生命值
class People(Wuqi):
#初始化方法
def __init__(self,name,life,tools,fight):
super().__init__(tools,fight)
self.name = name
self.life = life
#每次回复1点生命值
def eat(self):
sleep()
if self.life <= 0:
print(self.name,'已阵亡!')
elif self.life == 100:
print(self.name,'已满血!')
else:
self.life += 1
print(self.name,'生命值+1~')
#查看当前生命值
def is_alive(self):
sleep()
if self.life <= 0:
print(self.name,'已阵亡!')
else:
print(self.name,'的生命值还有',self.life)
#攻击
def attack(self,people):
people.life -=self.fight
print("%s正在攻击%s~"%(self.name,people.name))
sleep()
print(people.name,'生命值-',self.fight)
sleep()
#三连击攻击技能
def attack_3(self,people):
people.life -=(self.fight*3)
print("%s正在攻击%s~"%(self.name,people.name))
sleep()
print(people.name,'生命值-',self.fight*3)
sleep()
#延时函数:延时0.5秒
import time
def sleep():
time.sleep(0.5)
#查看生命值:查看所有对象的生命值
def see_life():
gy.is_alive()
zf.is_alive()
lb.is_alive()
lvbu.is_alive()
#统一回复生命值:所有对象生命值+1
def add_life():
gy.eat()
zf.eat()
lb.eat()
lvbu.eat()
#攻击:进攻者发起攻击, 使被进攻者生命值减少
def gj(p1,p2):
p1.attack(p2)
#三连击:进攻者连续三次攻击被进攻者
def gj_3(p1,p2):
p1.attack_3(p2)
#打印符号
def print_sign(s):
print(s*20)
#打印菜单
def menu():
print_sign(">")
print("三英战吕布V2.0")
print("请根据提示输入:")
print("1、查看当前生命值")
print("2、攻击")
print("3、三连击")
print("4、本轮休战")
print("5、结束游戏")
print_sign("...")
#显示英雄列表
def p_list():
print_sign("...")
print("英雄列表:")
print("1、刘备")
print("2、关羽")
print("3、张飞")
print("4、吕布")
print_sign("...")
#选择英雄
def p_select(num):
if num == '1':
return lb
elif num == '2':
return gy
elif num == '3':
return zf
elif num == '4':
return lvbu
else:
return 'none'
#宣布战斗结果
def is_win():
if lvbu.life <= 0:
print("吕布已阵亡!")
else:
print("吕布存活!")
#测试对象、类及函数方法:使用while循环,调用函数方法。
if __name__ =="__main__":
#初始化人物对象
gy = People('关羽',100,'青龙偃月刀',10)
zf = People('张飞',100,'八丈蛇矛',8)
lb = People('刘备',100,'双股剑',7)
lvbu = People('吕布',100,'方天画戟',15)
while True:
#打印菜单选项
menu()
key = input("请输入功能相应的数字:")
#1、查看当前生命值
if key == '1':
see_life()
#2、攻击
elif key == '2':
p_list()
p1 = input("请输入进攻者编号:")
p2 = input("请输入被攻击者编号:")
p3 = p_select(p1)
p4 = p_select(p2)
if p3 == 'none' or p4 == 'none':
print("请正确输入人物编号!")
else:
gj(p3,p4)
#3、三连击
elif key == '3':
p_list()
p1 = input("请输入三连击进攻者编号:")
p2 = input("请输入三连击被攻击者编号:")
p3 = p_select(p1)
p4 = p_select(p2)
if p3 == 'none' or p4 == 'none':
print("请正确输入人物编号!")
else:
gj_3(p3,p4)
#4、本轮休战
elif key =='4':
add_life()
see_life()
#5、结束游戏
elif key == '5':
see_life()
#调用宣布战斗结果值
is_win()
print("本次战役结束!")
#跳出循环
break