Pygame游戏开发之太空射击实战敌人精灵篇_第1页
Pygame游戏开发之太空射击实战敌人精灵篇_第2页
Pygame游戏开发之太空射击实战敌人精灵篇_第3页
Pygame游戏开发之太空射击实战敌人精灵篇_第4页
Pygame游戏开发之太空射击实战敌人精灵篇_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Pygame游戏开发之太空射击实战敌人精灵篇目录视频敌人精灵敌人精灵生成敌人

视频

观看视频

敌人精灵

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

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

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

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

classMob(pygame.sprite.Sprite):

def__init__(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值(y0),以及一个位于两侧之间的x的随机值。

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

defupdate(self):

self.rect.y+=self.speedy

ifself.rect.topHEIGHT+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从屏幕上下来,就像这样:

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

classMob(pygame.sprite.Sprite):

def__init__(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.topHEIGHT+10orself.rect.left-25orself.rect.rightWIDTH+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离开屏幕时快速地重置它。

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

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

此部分的完整代码

#KidsCanCode-GameDevelopmentwithPygamevideoseries

#Shmupgame-part2

#Videolink:/watchv=-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):

def__init__(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.rightWIDTH:

self.rect.right=WIDTH

ifself.rect.left0:

self.rect.left=0

classMob(pygame.sprite.Sprite):

def__init__(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.topHEIGHT+10orself.rect.left-25orself.rect.rightWIDTH+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==pyg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论