Python实现了哪吒大战三太子,快来玩小游戏吧

◆ ◆ ◆  ◆ ◆

面向对象

上一篇文章中,我们深入讲解了面向对象编程,包括面向对象的三大特性,以及属性定义方式、方法定义方式,最后还介绍了属性的封装,两个非常著名的装饰器:property装饰器和setter装饰器。很多读者看完后,直言看不懂。我认为,面向对象编程本来就是一种编程思想,上升到思想层面的东西,一天两天肯定是理解不了的,更别说靠看一些文字了,除非你是天才级别的。

为了让大家更好地理解面向对象编程思想,我把我之前做过的一个小游戏开源给大家,事先声明:可能这个代码写的比较粗糙,我们主要是学习思想。好了,走起~

"""
  Project Name : 哪吒大战三太子
  Created On : 7/30/2019 00:30:00 
  @Author : 严小样儿
"""


class Role():
  def __init__(self,role_name):
    self.__name = role_name
    self.lifevalue = 500
    self.attack = 45
    self.status = True
  
  def __str__(self):
    return "My name is %s,and my lifevalue is %d,and my attack is %d" %(self.__name,self.lifevalue,self.attack)
  
  def commonskill(self,obj):
    obj.lifevalue -= self.attack
    if (obj.lifevalue < 50) & (obj.lifevalue > 0) :
      obj.attack = obj.lifevalue
      print("Be beated %d times,%s in danger!" %(count,obj.__name))
    elif obj.lifevalue <=0:
      obj.status = False
      obj.lifevalue = 0
      obj.attack = 0
      print("Be beated %d times,%s dead." %(count,obj.__name))      
    else:
      pass
      
  def addtool(self,tool):
    if self.lifevalue == 0:
      print(" 已经死亡,不能购买兵器")
    elif self.lifevalue < 20:
      print(" 濒临死亡,不能购买兵器")
    else:
      global get 
      get = True
      self.tool = tool.name
      self.lifevalue += tool.lifeplus
      self.attack += tool.attackplus
  
  @property
  def name(self):
    return self.__name
  
  @name.setter
  def name(self,value):
    print("%s已改名为:%s" %(self.__name,value))
    print("\n"+"*"*50)
    self.__name = value
    
class Tool():
  def __init__(self,name,lifeplus,attackplus):
    self.name = name
    self.lifeplus = lifeplus
    self.attackplus = attackplus
     

以上代码我们把所需要的类创建出来了,具体的逻辑请大家务必仔细阅读代码部分,理解透彻一些。下面的代码部分就是实例化并调用的过程,实现了哪吒大战三太子的功能。

哪吒大战三太子



print("***********************游戏开始***********************")
r1 = Role("哪吒")
print(r1)


print("\n"+"*"*50)


r2 = Role("敖丙")
print(r2)


print("\n"+"*"*50)


r2.name = "东海三太子"
print(r1.name+"没有改名",end='\n\n')


t1 = Tool("百麟甲",100,50)


get = None 
count = 0
while True:
  n = input("请输入%s攻击%s次数:"%(r1.name,r2.name))
  #import random
  #n = random.randint(0,12)
  #print(n)
  try:
    n = int(n)  
  except Exception as error:
    print(error,end='\n\n')
    continue
  else:
    if n == 0:
      print("\n"+"***********************游戏结束***********************")
      break
    print("开打~\n")
    for i in range(n):
      if r2.status:
        count += 1
        r1.commonskill(r2)
    
  print(r2.name,"剩余生命值",r2.lifevalue)
  print(r2.name,"当前攻击力",r2.attack)


  print("\n"+"*"*50)


  if r2.lifevalue == 0:
    print("经过%d轮单方暴打,%s被活活打死!" %(count,r2.name))
    print("\n"+"***********************游戏结束***********************")      
    break
  else:
    times = 0
    while times < 3:
      help = input("帮助敖丙装备武器吗?[y/n]")
      #help = random.choice(['Y','y','N','n',0,'s'])
      #print(help)
      if help == 'Y' or help == 'y':
        r2.addtool(t1)
        if get:
          print(r2.name,"已装上",r2.tool)
          print(r2.name,"生命值属性 +",t1.lifeplus)
          print(r2.name,"攻击力属性 +",t1.attackplus)
          print("\n"+"*"*50)
        break
      elif help == 'N' or help == 'n':
        print("\n"+"*"*50)        
        break
      else:
        print("ValueError:Type [y/n] only\n")
        times += 1
        if times == 2 :
          print("仅剩一次机会,请谨慎操作!")
    if times == 3 :
      print("\n"+"***********************游戏结束***********************")
      break 
       

怎么样?!小游戏玩的还过瘾吗?在实例化的时候,可以修改属性哦!一件趁手的兵刃,可以提升战斗力,所向披靡。嘿嘿~为你喜爱的英雄,挑选兵器战斗吧!复制代码可以运行小游戏,我先玩为敬了。

结束语

我上面所写的“哪吒大战三太子”有意识地杂糅了各种语法规则以及面向对象常用的编程方法。比如从开始的创建Role类,创建Tool类,使用了特殊构造方法__init__,魔术方法__str__,实例对象可传入其他实例对象作为参数,调用其他实例对象属性,使用getter、setter进行封装,创建类实例化对象,并进行初始化、打印实例对象,测试getter、setter封装效果,while循环、for循环、条件判断,还有作用域问题,异常捕获机制等等!全部杂糅在了一起。当然,才疏学浅,还请各位大神不吝赐教~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值