【面向对象】哪吒大战三太子

本文通过"哪吒大战三太子"的故事,深入浅出地解释了面向对象编程的概念,包括类的创建、特殊方法如__init__和__str__的使用、对象间的交互、封装以及异常处理等,旨在帮助读者更好地理解和掌握面向对象编程。

面向对象——哪吒大战三太子

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

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循环、条件判断,还有作用域问题,异常捕获机制等等!全部杂糅在了一起。当然,才疏学浅,还请各位大神不吝赐教~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值