菜鸟学python 哪吒_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='nn')

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='nn')

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] onlyn")

times += 1

if times == 2 :

print("仅剩一次机会,请谨慎操作!")

if times == 3 :

print("n"+"***********************游戏结束***********************")

break

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值