用打怪游戏实例,深度理解python面向过程
python更其他的大多数计算机语言更擅长的是面向对象的编程,在理解面向对象之前,有必要先了解或理解一下什么是面向过程。
简而言之,面向过程就是根据现实中的需求,将所要解决的问题分解成步骤,然后用函数的形式一步步实现,差不多就是函数式编程的概念,就是通过调用一个个函数的形式来完成程序的执行,以实现现实中的需求。
面向过程的开发,特别使用python这种语言,可能比较繁琐,下面就是鄙人用的python的面向过程的编程思想来开发的一个打怪小游戏,思路是这样的:设计一个主函数,来调用其他的处理各类事件的函数。代码如下:
def hero(se=1,hp=10):
hp -= se
return hp
def boss(se=2,hp=5):
hp -= se
return hp
#hero函数和boss函数是英雄和boss的两个函数,参数se为武力值,hp为血量
#注意:hero中的hp为boss的血量,boss函数中的hp为英雄的血量
def upexp(se,money):
se = se+money
return se
#升级经验值以增加武力值的函数
def beat(a,b,c):
#英雄和怪物boss交战的函数
import time
h_hp = a #hero血量
b_hp = b #boss血量
h_se = c #hero打怪武力值
while h_hp > 0 and b_hp > 0:
#while的条件为英雄血量大于0并且boss血量大于0,因此当任何一方小于0,while结束,游戏结束
if h_hp <= 2: #当英雄血量低于或等于2
print('英雄,你的血量为%s'%h_hp)
uphp_inp = input('英雄是否要先撤退补充血量(y/n)?')
if uphp_inp == 'n':
b_hp = hero(se=h_se,hp=b_hp) #注意,hero返回的是boss的血量,传入的参数也是boss的血量
if b_hp > 0: #当boss的还有血量
print('英雄攻击,boss的血量还剩下%s'%b_hp)
time.sleep(1)
h_hp = boss(hp=h_hp)
if h_hp <= 0:
print('英雄血量小于0,game over')
return
else: #当boss没有血量
print('boss已经被消灭,恭喜英雄!')
return
else:
h_hp = 5 #当用户选择y之后,我们这里直接将英雄的血量重新赋值为5
b_hp = hero(se=h_se,hp=b_hp) #这里的代码表示的是英雄的血量大于2的情况
if b_hp <= 0:
print('boss血量小于0,已经被消灭')
break
else:
print('英雄攻击,boss血量还剩下%s'%b_hp)
time.sleep(1) #之所以要延迟一秒,主要是为了让打怪显得有次序感
h_hp = boss(hp=h_hp)
if h_hp <= 0:
print('英雄血量小于0,game over')
else:
print('boss攻击,英雄血量还剩下%s'%h_hp)
time.sleep(1)
def outup():
h_hp = 5
b_hp = 10 #boss血量
h_se = 1
beat(h_hp, b_hp, h_se)
#outup没有升级经验值,也就是没有升级武力值就打怪的函数
def withup():
upexp_inp = input('升级经验以增加武力值之前需要财富值,请问1+1=几:')
while upexp_inp != '2':
upexp_inp = input('回答错误,请问1+1=几:')
money = 2
h_se = upexp(se=1, money=2)
h_hp = 5
b_hp = 10 #boss血量
beat(h_hp, b_hp, h_se)
#withup是升级武力值的函数
#这里我们模仿c语言的面向过程的编程模式,写个主入口函数main
def main():
print('欢迎来到大器编程x1y1z1.com的python面向过程的打怪游戏实例...')
import time
time.sleep(1)
print('游戏开始')
time.sleep(1)
yn_inp = input('boss扛着棒槌过来了,英雄是否决定战斗(y/n):')
if yn_inp == 'n':
print('英雄选择退隐江湖,游戏退出!')
return
else:
print('boss的武力值为2,血量为10,英雄你的武力值为1,血量为5')
time.sleep(1)
up_inp = input('英雄是否要升级自己的武力值(y/n)')
if up_inp == 'n':
outup()
else:
withup()
#记得调用主函数main()
main()
#原创代码,转载请注明来源“大器编程x1y1z1.com”
更多游戏代码的解析以及面向过程的编程思想的内容可以参考如下内容:
留言与评论(共有 0 条评论) “” |