好,现在我们造出了堡垒,也有了保卫城堡的主角兔子,是时候让敌人上场了!
在这一步中,我们要让獾随机地从不同方向出现并冲向堡垒。在游戏进行的过程中,獾也会变得越来越多。我们先列个清单,看看我们需要做些什么:
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