Python 3.x 我做了一个方块掉落的游戏,你必须躲开它,但你可以';I don’’我没弄好打电话匣

Python 3.x 我做了一个方块掉落的游戏,你必须躲开它,但你可以';I don’’我没弄好打电话匣,python-3.x,pygame,collision-detection,collision,Python 3.x,Pygame,Collision Detection,Collision,hitbox似乎在立方体的左侧,所以感觉游戏结束时我甚至没有击中任何东西。我想让点击框正好位于红色矩形上,这样很明显黑色矩形击中了你 如果需要,上下控制仅用于将来的移动选项 这是密码 import pygame as pg,pygame import random import sys pygame.init() WIDTH = 1000 HEIGHT = 800 # Positions, sizes SPEED = 10 MIDDLE = [500, 400] score = 0

hitbox似乎在立方体的左侧,所以感觉游戏结束时我甚至没有击中任何东西。我想让点击框正好位于红色矩形上,这样很明显黑色矩形击中了你

如果需要,上下控制仅用于将来的移动选项

这是密码

import pygame as pg,pygame
import random
import sys

pygame.init()

WIDTH = 1000
HEIGHT = 800

# Positions, sizes

SPEED = 10

MIDDLE = [500, 400]

score = 0

player_size = 90
player_pos = [WIDTH/2, HEIGHT-2*player_size]
playerX_move = 0
playerY_move = 0

enemy_size = 50
enemy_pos = [random.randint(0,WIDTH - enemy_size), 30] 
enemy_list = [enemy_pos]

# Colors

WHITE = [255, 255, 255]
GREY = [25, 25, 25]
BLUE = [65,105,225]
BLACK = [0,0,0]
GREEN = [65,255,105]
RED = [255,0,0]

# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

game_over = False

clock = pygame.time.Clock()

def drop_enemies(enemy_list):
    delay = random.random()
    if len(enemy_list) < 10 and delay < 0.1:
        x_pos = random.randint(0,WIDTH-enemy_size)
        y_pos = 30
        enemy_list.append([x_pos, y_pos])

def draw_enemies(enemy_list):
    for enemy_pos in enemy_list:
        pygame.draw.rect(screen,BLACK, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))

def update_enemy_positions(enemy_list, score):
    for idx, enemy_pos in enumerate(enemy_list):
        if enemy_pos[1] >= 0 and enemy_pos[1] < HEIGHT:
            enemy_pos[1] += SPEED
        else:
            enemy_list.pop(idx)
            score += 1
    return score

def collision_check(enemy_list, player_pos):
    for enemy_pos in enemy_list:
        if detect_collision(enemy_pos, player_pos):
            return True
    return False

def detect_collision(player_pos, enemy_pos):
    p_x = player_pos[0]
    p_y = player_pos[1]

    e_x = enemy_pos[0]
    e_y = enemy_pos[1]

    if (e_x >= p_x and e_x < (p_x + player_size)) or (p_x >= e_x and p_x < (e_x+enemy_size)):
        if (e_y >= p_y and e_y < (p_y + player_size)) or (p_y >= e_y and p_y < (e_y+enemy_size)):
            return True
    return False

while not game_over:

    player_pos[0] += playerX_move
    player_pos[1] += playerY_move

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            sys.exit()

        if event.type == pygame.KEYDOWN:

                if event.key == pygame.K_LEFT:
                    playerX_move = -5

                if event.key == pygame.K_RIGHT:
                    playerX_move = 5

                # if event.key == pygame.K_UP:
                #   playerY_move = -5

                # if event.key == pygame.K_DOWN:
                #   playerY_move = 5

                if event.key == pygame.K_a:
                    playerX_move = -15

                if event.key == pygame.K_d:
                    playerX_move = 15

                # if event.key == pygame.K_w:
                #   playerY_move = -15

                # if event.key == pygame.K_s:
                #   playerY_move = 15

                if event.key == pg.K_SPACE:
                    print("SPACE")

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_d or event.key == pygame.K_s or event.key == pygame.K_w:
                playerX_move = 0
                playerY_move = 0
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_DOWN or event.key == pygame.K_UP:
                playerX_move = 0
                playerY_move = 0

    screen.fill(BLACK)


    drop_enemies(enemy_list)
    score = update_enemy_positions(enemy_list,score)

    if collision_check(enemy_list, player_pos):
        game_over = True
    draw_enemies(enemy_list)

    pygame.draw.rect(screen, RED, (player_pos[0], player_pos[1], 90, 90))

    clock.tick(30)

    pygame.display.update()
将pygame导入为pg,pygame
随机输入
导入系统
pygame.init()
宽度=1000
高度=800
#位置、尺寸
速度=10
中间=[500400]
分数=0
播放器大小=90
播放器位置=[宽度/2,高度-2*播放器大小]
playerX_move=0
playerY_move=0
敌人大小=50
敌方位置=[random.randint(0,宽度-敌方大小),30]
敌人列表=[敌人位置]
#颜色
白色=[255,255,255]
灰色=[25,25,25]
蓝色=[65105225]
黑色=[0,0,0]
绿色=[65255105]
红色=[255,0,0]
# -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
screen=pygame.display.set_模式((宽度、高度))
游戏结束=错误
clock=pygame.time.clock()
def投放敌人(敌人列表):
延迟=随机。随机()
如果len(敌方列表)<10且延迟<0.1:
x_pos=random.randint(0,宽度大小)
y_pos=30
敌人列表。追加([x位置,y位置])
def抽取敌人(敌人列表):
对于敌人列表中的敌人位置:
pygame.draw.rect(屏幕,黑色,(敌方位置[0],敌方位置[1],敌方大小,敌方大小))
def更新敌人位置(敌人列表,分数):
对于idx,枚举中的敌方位置(敌方列表):
如果敌方位置[1]>=0且敌方位置[1]<高度:
敌人位置[1]+=速度
其他:
敌方列表。pop(idx)
分数+=1
回击得分
def碰撞检查(敌人列表、玩家位置):
对于敌人列表中的敌人位置:
如果检测到碰撞(敌方位置、玩家位置):
返回真值
返回错误
def检测碰撞(玩家位置、敌人位置):
p_x=玩家位置[0]
p_y=玩家位置[1]
e_x=敌人_位置[0]
e_y=敌人位置[1]
如果(e_x>=p_x和e_x<(p_x+玩家大小))或(p_x>=e_x和p_x<(e_x+敌人大小)):
如果(e_y>=p_y和e_y<(p_y+玩家大小))或(p_y>=e_y和p_y<(e_y+敌人大小)):
返回真值
返回错误
虽然游戏尚未结束:
玩家位置[0]+=玩家移动
玩家位置[1]+=玩家移动
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
sys.exit()
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
playerX_move=-5
如果event.key==pygame.K_RIGHT:
playerX_move=5
#如果event.key==pygame.K_UP:
#playerY_move=-5
#如果event.key==pygame.K_向下:
#playerY_move=5
如果event.key==pygame.K_a:
playerX_move=-15
如果event.key==pygame.K\u d:
playerX_move=15
#如果event.key==pygame.K_w:
#playerY_move=-15
#如果event.key==pygame.K_:
#游戏动作=15
如果event.key==pg.K_空格:
打印(“空间”)
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_a或event.key==pygame.K_d或event.key==pygame.K_s或event.key==pygame.K_w:
playerX_move=0
playerY_move=0
如果event.key==pygame.K_LEFT或event.key==pygame.K_RIGHT或event.key==pygame.K_DOWN或event.key==pygame.K_UP:
playerX_move=0
playerY_move=0
屏幕填充(黑色)
放下敌人(敌人列表)
分数=更新敌人位置(敌人列表,分数)
如果碰撞检查(敌人列表、玩家位置):
游戏结束=正确
抽取敌人(敌人列表)
pygame.draw.rect(屏幕,红色,(玩家位置[0],玩家位置[1],90,90))
时钟滴答(30)
pygame.display.update()

我建议使用
pygame.Rect
s列表,而不是包含敌人位置的列表。这还允许您使用
pygame.Rect.colliderect()
而不是
detect\u collision
函数。 我还链接了