PyGame Space Invaders 游戏 - 让外星人一起移动

2024-03-08

我已经使用 PyGame 模块在 Python 中创建了一个 Space Invaders 克隆,但是当它们到达游戏屏幕边缘时,让它们一起向下移动时遇到了一些困难。

当外星人到达游戏屏幕边缘时,我该如何做到这一点,他们都同时改变方向并下降一个级别?

import pygame
import random

class spaceInvader(pygame.sprite.Sprite):

    def __init__(self):
        self.image = pygame.image.load("spaceInvader.png")
        self.x = 200
        self.y = 390

        self.shots = []

    def handle_keys(self):
        key = pygame.key.get_pressed()
        dist = 5
        if key[pygame.K_RIGHT]:
            self.x+=dist
        elif key[pygame.K_LEFT]:
            self.x-=dist

    def draw(self, surface):
        surface.blit(self.image,(self.x,self.y))
        for s in self.shots:
            s.draw(screen)

class Alien(pygame.sprite.Sprite):

    def __init__(self,x,y,direction,alienType):
        pygame.sprite.Sprite.__init__(self)

        self.AlienType = alienType
        self.Direction = direction

        if alienType == 1:
            alienImage = pygame.image.load("alien1.png")
            self.Speed = 1
            self.Score = 5

        if alienType == 2:
            alienImage = pygame.image.load("alien2.png")
            self.Score = 15
            self.Speed = 1

        if alienType == 3:
            alienImage = pygame.image.load("alien3.png")
            self.Score = 10
            self.Speed = 1

        if alienType == 4:
            alienImage = pygame.image.load("alien4.png")
            self.Score = 20
            self.Speed = 1

        if alienType == 5:
            alienImage = pygame.image.load("alien5.png")
            self.Score = 25
            self.Speed = 1

        self.image = pygame.Surface([26, 50])
        self.image.set_colorkey(black)
        self.image.blit(alienImage,(0,0))
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y

    def moveAliens(self):
        if self.Direction == "right":
            self.rect.x += self.Speed
        if self.Direction == "left":
            self.rect.x -= self.Speed

pygame.init()

pygame.mouse.set_visible(False)
screen = pygame.display.set_mode([400,400])

allAliens = pygame.sprite.Group()
spaceInvader = spaceInvader()

pygame.display.set_caption("Space Attack")
background_image = pygame.image.load("Galaxy.png").convert()
pygame.mouse.set_visible(True)
done = False
clock = pygame.time.Clock()
black =( 0, 0, 0)
white =( 255,255,255)
red = (255, 0, 0)
score = 0
enemies = []

#For X coords
spawnPositions = [50,100,150,200,250,300,350]

yCoord = 10

for n in range(5):
    for i in range(len(spawnPositions)):
        xCoord = spawnPositions[i] 
        alienType = random.randint(1,5)
        alien = Alien(xCoord, yCoord,"right", alienType)
        allAliens.add(alien)
    yCoord = yCoord + 15

loop = 0
while done == False:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    for alien in (allAliens.sprites()):
        if alien.rect.x < 0:
            alien.rect.y = alien.rect.y + 15
            alien.Direction = "right"
        if alien.rect.x > 395:
            alien.rect.y = alien.rect.y + 15
            alien.Direction = "left"
        loop =+1

    for alien in (allAliens.sprites()):
        alien.moveAliens()

    spaceInvader.handle_keys()
    screen.blit(background_image,[0,0])
    spaceInvader.draw(screen)
    allAliens.draw(screen)
    pygame.display.flip()
    clock.tick(20)

pygame.quit()

Thanks.


你的问题就出在这里:

for alien in (allAliens.sprites()):
    if alien.rect.x < 0:
        alien.rect.y = alien.rect.y + 15
        alien.Direction = "right"
    if alien.rect.x > 395:
        alien.rect.y = alien.rect.y + 15
        alien.Direction = "left"
    loop =+1

我猜外星人现在正在单独降落?

您需要更改此设置,以便当一个外星人触发这些 if 语句时,所有外星人的y and direction被适当地设置,而不仅仅是击中侧面的那个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyGame Space Invaders 游戏 - 让外星人一起移动 的相关文章

  • 如何用python脚本控制TP LINK路由器

    我想知道是否有一个工具可以让我连接到路由器并关闭它 然后从 python 脚本重新启动它 我知道如果我写 import os os system ssh l root 192 168 2 1 我可以通过 python 连接到我的路由器 但是
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 在 Sphinx 文档中*仅*显示文档字符串?

    Sphinx有一个功能叫做automethod从方法的文档字符串中提取文档并将其嵌入到文档中 但它不仅嵌入了文档字符串 还嵌入了方法签名 名称 参数 我如何嵌入only文档字符串 不包括方法签名 ref http www sphinx do
  • 如何通过索引列表从 dask 数据框中选择数据?

    我想根据索引列表从 dask 数据框中选择行 我怎样才能做到这一点 Example 假设我有以下 dask 数据框 dict A 1 2 3 4 5 6 7 B 2 3 4 5 6 7 8 index x1 a2 x3 c4 x5 y6 x
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • python import inside函数隐藏现有变量

    我在我正在处理的多子模块项目中遇到了一个奇怪的 UnboundLocalError 分配之前引用的局部变量 问题 并将其精简为这个片段 使用标准库中的日志记录模块 import logging def foo logging info fo
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解

随机推荐

  • 编辑 RichTextBox Run 元素而不拆分为多个 Run 元素 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个 WPF 应用程序RichTextBox 文本框中的文本通过跨度以编程方式构建并运行到一个段落 每个句子都是一个
  • 中继器中的 ASP.NET RadioButtonList?

    aspx 文件
  • 使用路由时将 match param 和 props 传递到 React 组件中

    我有一个功能性反应组件 想要为我的组件中选定的人呈现一些属性 所以我首先绘制一个简单的列表 其中包含每个人的链接 props persons map person i gt return li person name li 然后我制定路线
  • String 和 Char 类型在 .NET 中如何存储在内存中?

    我需要存储一个语言代码字符串 例如 en 它始终包含 2 个字符 将类型定义为 String 还是 Char 更好 private string languageCode vs private char languageCode 或者还有其
  • 在网络应用程序中显示文件类型图标?

    在桌面应用程序中 您通常可以获取特定文件类型的底层操作系统图标并将其显示给用户 在网络应用程序中 我无法使用此类功能 因此看起来我可能需要提供自己的图标集 有谁知道有哪些针对常见图标类型的经过良好许可的免费图标集 我找到了一个github上
  • 处理 AJAX 请求上的 SAML 重定向

    我有几个 AngularJS 应用程序 全部使用 Spring Java 和 SAML 2 0 进行 SSO 利用 Spring Security SAML 扩展 我的 SSO ID 提供商是 OpenAM 一切运行良好 但是 我遇到了一种
  • 是否应该将依赖项注入比需要的更多“级别”?

    我正在使用 SOLID 原则编写 C ASP NET MVC Web 应用程序 我写了一个ViewModelService 这取决于AccountService and a RepositoryService 所以我将这两个服务注入到Vie
  • numpy 数组的缓存装饰器

    我正在尝试为具有 numpy 数组输入参数的函数制作一个缓存装饰器 from functools import lru cache import numpy as np from time import sleep a np array 1
  • 如何将自定义包添加到 Dymola/Modelica 的启动路径中?

    我有一个自定义包 我发现自己在 Dymola 模型中重复使用该包 并且我想将此包放在一个公共目录中 每当我启动 Dymola 时都会自动加载该目录 我当前的策略是在加载我正在处理的模型时加载自定义包 然后保存总计 这并不优雅 因为自定义包的
  • 如何将轴移动到图表中心?

    我需要在原点位于屏幕中心 或中心附近的某个位置 但不一定在中心 的坐标系上绘制一个函数 并且我需要绘制轴 以便它们在原点交叉 轴也应该有标签和抽动以及箭头 我不知道如何有效地做到这一点 到目前为止 在我的代码中 我手动设置了抽动的偏移量 并
  • phpMyAdmin 抛出 #2002 无法登录 mysql 服务器 phpmyadmin

    我已经在本地计算机上安装了MySQL服务器企业版5 1 现在我想安装phpMyAdmin 但它不起作用 我已将 phpMyAdmin 解压到我的服务器根目录并浏览到 localhost phpMyAdmin setup index php
  • 如何使用 wkhtmltopdf 在页眉/页脚 html 中进行页码编号?

    我正在开发一个电子发票系统 我们的功能之一是生成发票的 PDF 并邮寄它们 我们有多个发票模板 稍后还会创建更多模板 因此我们决定使用 HTML 模板 生成 HTML 文档 然后将其转换为 PDF 但我们面临着 wkhtmltopdf 的一
  • ios 标签栏自定义图像

    我在工作ios我需要定制的应用程序tabbar像是this http postimage org image jxm57t89j 首先我创建了5个viewcontrollers导航控制器中的每一个 然后把它们放进去tabbbarcontro
  • Symfony onFlush Doctrine 监听器

    嗨 我有一个 onFlush 监听器
  • 在新窗口中打开图像

    如何使用其在新窗口中打开图像id function swipe var largeImage document getElementById largeImage largeImage style display block largeIm
  • 更改Android自定义SurfaceView的大小

    我正在尝试为 Android 应用程序创建 2D 游戏引擎 我已经关注了本教程 http www droidnova com 2d tutorial series part ii 772 html 这对于创建全屏显示效果很好 但我不想要这样
  • servicestack ormlite 中的分页

    我正在寻找一种在 ormlite 中实现分页的好方法 我发现了另一种question https stackoverflow com questions 15705419 passing params expression results
  • 从 Intent.createChooser 获取选择的应用程序

    我正在尝试捕捉结果Intent createChooser了解用户选择共享哪个应用程序 我知道有很多与此相关的帖子 如何知道用户在使用意图选择器时选择了哪个应用程序 https stackoverflow com questions 106
  • Filemaker GetAs...如何在网页上显示容器字段?

    我有一个 ASP Net 应用程序 需要显示存储在 Filemaker 容器字段中的图像 我的查询语句如下所示 SELECT GetAs Image JPG FROM UA Item Pictures WHERE Stock Number
  • PyGame Space Invaders 游戏 - 让外星人一起移动

    我已经使用 PyGame 模块在 Python 中创建了一个 Space Invaders 克隆 但是当它们到达游戏屏幕边缘时 让它们一起向下移动时遇到了一些困难 当外星人到达游戏屏幕边缘时 我该如何做到这一点 他们都同时改变方向并下降一个