版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 方法模型:动态问题
- it维护外包合同
- 东航物流外包合同
- 为啥要查外包合同
- 代理财务外包合同
- DB13-T 6257-2026 病理实验室传染性标本处置操作规范
- 企业间终止外包合同
- 健身房促销外包合同
- 公关公司外包合同
- 兴庆区财务外包合同
- 2026四川发展(控股)有限责任公司所属公司招聘5人笔试参考题库及答案解析
- 湖北省武汉市2026届高三毕业生四月调研考试语文试卷(含答案)
- 养老机构防灾避险课件
- 【 道法 】国家监察机关的职责课件-2025-2026学年统编版道德与法治八年级下册
- 江苏省兴化市2026届中考数学模拟预测题含解析
- 2026年辽宁能源集团招聘考试指南及模拟题解析
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 2026广东广州市黄埔区大沙街道招聘编外聘用人员4人备考题库及参考答案详解
- 老龄政策课件
- 国家事业单位招聘2025中国工艺美术馆招聘拟聘人员笔试历年参考题库典型考点附带答案详解(3卷合一)
- 企业管理 华为会议接待全流程手册SOP
评论
0/150
提交评论