如何在 pygame 中添加敌人? [复制]

2023-12-04

我正在用 pygame 制作一个简单的游戏,目标是躲避来袭的敌人。我想要一个领带战斗机图像随机落下,并且 xwing 必须躲避它们,否则你就会死。如何在我的脚本中实现随机平局战士?在我的代码中,我收到一个错误,指出 x 未定义。

import pygame
import time
import random
pygame.init()

display_width = 1280
display_height= 800


pygame.display.set_mode((display_width, display_height), pygame.FULLSCREEN)

gameDisplay= pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption('X-Wing Game')
clock= pygame.time.Clock()

black= (0,0,0)
white= (255,255,255)
red = (255,0,0)
blue_violet = (138,43,226)


xwing_width = 65
xwing_height = 130

tie_width = 80
tie_height =64

#images
xwingImg = pygame.image.load('X-Wing.bmp')
tieImg= pygame.image.load('tiefighter.png')

def things(thingx, thingy, thingw, thingh, color):
    pygame.draw.rect(gameDisplay, color, [thingx, thingy, thingw, thingh])
    gameDisplay.blit(tieImg,(x,y))

def tieImg (x,y):
    pygame.image.load('tieImg')


def xwing (x,y):
    gameDisplay.blit (xwingImg,(x,y))

def text_objects(text, font):
    textSurface = font.render(text, True, red)
    return textSurface, textSurface.get_rect()

def crash ():
    message_display ('Ouch, You Crashed!')

def message_display(text):
    largeText = pygame.font.Font('freesansbold.ttf',25)
    TextSurf, TextRect = text_objects(text, largeText)
    TextRect.center = ((display_width/2), (display_height/2))
    gameDisplay.blit(TextSurf, TextRect)

    pygame.display.update()

    time.sleep(1.3)

    game_loop()


def game_loop():

    x = (display_width * 0.45)
    y = (display_height * .75)

    x_change = 0
    y_change = 0

    thing_startx = random.randrange(0, display_width)
    thing_starty = -600
    thing_speed = 7
    thing_width = 81
    thing_height =65


    gameEXIT = False

    while not gameEXIT:

        for event in pygame.event.get() :
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x_change = -5
                if event.key == pygame.K_UP:
                     y_change= -5
                if event.key == pygame.K_DOWN:
                    y_change =5
                elif event.key == pygame.K_RIGHT:
                    x_change = 5


            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    x_change=0



        x += x_change
        y += y_change

        gameDisplay.fill(black)

        things(thing_startx, thing_starty, thing_width, thing_height, black )
        thing_starty += thing_speed
        xwing (x,y)

        if x > display_width - xwing_width or x < 0:
             x_change=0
        if y>display_height-xwing_height or y<0:
            y_change=0


        pygame.display.update()
        clock.tick(60)


game_loop()
pygame.quit()
quit()

您可以使用列表并附加pygame.矩形它存储敌人的位置和大小,然后将敌人图像复制到正确的位置。对于碰撞检测,循环遍历敌人列表并使用Rect.colliderect检查玩家矩形是否与敌方矩形碰撞的方法。

import sys
import random
import pygame as pg


pg.init()
screen = pg.display.set_mode((640, 480))

XWING_IMG = pg.Surface((25, 38))
XWING_IMG.fill((90, 120, 150))
TIE_IMG = pg.Surface((40, 24))
TIE_IMG.fill((190, 60, 50))
BG_COLOR = pg.Color('gray15')


def main():
    clock = pg.time.Clock()
    # Surfaces/images have a `get_rect` method which 
    # returns a rect with the dimensions of the image.
    player_rect = XWING_IMG.get_rect()
    player_rect.center = (300, 400)
    change_x = 0
    change_y = 0
    enemies = []
    spawn_counter = 30

    done = False

    while not done:
        for event in pg.event.get():
            if event.type == pg.QUIT:
                done = True
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_d:
                    change_x = 5
                if event.key == pg.K_a:
                    change_x = -5
            if event.type == pg.KEYUP:
                if event.key == pg.K_d and change_x > 0:
                    change_x = 0
                if event.key == pg.K_a and change_x < 0:
                    change_x = 0

        # Spawn enemies if counter <= 0 then reset it.
        spawn_counter -= 1
        if spawn_counter <= 0:
            # Append an enemy rect. You can pass the position directly as an argument.
            enemies.append(TIE_IMG.get_rect(topleft=(random.randrange(600), 0)))
            spawn_counter = 30

        # Update player_rect and enemies.
        player_rect.x += change_x
        player_rect.y += change_y
        for enemy_rect in enemies:
            enemy_rect.y += 5
            # Collision detection with pygame.Rect.colliderect.
            if player_rect.colliderect(enemy_rect):
                print('Collision!')

        # Draw everything.
        screen.fill(BG_COLOR)
        for enemy_rect in enemies:
            screen.blit(TIE_IMG, enemy_rect)
        screen.blit(XWING_IMG, player_rect)

        pg.display.flip()
        clock.tick(30)


if __name__ == '__main__':
    main()
    pg.quit()
    sys.exit()

以这种方式计算帧数spawn_counter变量意味着游戏将取决于帧速率(对象生成的速度更慢或更快取决于帧速率)。要实现与帧速率无关的生成计时器,您可以使用返回的时间clock.tick or pygame.time.get_ticks正如所解释的here.

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

如何在 pygame 中添加敌人? [复制] 的相关文章

  • 避免由于相对 URL 导致的错误请求

    我正在尝试使用Scrapy抓取一个网站 并且我想要抓取的每个页面的url都是使用这种相对路径编写的 a href en item to scrap html Link a 现在 在我的浏览器中 这些链接可以工作 您可以访问类似的网址http
  • 使用请求验证 SSL 证书

    我正在尝试验证 SSL 但它不起作用 我在浏览器上访问了我想要访问的机密网站 在 Chrome 上 我单击了储物柜 gt 证书 gt 详细信息 gt 复制到文件 gt base64 gt cert cer 我的代码是 test reques
  • 在 Pandas 中按日期获取有效合约

    我在检测 pandas DataFrame 中的活动合约方面遇到了一些困难 假设每一行都是一个协商 对于每一行 我有两列 initial date 和 end date 我想知道的是按日期划分的活跃合约数量 到目前为止我做了一个非常低效的方
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • Python Kivy - 在本机网络浏览器中打开 url 的应用程序

    我尝试制作一个简单的应用程序 在单击 Screen One 上的按钮后 在 Kivy 中打开一个网页 我使用了这个主题 Python 在应用程序中直接显示网络浏览器 iframe https stackoverflow com questi
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案
  • 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

    From Django 教程 https www jetbrains com help pycharm 2017 1 creating and running your first django project html d28041e21

随机推荐

  • 在 Angular js 中单击提交后,如何获取在单选按钮中选择的值列表

    这是 HTML 该文件是在主页中定义全局控制器的部分 消息对象包含从第一页加载的数据
  • C - 如何在数组中存储多个字符串

    想知道如何在数组中存储不同的字符串 例如 用户输入 qwe 程序会将其存储在数组变量 0 中 输入另一个字符串会将其存储为变量 1 依此类推 int main int argc char argv char variable 1000 in
  • 通过引用外部页面的锚点来扩展隐藏的 div

    我有一个脚本 可以在页面加载时隐藏 显示 无 列表中的某些 div Div 内容代表一本书的描述 整个列表是某种参考书目 每个div都有一个id 例如 div1 div2 等 ul li div class hidden div li li
  • SMTP 错误:“客户端无权向此服务器提交邮件”

    我在发送电子邮件时收到以下错误 可能是什么原因 客户端没有权限 将邮件提交到该服务器 服务器 响应是 5 5 1 STARTTLS 可能不会 被重复 这是堆栈跟踪 堆栈跟踪 at System Net Mail StartTlsComman
  • EF6 alpha 异步等待实体存储过程/函数导入?

    我想将新的 async wait 功能应用到实体模型中导入的存储过程 函数导入 但目前还无法使用 EF6 alpha 是否可以在 EF6 alpha2 或自 20211 起的夜间构建 中调用返回复杂类型集合的实体函数导入 调用 SQL 存储
  • AR Drone 2 和 ffserver + ffmpeg 流媒体

    我希望能够将 AR Drone 2 的视频源从 Debian 服务器重新传输到 Flash 我知道 AR 无人机使用编解码器 p264 我对视频编解码器完全陌生 所以我不知道什么适合我想要实现的目标 我已经能够从 AR 无人机流式传输视频源
  • MySQL触发器:在插入时将auto_increment值复制到另一列

    我需要在插入时将 auto increment ID 值复制到另一列中 我想我需要一个 插入后 触发器 因为否则新 ID 是未知的 我试过这个 IF NEW content IS NULL THEN SET NEW content NEW
  • Spring boot:不支持请求方法“PUT”

    我得到了Request method PUT not supported击中时出错PUTRestful API 上的方法来上传文件 以下是上传到此票证的信息 客户端日志 休息控制器 Spring Boot 应用程序配置 Tomcat日志 P
  • 保存 CLOS 对象

    将任何 Common Lisp 结构对象保存到文件 可读 似乎相对简单 例如 defun save structure object object filename with open file stream filename direct
  • 同一应用程序中的 Django 不同时区

    我正在开发一个关于休假管理的 Django 应用程序 其中有来自不同国家的员工 我将创建休假时的数据存储到数据库中 现在 我希望插入数据库的日期时间是该特定员工工作地点的当前当地时间 例如 假设 X 先生在印度工作 Y 在纽约工作 如果X申
  • 使用 WSDL 中的 WCF 托管服务 - SVCUtil 为方法生成详细类型

    我有一个来自已发布的 ASMX Web 服务的 WSDL 文件 我追求什么 正在创建一个模仿真实服务的模拟服务以进行测试 在 WSDL 中 我使用 SvcUtil exe 生成代码 显然它也生成 服务器端接口 问题是它生成的接口非常笨重 例
  • UltragridCells 中的标准格式与自定义格式

    我正在尝试格式化Ultragridcell使用下面的代码 它工作正常 Code DefaultEditorOwnerSettings editorSettings DateTimeEditor datetime editor editorS
  • REG 添加 REG_MULTI_SZ 多行注册表值

    要添加 REG MULTI SZ 多行注册表值 我可以这样做 reg exe ADD HKLM path to registry key v RegistryValue t REG MULTI SZ d abc 0def 0 这将添加 ab
  • CMake错误:本项目中使用了以下变量,但它们被设置为NOTFOUND

    我正在 CentOS 6 上为项目运行 CMake 构建脚本 但收到以下错误 CMake Error The following variables are used in this project but they are set to
  • 快速排序与合并排序[重复]

    这个问题在这里已经有答案了 为什么快速排序比合并排序更好 See 维基百科上的快速排序 通常 快速排序显着 在实践中比其他 nlogn 更快 算法 因为它的内循环可以 在大多数情况下得到有效实施 架构以及大多数现实世界中 数据 可以进行设计
  • 使用 HttpClient 将字节数组发送到 Web API 服务器

    我想将此数据发布到 Web API 服务器 public sealed class SomePostRequest public int Id get set public byte Content get set 使用此代码作为服务器 R
  • 本机查询上的 Mockito NullPointerException

    我的查询对象有问题 即使我使用查询模拟对象对其进行存根 它也会变为空 这是代码 Query query getEntityManager createNativeQuery queryString SomeRandom class retu
  • 文件java替换字符

    我必须检查文本文档是否存在 然后我必须将其中的字母替换为 o 我已经完成了如何替换 char 的第一部分 class FDExists public static void main String args File file new Fi
  • 如何在 Bash 中编写“for”循环?

    我正在寻找基本循环 例如 for int i 0 i lt MAX i doSomething i 但对于巴什来说 From 这个网站 for i in seq 1 10 do echo i done
  • 如何在 pygame 中添加敌人? [复制]

    这个问题在这里已经有答案了 我正在用 pygame 制作一个简单的游戏 目标是躲避来袭的敌人 我想要一个领带战斗机图像随机落下 并且 xwing 必须躲避它们 否则你就会死 如何在我的脚本中实现随机平局战士 在我的代码中 我收到一个错误 指