在没有精灵的基本游戏中,我将如何检测桨和球之间的碰撞



对于我的dofe黄金,我创建了一个在pygame中的pong游戏,因为这是我第一次使用pygame,我没有使用精灵,因为这没有发生。我现在想要一个解决方案,该解决方案将使我能够解决问题,而无需完全用精灵重写我的代码。注意:我希望这仍然是我的代码,这样我就不会接受其他人重写的解决方案,因为这将带走任何成就感。提前谢谢了。我的代码:

import pygame
import random
global vel
run = True
def pong():
    global run
    collision = 0
    pygame.init()
    screen = (600, 600)
    window = pygame.display.set_mode((screen))
    pygame.display.set_caption("Pong")
    x = 300
    y = 590
    coords = (300, 150)
    width = 175
    height = 10
    vel = 10 - selection
    velx = 10
    vely = 10
    while run == True:
        pygame.time.delay(100)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
        keys = pygame.key.get_pressed()        
        if keys[pygame.K_LEFT] and x>0:
            x -= vel
        elif keys[pygame.K_RIGHT] and x<600-width:
            x += vel
        if event.type == pygame.MOUSEBUTTONUP:
            pygame.quit()
            quit()
        paddlecoords = (x, y, width, height)
        window.fill((255, 255, 255))
        ball = pygame.draw.circle(window, (255,0,255), coords,(35), (0))
        paddle = pygame.draw.rect(window, (0, 0, 0), paddlecoords)
        pygame.display.update()
        coords=((int(coords[0])+velx), (int(coords[1])+vely))
        if coords[0]>600-35:
            velx = -velx
        elif coords[0]<35:
            velx = -velx
        elif coords[1]<35:
            vely = -vely
        elif coords[1]>600-35:
            vely = -vely
selection =input("Do you want to playn1)easyn2)mediumn3)hardn4)impossible?n")
if selection.isdigit():
    if 0 < int(selection) < 5:
        selection = int(selection)
        selection = (selection-1)*2
    else:
        print("must be between 1 and 4")
else:
    print("number must be an integer")
    quit()
pong()

由于您不想要任何代码,这是在单词中做的方法

写一个名为 ballHits()的函数。

传递到paddlecoords,球coords和球35的半径?作为radius

在此新功能中,paddlecoords定义了一个矩形。代码需要检查球的边缘是否在此矩形内。

a 简单实现此目的的方法是确定围绕球的矩形(平方)的坐标。由于球是从中心绘制的,因此大约是:

[ coords.x - radius,  coords.y - radius,  2 * radius, 2 * radius ]
# the [ x, y, width, height] of a square covering a circle

使用pygame的rect类,确定您的两个矩形是否重叠。

a 非简单实现此目的的方法是预先生成形成球的圆的边缘像素列表。也许使用类似中点圆算法的内容,以(0,0)为中心,为您提供可以通过当前球坐标进行调整的点列表。

使用桨矩形,然后PyGame的rect类确定这些点是否在偏移到当前球位置时是否与桨相撞。这会给您带来真正的碰撞,而不是近似,并且可以更好地用于角对角碰撞。首先检查与方形方法的粗糙碰撞可能会更快,然后检查许多圆点。

如果代码决定发生碰撞,请从函数返回True,否则False否则。

在您的主码中,请拨打此功能,然后对返回的结果采取行动。

相关内容

  • 没有找到相关文章

最新更新