python面向对象程序设计实践(高级)——以《三国演义》中三英大战吕布为例

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
        
        
        
        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值