📜  在 Pygame 中为对象添加边界

📅  最后修改于: 2022-05-13 01:54:31.529000             🧑  作者: Mango

在 Pygame 中为对象添加边界

任何游戏的边界都非常重要。在蛇类游戏、太空入侵者、乒乓游戏等游戏中,边界条件非常重要。在乒乓球比赛中,球会在屏幕的边界处弹跳。

所以,这个边界背后的想法是,一旦球或物体撞到墙壁,它就会反向改变它的位置。

让我们看看如何为球从边界反弹的游戏添加边界。

1.首先,我们将制作 PyGame 窗口。

# importing the module
import pygame
  
# instantiating the class
pygame.init()
   
# dimension of the screen
width = 700
height = 550
   
# colours
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
black = (0, 0, 0)
   
# creating a Screen
screen = pygame.display.set_mode((width, height))
  
# title of the screen
pygame.display.set_caption("Bouncy Ball")

2.现在,我们正在创建一个球。球只是在屏幕上绘制的一个圆圈。这将写在一个while循环中。在这里,我们宣布它的位置和速度。最初,球将被放置在中心(宽度/2 和高度/2)。然后我们将通过 XChange 和 YChange 各自的值来增加球的速度。由于 X 和 Y 方向都在变化,球将沿对角线方向移动,其进一步的路径将取决于碰撞体。

# importing the module
import random
  
# declaring variables for the ball
ball_X = width/2 - 12
ball_Y = height/2 - 12
ball_XChange = 3* random.choice((1, -1))
ball_YChange = 3
ballPixel = 24

3.现在我们将开始基本的游戏运行循环。我们还为屏幕提供了背景颜色。

# gaming Loop
running = True
while running:
  
    # background color
    screen.fill(red)
  
    # to exit the loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

4.这是我们游戏的主要部分。我们提供了一个条件,如果球的 X 位置大于屏幕宽度或小于 0(即如果球正在碰撞或到达屏幕的右端或左端),那么我们乘以 X 方向速度负1。表示方向相反。如果球以 3 像素的速度飞来,那么在撞到左墙或右墙时,它的速度将为 -3 像素,即反向,当它再次撞到墙壁时,它的速度将再次为正3,即-3的倒数。因此,这将为球提供边界。

此外,相同的逻辑将应用于上墙和下墙。

如果球的 Y 值大于屏幕高度或小于 0,则反转其方向。
然后我们分别通过 XChange 和 YChange 增加球的位置来移动球。

(下面的代码在游戏循环下)

# inside the gaming Loop
  
    # bouncing the ball
    if ball_X + ballPixel >= width or ball_X <= 0:
        ball_XChange *= -1
    if ball_Y + ballPixel >= height or ball_Y <= 0:
        ball_YChange *= -1
  
    # moving the ball
    ball_X += ball_XChange
    ball_Y += ball_YChange

5.现在,我们将在 while 循环中绘制球,以便在每个循环中显示它。我们在 ballX 和 ballY 位置绘制圆,因此我们球的 X 和 Y 位置在每个循环中递增,并且球将在每个循环中的下一个位置绘制,因此球将在屏幕内移动。最后我们更新屏幕。

# inside the gaming Loop
  
    # drawing the ball
    ballImg = pygame.draw.circle(screen, (0,0,255),
                                 (int(ball_X), int(ball_Y)),
                                 15)
    pygame.display.update()

这就是我们在 PyGame 中为对象添加边界的方式。

完整代码如下:

# importing the modules
import pygame
import random
   
# instantiating the class
pygame.init()
    
# dimension of the screen
width = 700
height = 550
    
# colours
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
black = (0, 0, 0)
    
# creating a Screen
screen = pygame.display.set_mode((width, height))
   
# title of the screen
pygame.display.set_caption("Bouncy Ball")
  
# declaring variables for the ball
ball_X = width/2 - 12
ball_Y = height/2 - 12
ball_XChange = 3* random.choice((1, -1))
ball_YChange = 3
ballPixel = 24
   
# gaming Loop
running = True
while running:
   
    # background color
    screen.fill(red)
   
    # to exit the loop
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
  
    # bouncing the ball
    if ball_X + ballPixel >= width or ball_X <= 0:
        ball_XChange *= -1
    if ball_Y + ballPixel >= height or ball_Y <= 0:
        ball_YChange *= -1
       
    # moving the ball
    ball_X += ball_XChange
    ball_Y += ball_YChange
  
    # drawing the ball
    ballImg = pygame.draw.circle(screen, (0,0,255),
                                 (int(ball_X), int(ball_Y)),
                                 15)
    pygame.display.update()

输出 :