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

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

首页休闲益智保卫城堡更新时间:2024-10-29


獾,拿起你们的武器!

好,现在我们造出了堡垒,也有了保卫城堡的主角兔子,是时候让敌人上场了!

在这一步中,我们要让獾随机地从不同方向出现并冲向堡垒。在游戏进行的过程中,獾也会变得越来越多。我们先列个清单,看看我们需要做些什么:

1. 把敌人獾加到一个列表(list)中

2. 每过一帧就更新一次獾的位置,并检测它们是否超出了屏幕范围

3. 把獾显示在屏幕上

首先,把下面的代码加到第二部分(#2)的末尾:

badtimer=100

badtimer1=0

badguys=[[640,100]]

healthvalue=194

上面的代码设置了一个计时器和一些其他的变量,所以每隔一段时间,游戏里就会出现一只新的獾。每过一帧,计时器badtimer就减少1,直到它的值变为0,这时让一只新的獾出现在屏幕上。

把下面两行代码加到第三部分(#3)末尾:

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

badguyimg=badguyimg1

第一行和前面其他载入图片等代码都差不多。第二行复制了獾的图像。

接着,你需要更新獾的位置,让它们相应地显示在屏幕上。把下面的代码加到#6.2后面:

# 6.3 – 在屏幕上显示獾

if badtimer==0:

badguys.append([640, random.randint(50,430)])

badtimer=100-(badtimer1*2)

if badtimer1>=35:

badtimer1=35

else:

badtimer1 =5

index=0

for badguy in badguys:

if badguy[0]<-64:

badguys.pop(index)

badguy[0]-=7

index =1

for badguy in badguys:

screen.blit(badguyimg, badguy)

第一行代码检查badtimer是否为0,如果是的话,就产生一只新獾,并根据badtimer已经被重设的次数来重新设置badtimer的值。第一个for循环更新了獾的x坐标,检测獾是否超出了屏幕范围,如果超出的话,就把它删除出列表。第二个for循环让所有在屏幕范围内的獾显示在屏幕上。

为了使用上面的random函数,我们需要用到random库。在第一部分末尾加上这行代码:

import random

最后,把这行代码加到第四部分(#4)的while语句后面,这样每一帧结束后badtimer的值就减少1:

badtimer-=1

再次运行游戏,现在小兔子可以射击,移动,转向,而獾也在试着冲向堡垒。

不过等等…为什么獾碰到堡垒时也没能摧毁它们呢?让我们赶紧补上一些代码 …

把这些代码加到#6.3的index =1之前:

# 6.3.1 – 攻击堡垒

badrect=pygame.Rect(badguyimg.get_rect())

badrect.top=badguy[1]

badrect.left=badguy[0]

if badrect.left<64:

healthvalue -= random.randint(5,20)

badguys.pop(index)

# 6.3.3 - 下一个敌人

这些代码比较简单。如果某只獾的x坐标小于64,就删掉那只獾,并把堡垒的健康值(health value)随机地减少5到20点(之后,我们将把健康值显示在屏幕上)。

现在运行游戏,你应该能看到一群獾冲向堡垒,并在成功攻击堡垒后消失。虽然你现在不能看见,但是堡垒的健康值也在相应地减少。


成功击中敌人!

獾在攻击你的堡垒,不过小兔子的弓箭却伤害不了他们,这怎么行?在这一步中我们要让弓箭能够射*敌人。

为了让弓箭射*敌人,我们要对所有的獾进行循环,并在这一层循环中,对所有的弓箭进行循环,检测这些弓箭是否射到了獾。如果射到了,就删掉獾和弓箭,并给准确度acc加1点。

在#6.3.1之后加上这些代码:

#6.3.2 - 检测弓箭是否射中獾

index1=0

for bullet in arrows:

bullrect=pygame.Rect(arrow.get_rect())

bullrect.left=bullet[1]

bullrect.top=bullet[2]

if badrect.colliderect(bullrect):

acc[0] =1

badguys.pop(index)

arrows.pop(index1)

index1 =1

在这些代码中有一点需要注意。If语句中的.colliderect是pygame自带的函数,能够检测两个矩形是否相交。剩下的代码执行的任务就和前面解释的一样。

如果你执行这个程序,会发现小兔子能够射*敌人了!

未完待续

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved