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

显示健康值和时间

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

首先把下面的代码加在第七部分(#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 health1 in 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)

while 1:

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 – 不断循环while 1:

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.1 if badrect.left<64: 之后

hit.play()

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

enemy.play()

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

shoot.play()

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

大功告成!

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

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

责任编辑:

python兔子编程_少儿编程分享:手把手教你用Python编写兔獾大作战(完)相关推荐

  1. 用python画小兔子_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    原标题:少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一) 游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫 ...

  2. python兔子编程_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(一)

    游戏制作 我们今天要制作的小游戏是Bunnies vs. Badgers (兔獾大作战).游戏中的兔子通过射箭抵御獾的进攻,从而保卫自己的四个堡垒.这个游戏是和你们一样的同龄人制作的噢~为此我们也会更 ...

  3. python兔子和獾_少儿编程分享:手把手教你用PYTHON编写兔獾大作战(三)

    让小兔子转向 现在,你的小兔子可以根据你的按键移动了! 不过现在小兔子一直面向右边.如果能用鼠标让小兔子面对不同的方向,不就更酷了吗!我们只需要用一些简单的三角函数知识就能解决这个问题. 让我们一起看 ...

  4. python 儿童 游戏_少儿编程分享:手把手教你用Python编写战斗机游戏(完)

    原标题:少儿编程分享:手把手教你用Python编写战斗机游戏(完) 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑 .接下来,我们要把单调的白色矩形换成好看的图片. 在前面的代码中,我们用 ...

  5. 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)

    游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...

  6. python图形设计编程_少儿编程分享:手把手教你用Python制作艺术图片

    原标题:少儿编程分享:手把手教你用Python制作艺术图片 在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用P ...

  7. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  8. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  9. python在财务中的应用-【手把手教你】Python金融财务分析

    微信公众号: 1. 货币时间价值 实际上numpy和scipy很强大,包含了计算各种财务指标的函数,可以直接调用,终值(fv).现值(pv).净现值(npv).每期支付金额(pmt).内部收益率(ir ...

  10. windows游戏编程_少儿编程该怎么学?看看帕拉卡3D动画编程创始人李西峙分享七个核心...

    原标题:少儿编程该怎么学?看看帕拉卡3D动画编程创始人李西峙分享七个核心 市场上,有很多教孩子们学习编程的平台.我认为,它们都太糟糕了.我宁愿让我的小孩去玩游戏,也不愿意让他们去这样的平台上学习编程. ...

最新文章

  1. mysql索引总结----mysql 索引类型以及创建
  2. 第一个android程序HelloWorld
  3. CSS添加多个背景图片
  4. vue 虚拟服务器,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现先后台分离开发...
  5. java小编程----反转字符串中的每一个单词
  6. python在材料方面的应用_python记录材料题带标准答案
  7. linux 强制结束p进程的命令,Linux常用命令之性能命令
  8. 关于【画面文言修正】 的 注意点。 (1.确认文字风格 2 从整体来去确认风格)
  9. MOQL—筛选器(Selector)(一)
  10. 教你win7关闭开机动画,大幅度加快开机时间
  11. Linux快捷键列表
  12. 为大家带来的是C语言入门视频教程
  13. 基于搜狗平台的微信文章爬虫
  14. mysql pxc安装部署_PXC安装部署
  15. 行业知识图谱调查报告(一):知识图谱概述
  16. 华为 Mate8 Emui 5.0 安卓 7.0 root 记录
  17. Arduino上U8g2库自定义中文库的经历
  18. Chrome插件离线安装方法及编程思路
  19. 超级无敌小小迷你宝宝小可爱大仙女芊老婆~
  20. github访问不进去,浏览器证书不安全,访问失败,证书失效,证书颁发者为VMware,谷歌浏览器小bug

热门文章

  1. AJAX, JSON.js,Newtonsoft.Json.dll,nunit.framework.dll 源代码
  2. Linux在日志中搜索关键词
  3. matlab 中 x 轴的各种设置
  4. Python创建空DataFrame及添加行数据
  5. RocketMQ学习-概览
  6. Linux常用命令——cd
  7. bug管理工具之禅道的测试模块的使用
  8. linux下select/poll/epoll机制的比较
  9. 一些常用的正则表达式收集
  10. VB.NET版+三层实现登陆