少儿编程分享:手把手教你用Python编写兔獾大作战(五)

少儿编程分享:手把手教你用Python编写兔獾大作战(五)
少儿编程分享:手把手教你用Python编写兔獾大作战(五)

游戏分享:手把手教你用Python编写

兔獾大作战(五)

2018.1.20

又完成一个小游戏啦~

显示健康值和时间

现在游戏进行得很不错了!我们现在需要不断记录分数,看看小兔子的防守做得怎么样。我们可以在屏幕左上角加一个“血槽”来表示现在堡垒的健康值,并在屏幕右上角显示存活的时间。

首先把下面的代码加在第七部分(#7)开头,让屏幕右上角显示时间:

#6.4–显示时间

font=pygame.font.Font(None,24)

survivedtext=font.render(str((90000-

pygame.time.get_ticks())/60000)+":"+str((90000-

pygame.time.get_ticks())/1000%60).zfill(2),True,(0,0,0))

textRect=survivedtext.get_rect()

textRect.topright=[635,5]

screen.blit(survivedtext,textRect)

上面的代码设置了一个字号为24的新字体,font.render把这个新字体用于屏幕上所有的函数。接着,我们把文字放在屏幕右上角(topright)并显示在屏幕上。

现在我们加“血槽”。不过在此之前,我们需要先加载血槽的图像。把下面两行代码加到第三部分(#3)末尾:

healthbar=pygame.image.load("resources/images/healthbar.png")

health=pygame.image.load("resources/images/health.png")

第一张图片healthbar.png是用于整个血槽的红色图片。第二张图片health.png是用于显示当下健康值的绿色图片。

现在把下面的代码添加在#6.4之后

#6.5–显示血槽

screen.blit(healthbar,(5,5))

for health1in range(healthvalue):

screen.blit(health,(health1+8,8))

这几行代码首先显示出整个红色血槽,然后根据当下的健康值改变绿色的部分。运行程序,你现在能够看到左上角的血槽和右上角的时间。

揭晓胜负

到目前为止,即使你的血槽空了,游戏还能继续,你还能继续攻击敌人。为了解决这个问题,我们需要加上决定胜负的条件。

为了确定胜负,我们需要退出主循环,进入胜负循环。在胜负循环中,你需要知道玩家是赢了还是输了,然后把胜负显示在屏幕上。

现在我们确定一下大致的胜负规则:

如果存活到了规定时间(90000ms或90s):

·停止运行游戏

·把游戏结果设置为1(即胜利)

如果堡垒都被摧毁了

·停止运行游戏

·把游戏结果设置为0(即失败)

计算出射击的精确度acc

把这些代码加到最后:

#10–胜负判断

if pygame.time.get_ticks()>=90000:

running=0

exitcode=1

if healthvalue<=0:

running=0

exitcode=0

if acc[1]!=0:

accuracy=acc[0]*1.0/acc[1]*100

else:

accuracy=0

#11–在屏幕上显示胜负

if exitcode==0:

pygame.font.init()

font=pygame.font.Font(None,24)

text=font.render("Accuracy:"+str(accuracy)+"%",True,(255,0,0)) textRect=text.get_rect()

textRect.centerx=screen.get_rect().centerx

textRect.centery=screen.get_rect().centery+24

screen.blit(gameover,(0,0))

screen.blit(text,textRect)

else:

pygame.font.init()

font=pygame.font.Font(None,24)

text=font.render("Accuracy:"+str(accuracy)+"%",True,(0,255,0)) textRect=text.get_rect()

textRect.centerx=screen.get_rect().centerx

textRect.centery=screen.get_rect().centery+24

screen.blit(youwin,(0,0))

screen.blit(text,textRect)

while1:

for event in pygame.event.get():

if event.type==pygame.QUIT:

pygame.quit()

exit(0)

pygame.display.flip()

小提示:其中,acc[0]*1.0是把acc[0]转化为浮点数。如果不将其转化为浮点数的话,计算的结果将是整数而不是小数。

第一个if语句检测时间是否用完。第二个if语句检测堡垒是否被摧毁。第三个if语句计算玩家的设计精准度。在第十一部分(#11)中,if语句检测玩家的胜负情况并显示相应的图片。

为了显示与胜负相关的图片,我们需要先加载这些图片。把下面的两行代码加到第三部分(#3)末尾:

gameover=pygame.image.load("resources/images/gameover.png")

youwin=pygame.image.load("resources/images/youwin.png")

最后,把第四部分(#4)中的:

#4–不断循环

while1:

badtimer-=1

改为:

#4–不断循环

running=1

exitcode=0

while running:

badtimer-=1

变量running判定游戏是否结束,变量exitcode判定玩家是赢了还是输了。

再次执行游戏,现在我们能知道输赢情况了!

第十步:音乐和音效

最后,让我们给游戏加点音乐和音效吧!

首先,我们需要把下面这行代码加到第二部分(#2)末尾:pygame.mixer.init()

然后把这些代码加到第三部分(#3)末尾来加载音效并设置音量:#3.1–载入音频

hit=pygame.mixer.Sound("resources/audio/explode.wav") enemy=pygame.mixer.Sound("resources/audio/enemy.wav") shoot=pygame.mixer.Sound("resources/audio/shoot.wav")

hit.set_volume(0.05)

enemy.set_volume(0.05)

shoot.set_volume(0.05)

pygame.mixer.music.load('resources/audio/moonlight.wav')

pygame.mixer.music.play(-1,0.0)

pygame.mixer.music.set_volume(0.25)

上面这块代码大部分都是用于加载音效文件以及设置音量的。不过注意pygame.mixer.music.load这一行——这行用于加载背景音乐,它的下一行则是让音乐不断重复播放。

现在,我们需要让音效根据我们的需要进行播放。根据注释(#后)的内容把代码放在相应的位置:

#放在#6.3.1if badrect.left<64:之后

hit.play()

#放在#6.3.2if badrect.colliderect(bullrect):之后

enemy.play()

#放在#8,if event.type==pygame.MOUSEBUTTONDOWN:之后

shoot.play()

运行游戏,现在我们有背景音乐和各种音效了!

大功告成!

你该为自己感到骄傲!你刚刚做了一个带有音乐,音效,防御者,攻击者和其他各种有趣元素的游戏!

当然,你也可以在这些代码的基础上加入自己的创新!比如把獾换成狐狸,或者升级小兔子的武器等等。

相关主题
相关文档
最新文档