在 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()
输出 :
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。