首页 > 生辰八字

人狗大战怎么创建函数命理算命面向对象(小猿圈python学习)

函数 生辰八字 03-28

人狗大战是一个经典的游戏,它真的可以帮助我们学习和练习Python中的面向对象编程。在这篇文章中,我们将介绍怎样创建一个用于人狗大战游戏的函数。v27鬼金羊

first of all,大家需要定义一个类来预示游戏中的人物和狗。这个类可以蕴含一些实际案例变量,如人物和狗的姓名、生命值和攻击力等。并 且,它还不错蕴含一些方法,如攻击和被攻击等。v27鬼金羊

接着下面,俺们是可以创建一个函数来控制游戏的推进。这个函数可以接受两个参数,分别为人物和狗的实际案例。在函数中,俺们是可以使用循环来模拟人狗大战的过程。每次循环中,人物将执行攻击方法,狗将执行被攻击方法。通过不断重复这个过程,俺们是可以模拟人狗大战的战斗过程。v27鬼金羊

在函数中,我们还不错添加一部分判断语句来控制游戏的结束。例如,当人物的生命值小于等于零时,游戏结束,输出"人物胜利!!!";当狗的生命值小于等于零时,游戏结束,输出"狗胜利!!!"。这样,俺们是可以依据实时的生命值来核实确定游戏的结果。v27鬼金羊

除了控制游戏程序的函数外,我们还不错创建其他函数来扩展游戏的功能。例如,俺们是可以创建一个函数来随机生成人物和狗的属性,如姓名、生命值和攻击力等。这样,每一次游戏开始时,人物和狗的属性都将是随机的,增添了游戏的随机性和趣味性。v27鬼金羊

也就是说,通过创建函数来控制人狗大战游戏的程序,俺们是可以更好地理解和掌握面向对象编程的思想和方法。希望这个简单容易的示例能够帮助你更好地学习和应用Python中的面向对象编程。加油!!!v27鬼金羊

来源头条作者:路飞学城Luffycityv27鬼金羊

引子v27鬼金羊

你此刻是一家游戏公司的开发人员,此刻需要你开发一款叫做的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人,一个是狗,且人和狗皆有不同的技能,打比方说人拿棍打狗,狗可以咬人,怎么描述这种不一样的角色与他们的功能呢?v27鬼金羊

列下具体需求:1、人狗大战,生成多条狗,多个人v27鬼金羊

2、狗能咬人,人能打狗v27鬼金羊

3、咬了或被打了都掉血v27鬼金羊

你搜罗了自己掌握的所有技能,写出了下面的代码来描述这两个角色dog_attack_level={v27鬼金羊

"京巴":20,v27鬼金羊

"藏獒":80,v27鬼金羊

"平头哥":60v27鬼金羊

}v27鬼金羊

defdog(name,d_type):v27鬼金羊

ifd_typeindog_attack_level:v27鬼金羊

d={v27鬼金羊

"name":name,v27鬼金羊

"type":d_type,v27鬼金羊

"life_val":100v27鬼金羊

}v27鬼金羊

else:v27鬼金羊

print("未知物种,不易接近")v27鬼金羊

return非也nev27鬼金羊

returndv27鬼金羊

defperson(name,age,sex):v27鬼金羊

d={v27鬼金羊

"name":name,v27鬼金羊

"age":age,v27鬼金羊

"sex":sex,v27鬼金羊

"life_val":100v27鬼金羊

}v27鬼金羊

ifage>18:v27鬼金羊

d["attack_level"]=50v27鬼金羊

else:v27鬼金羊

d["attack_level"]=30v27鬼金羊

returndv27鬼金羊

上面两个方法等同于造了两个模子,游戏开始,你得生成一个人和狗的实际对象吧,怎么生成呢?dog1=dog("majj","平头哥")v27鬼金羊

dog2=dog("二哈","京巴")v27鬼金羊

p1=person("alex",22,"male")v27鬼金羊

两个角色对象生成了,狗和人还有不同的功能呀,狗会咬人,人会打狗,对不对?如何实现呢,。。想到了,可以每个功能再写一个函数,想执行哪个功能,直接调用就能够了,对不?defbite(dog_obj,person_obj):v27鬼金羊

person_obj["life_val"]-=dog_attack_level[dog_obj["type"]]v27鬼金羊

print("疯狗[%s]咬了[%s],掉血[%s]。。。"%(dog_obj["name"],person_obj['name'],dog_attack_level[dog_obj["type"]]))v27鬼金羊

defbeat(person_obj,dog_obj):v27鬼金羊

dog_obj["life_val"]-=person_obj['attack_level']v27鬼金羊

print("[%s]打了疯狗[%s],狗掉血[%s]。。。"%(person_obj["name"],dog_obj["name"],person_obj["attack_level"]))v27鬼金羊

dog1=dog("majj","平头哥")v27鬼金羊

dog2=dog("二哈","京巴")v27鬼金羊

p1=person("alex",22,"male")v27鬼金羊

bite(dog1,p1)#调用v27鬼金羊

beat(p1,dog2)v27鬼金羊

print(dog1,dog2)v27鬼金羊

上面的功能实现的简直是完美!!!v27鬼金羊

不过仔细玩耍一会,你就不小心干了下面这档子事v27鬼金羊

人是不应该调用狗的功能的,怎样在代码级别实现这个限制呢?dog_attack_level={v27鬼金羊

"京巴":20,v27鬼金羊

"藏獒":80,v27鬼金羊

"平头哥":60v27鬼金羊

}v27鬼金羊

defdog(name,d_type):v27鬼金羊

ifd_typeindog_attack_level:v27鬼金羊

d={v27鬼金羊

"name":name,v27鬼金羊

"type":d_type,v27鬼金羊

"life_val":100v27鬼金羊

}v27鬼金羊

else:v27鬼金羊

print("未知物种,不易接近")v27鬼金羊

return非也nev27鬼金羊

defbite(person_obj):#把这一个办法写在dog里面,预示这是dog独一无二的功能v27鬼金羊

person_obj["life_val"]-=dog_attack_level[d["type"]]v27鬼金羊

print("疯狗[%s]咬了[%s],掉血[%s]。。。"%(d["name"],person_obj['name'],dog_attack_level[d["type"]]))v27鬼金羊

d["bite"]=bitev27鬼金羊

returndv27鬼金羊

defperson(name,age,sex):v27鬼金羊

d={v27鬼金羊

"name":name,v27鬼金羊

"age":age,v27鬼金羊

"sex":sex,v27鬼金羊

"life_val":100v27鬼金羊

}v27鬼金羊

ifage>18:v27鬼金羊

d["attack_level"]=50v27鬼金羊

else:v27鬼金羊

d["attack_level"]=30v27鬼金羊

defbeat(dog_obj):#把这一个办法写在person里面,预示这是person独一无二的功能v27鬼金羊

dog_obj["life_val"]-=d['attack_level']v27鬼金羊

print("[%s]打了疯狗[%s],狗掉血[%s]。。。"%(d["name"],dog_obj["name"],d["attack_level"]))v27鬼金羊

d["beat"]=beatv27鬼金羊

returndv27鬼金羊

dog1=dog("majj","平头哥")v27鬼金羊

dog2=dog("二哈","京巴")v27鬼金羊

p1=person("alex",22,"male")v27鬼金羊

dog1["bite"](p1)#调用时只传递要咬谁就行了v27鬼金羊

p1["beat"](dog2)v27鬼金羊

print(dog1,dog2)v27鬼金羊

你是这样的机智,如此便实现了限制人只能用人本人的功能啦。v27鬼金羊

说了如此多,这跟面向对象有啥关系么?当然有,其实也就是说你上面写的代码,就是面向对象的代码。v27鬼金羊

你在设计角色时,为了让一个角色可以变成多个实体对象,你设计了一个基础模板,只要传入不同参数,就会产生不同的狗。这代表你已经开始切换成上帝视角看事情,上帝视角就是面向对象编程的视角,上帝要造世界万物,他当然不是一个一个的造出来,他当然是设计出一个个的物种的模板,紧接着通过模子批量批一个个的实体造出来。造出来的实体各有特色,属性、功能都不完全一样,有的人的贪婪、有的人好色、有的人懦弱,有的人迅猛。这几个人之间会发生啥关系,谁和谁交媾、谁和谁打仗,上帝懒的管,上帝只控制大局。听着玄乎吧,我们接着下面一点点接晓怎么通过面向对象在编程世界里做上帝。v27鬼金羊

v27鬼金羊

标签: