Python 比赛停止,尽管没有碰撞 导入系统 随机输入 导入pygame pygame.init() 宽度=800 高度=600 screen=pygame.display.set_模式((宽度、高度)) pygame.display.set_标题(“我的游戏”) 白色=(255,255,255) 黑色=(0,0,0) 红色=(255,0,0) 绿色=(0,255,0) 蓝色=(0,0255) 黄色=(255、255、255) player1=播放器(350、450、50、50、15、蓝色、屏幕) enemy1=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy2=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy3=敌人(随机。随机(0750),0,50,50,6,红色,屏幕) enemy4=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy5=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy7=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy8=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy6=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) 敌人列表=[enemy1,enemy2,enemy3,enemy4,enemy5,enemy6,enemy7,enemy8] 类Player():#用于生成Player对象 定义初始(自身、x、y、宽度、高度、级别、颜色、屏幕): self.x=x self.y=y self.vel=vel self.color=颜色 self.screen=屏幕 self.width=宽度 自我高度=高度 def移动(自我): keys=pygame.key.get_pressed() 如果键[pygame.K_LEFT]和self.x>0: self.x-=self.vel 如果键[pygame.K_RIGHT]和self.x0: self.y-=self.vel 如果键[pygame.K_DOWN]和self.y775: self.ex=random.randint(0750) self.ey=random.randint(01100) 我的敌人(自己): #更改此设置以获取更多敌人 pygame.draw.rect(self.screen,self.ecolor,(self.ex,self.ey,self.ewidth,self.ehight)) def碰撞(列表):#当前的问题。我不知道有什么问题。 如果敌人列表中的敌人有((敌方.ex>=player1.x和敌方.ex=buy.ex和player1.x=player1.y和敌方.ey=敌方.ey和player1.y

Python 比赛停止,尽管没有碰撞 导入系统 随机输入 导入pygame pygame.init() 宽度=800 高度=600 screen=pygame.display.set_模式((宽度、高度)) pygame.display.set_标题(“我的游戏”) 白色=(255,255,255) 黑色=(0,0,0) 红色=(255,0,0) 绿色=(0,255,0) 蓝色=(0,0255) 黄色=(255、255、255) player1=播放器(350、450、50、50、15、蓝色、屏幕) enemy1=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy2=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy3=敌人(随机。随机(0750),0,50,50,6,红色,屏幕) enemy4=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy5=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy7=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy8=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) enemy6=敌人(随机。随机数(0750),0,50,50,6,红色,屏幕) 敌人列表=[enemy1,enemy2,enemy3,enemy4,enemy5,enemy6,enemy7,enemy8] 类Player():#用于生成Player对象 定义初始(自身、x、y、宽度、高度、级别、颜色、屏幕): self.x=x self.y=y self.vel=vel self.color=颜色 self.screen=屏幕 self.width=宽度 自我高度=高度 def移动(自我): keys=pygame.key.get_pressed() 如果键[pygame.K_LEFT]和self.x>0: self.x-=self.vel 如果键[pygame.K_RIGHT]和self.x0: self.y-=self.vel 如果键[pygame.K_DOWN]和self.y775: self.ex=random.randint(0750) self.ey=random.randint(01100) 我的敌人(自己): #更改此设置以获取更多敌人 pygame.draw.rect(self.screen,self.ecolor,(self.ex,self.ey,self.ewidth,self.ehight)) def碰撞(列表):#当前的问题。我不知道有什么问题。 如果敌人列表中的敌人有((敌方.ex>=player1.x和敌方.ex=buy.ex和player1.x=player1.y和敌方.ey=敌方.ey和player1.y,python,python-3.x,pygame,Python,Python 3.x,Pygame,我的碰撞功能似乎有问题,但我似乎找不到问题所在。我不知道是什么原因导致我的游戏随机停止。我尝试用print语句替换返回值,以查看我的碰撞功能有何问题,结果表明,我的对象与敌人的对象随机碰撞,即使块本身不接触。您的测试逻辑错误: import sys import random import pygame pygame.init() WIDTH = 800 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygam

我的碰撞功能似乎有问题,但我似乎找不到问题所在。我不知道是什么原因导致我的游戏随机停止。我尝试用print语句替换返回值,以查看我的碰撞功能有何问题,结果表明,我的对象与敌人的对象随机碰撞,即使块本身不接触。

您的测试逻辑错误:

import sys
import random
import pygame

pygame.init()

WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption('My Game')

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

player1 = Player(350, 450, 50, 50, 15, BLUE, screen)
enemy1 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy2 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy3 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy4 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy5 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy7 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy8 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy6 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy_list = [enemy1, enemy2, enemy3, enemy4, enemy5, enemy6, enemy7, enemy8]

class Player(): #for making player  object
    def __init__(self, x, y, width, height, vel, color, screen):
        self.x = x
        self.y = y
        self.vel = vel
        self.color = color
        self.screen = screen
        self.width = width
        self.height = height

    def move(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.x > 0:
            self.x -= self.vel
        if keys[pygame.K_RIGHT] and self.x < 750:
            self.x += self.vel
        if keys[pygame.K_UP] and self.y > 0:
            self.y -= self.vel 
        if keys[pygame.K_DOWN] and self.y < 550:
            self.y += self.vel
        self.rect = (self.x, self.y, self.width, self.height)

    def drawPlayer(self):
        pygame.draw.rect(self.screen, self.color, (self.x, self.y, self.width, self.height))

class Enemy():# making enemy object
    randlist =[]
    x_pos = random.randint(50, 70)
    y_pos = 0
    def __init__(self, ex, ey, ewidth, eheight, evel, ecolor, screen):
        self.ex = ex
        self.ey = ey
        self.evel = evel
        self.ecolor = ecolor
        self.screen = screen
        self.ewidth = ewidth
        self.eheight = eheight

    def enemy_move(self):
        #probaly change this to vary speed in objects 
        self.ey += self.evel
        if self.ey > 775:
            self.ex = random.randint(0, 750)
            self.ey = random.randint(0, 100)

    def drawEnemy(self):
        #change this to get more enemies
        pygame.draw.rect(self.screen, self.ecolor, (self.ex, self.ey, self.ewidth, self.eheight))

def collisions(list):#the issue at hand. I dont know whats wrong with it.
    if any((enemy.ex >= player1.x and enemy.ex < (player1.x + player1.width)) for enemy in enemy_list) or any((player1.x >= enemy.ex and player1.x < (enemy.ex + enemy.ewidth)) for enemy in enemy_list):
        if any((enemy.ey >= player1.y and enemy.ey < (player1.y + player1.height)) for enemy in enemy_list) or any((player1.y >= enemy.ey and player1.y < (enemy.ey + enemy.eheight)) for enemy in enemy_list):
            return True
    return False

def main():
    is_running = True
    while is_running:
        FPS = pygame.time.Clock()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.fill(BLACK)
        player1.drawPlayer()
        for enemy in enemy_list:
            enemy.drawEnemy()
        if collisions(enemy_list):
            is_running = False
        player1.move()
        for enemy in enemy_list:
            enemy.enemy_move()
        pygame.display.update()
        FPS.tick(60)

main()

您的测试逻辑错误:

import sys
import random
import pygame

pygame.init()

WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))

pygame.display.set_caption('My Game')

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

player1 = Player(350, 450, 50, 50, 15, BLUE, screen)
enemy1 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy2 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy3 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy4 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy5 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy7 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy8 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy6 = Enemy(random.randint(0, 750), 0, 50, 50, 6, RED, screen)
enemy_list = [enemy1, enemy2, enemy3, enemy4, enemy5, enemy6, enemy7, enemy8]

class Player(): #for making player  object
    def __init__(self, x, y, width, height, vel, color, screen):
        self.x = x
        self.y = y
        self.vel = vel
        self.color = color
        self.screen = screen
        self.width = width
        self.height = height

    def move(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.x > 0:
            self.x -= self.vel
        if keys[pygame.K_RIGHT] and self.x < 750:
            self.x += self.vel
        if keys[pygame.K_UP] and self.y > 0:
            self.y -= self.vel 
        if keys[pygame.K_DOWN] and self.y < 550:
            self.y += self.vel
        self.rect = (self.x, self.y, self.width, self.height)

    def drawPlayer(self):
        pygame.draw.rect(self.screen, self.color, (self.x, self.y, self.width, self.height))

class Enemy():# making enemy object
    randlist =[]
    x_pos = random.randint(50, 70)
    y_pos = 0
    def __init__(self, ex, ey, ewidth, eheight, evel, ecolor, screen):
        self.ex = ex
        self.ey = ey
        self.evel = evel
        self.ecolor = ecolor
        self.screen = screen
        self.ewidth = ewidth
        self.eheight = eheight

    def enemy_move(self):
        #probaly change this to vary speed in objects 
        self.ey += self.evel
        if self.ey > 775:
            self.ex = random.randint(0, 750)
            self.ey = random.randint(0, 100)

    def drawEnemy(self):
        #change this to get more enemies
        pygame.draw.rect(self.screen, self.ecolor, (self.ex, self.ey, self.ewidth, self.eheight))

def collisions(list):#the issue at hand. I dont know whats wrong with it.
    if any((enemy.ex >= player1.x and enemy.ex < (player1.x + player1.width)) for enemy in enemy_list) or any((player1.x >= enemy.ex and player1.x < (enemy.ex + enemy.ewidth)) for enemy in enemy_list):
        if any((enemy.ey >= player1.y and enemy.ey < (player1.y + player1.height)) for enemy in enemy_list) or any((player1.y >= enemy.ey and player1.y < (enemy.ey + enemy.eheight)) for enemy in enemy_list):
            return True
    return False

def main():
    is_running = True
    while is_running:
        FPS = pygame.time.Clock()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()

        screen.fill(BLACK)
        player1.drawPlayer()
        for enemy in enemy_list:
            enemy.drawEnemy()
        if collisions(enemy_list):
            is_running = False
        player1.move()
        for enemy in enemy_list:
            enemy.enemy_move()
        pygame.display.update()
        FPS.tick(60)

main()

我向我们推荐
pygame.Rect.collide Rect
用于两个矩形对象的碰撞测试:

def冲突(列表):
player_rect=pygame.rect(player1.x,player1.y,player1.width,player1.height)
返回任何(
玩家正确碰撞正确((敌方.ex,敌方.ey,敌方.ewidth,敌方.ehight))
用于敌人列表中的敌人)

进一步的改进是将命中框存储在
玩家
敌人
对象的属性(
.rect
)中。在这种情况下,可以执行以下操作:

def冲突(列表):
返回任意(敌方列表中敌方的player.rect.collide rect(敌方.rect))

我向我们推荐
pygame.Rect.collide Rect
用于两个矩形对象的碰撞测试:

def冲突(列表):
player_rect=pygame.rect(player1.x,player1.y,player1.width,player1.height)
返回任何(
玩家正确碰撞正确((敌方.ex,敌方.ey,敌方.ewidth,敌方.ehight))
用于敌人列表中的敌人)

进一步的改进是将命中框存储在
玩家
敌人
对象的属性(
.rect
)中。在这种情况下,可以执行以下操作:

def冲突(列表):
返回任意(敌方列表中敌方的player.rect.collide rect(敌方.rect))

你也在对照对象本身检查对象。你能详细说明一下吗?哦,等等,对不起,我想我误读了你的代码。你也在对照对象本身检查对象。你能详细说明一下吗?哦,等等,对不起,我想我误读了你的代码。第一次听到这个函数,第一次听到这个功能,一定会记住谢谢。
OOO
OOO

  XXX
  XXX

              YYYY              WW
              YYYY              WW