Pygame游戏开发之太空射击实战敌人精灵怎么实现(pygame,开发技术)

时间:2024-05-04 05:49:37 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

在本课中,我们将添加一些敌人的精灵供玩家躲避。在本系列课程中,我们将使用Python和Pygame构建一个完整的游戏。它适用于已经了解Python基础知识并希望加深对Python的理解并学习编程游戏基础知识的初学者。

敌人精灵

在这一点上,我们不需要担心我们的敌人精灵是什么,我们只想让它们出现在屏幕上。你可能会认为你的游戏是关于宇宙飞船躲避流星或独角兽躲避飞行的比萨饼 - 就代码而言,这并不重要。

记住这一点,我们将在代码中将敌人的精灵命名为Mob通用名称。MOB-Mobile原指游戏中所有由电脑控制的角色,现也引申指一般指怪物,任何游戏怪物都可叫MOB。

我们将从定义精灵属性开始:

classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)

这里的关键是选择一个适合Mob出现的地方。我们不希望它们只是突然出现,所以我们选择一个位于顶部上方的y值(y<0),以及一个位于两侧之间的x的随机值。

Pygame游戏开发之太空射击实战敌人精灵怎么实现

现在,对于update(),我们可以快速移动精灵,但是当精灵从底部消失时呢?我们可以删除该精灵,然后生成另一个精灵,或者通过将精灵移回顶部上方的随机位置来获得完全相同的效果:

defupdate(self):
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)

生成敌人

我们将希望有很多敌人,所以我们将建立一个新的mobs组来控制所有敌人。这也将在以后的步骤中使我们的编程更轻松。然后,我们生成一些Mob并将其添加到组中:

all_sprites=pygame.sprite.Group()
mobs=pygame.sprite.Group()
player=Player()
all_sprites.add(player)
foriinrange(8):
m=Mob()
all_sprites.add(m)
mobs.add(m)

现在你应该有源源不断的Mob从屏幕上下来,就像这样:

Pygame游戏开发之太空射击实战敌人精灵怎么实现

这很好,但是让Mob都直接向下移动有点无聊。让我们在 x 方向上添加一点运动:

classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
self.speedx=random.randrange(-3,3)
defupdate(self):
self.rect.x+=self.speedx
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10orself.rect.left<-25orself.rect.right>WIDTH+20:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)

请注意,我们需要更改if语句以便在Mob离开屏幕时重新生成Mob。对角线移动的Mob在离开底部之前就已经离开侧面,所以我们需要当Mob离开屏幕时快速地重置它。

您的游戏现在应如下所示:

Pygame游戏开发之太空射击实战敌人精灵怎么实现

在下一课中,我们将学习如何检测两个精灵何时相互碰撞(碰撞),并使玩家能够向Mob开枪。

此部分的完整代码

#KidsCanCode-GameDevelopmentwithPygamevideoseries

Shmupgame-part2

Videolink:https://www.youtube.com/watch?v=-5GNbL33hz0

Enemysprites

importpygame
importrandom
WIDTH=480
HEIGHT=600
FPS=60

definecolors

WHITE=(255,255,255)
BLACK=(0,0,0)
RED=(255,0,0)
GREEN=(0,255,0)
BLUE=(0,0,255)
YELLOW=(255,255,0)

initializepygameandcreatewindow

pygame.init()

pygame.mixer.init()

screen=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Shmup!")
clock=pygame.time.Clock()
classPlayer(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((50,40))
self.image.fill(GREEN)
self.rect=self.image.get_rect()
self.rect.centerx=WIDTH/2
self.rect.bottom=HEIGHT-10
self.speedx=0
defupdate(self):
self.speedx=0
keystate=pygame.key.get_pressed()
ifkeystate[pygame.K_LEFT]:
self.speedx=-8
ifkeystate[pygame.K_RIGHT]:
self.speedx=8
self.rect.x+=self.speedx
ifself.rect.right>WIDTH:
self.rect.right=WIDTH
ifself.rect.left<0:
self.rect.left=0
classMob(pygame.sprite.Sprite):
definit(self):
pygame.sprite.Sprite.init(self)
self.image=pygame.Surface((30,40))
self.image.fill(RED)
self.rect=self.image.get_rect()
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
self.speedx=random.randrange(-3,3)
defupdate(self):
self.rect.x+=self.speedx
self.rect.y+=self.speedy
ifself.rect.top>HEIGHT+10orself.rect.left<-25orself.rect.right>WIDTH+20:
self.rect.x=random.randrange(WIDTH-self.rect.width)
self.rect.y=random.randrange(-100,-40)
self.speedy=random.randrange(1,8)
all_sprites=pygame.sprite.Group()
mobs=pygame.sprite.Group()
player=Player()
all_sprites.add(player)
foriinrange(8):
m=Mob()
all_sprites.add(m)
mobs.add(m)

Gameloop

running=True
whilerunning:

keeplooprunningattherightspeed

clock.tick(FPS)

Processinput(events)

foreventinpygame.event.get():

checkforclosingwindow

ifevent.type==pygame.QUIT:
running=False

Update

all_sprites.update()

Draw/render

screen.fill(BLACK)
all_sprites.draw(screen)

afterdrawingeverything,flipthedisplay

pygame.display.flip()
pygame.quit()

相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。

本文:Pygame游戏开发之太空射击实战敌人精灵怎么实现的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:怎么使用JS正则表达式验证邮箱和手机号下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18