Thêm ranh giới vào đối tượng trong Pygame

Category: Pygame

Ranh giới của bất kỳ trò chơi nào cũng rất quan trọng. Trong các trò chơi rắn săn mồi, kẻ xâm lược không gian, trò chơi bóng bàn, v.v., điều kiện ranh giới rất quan trọng. Trong trò chơi bóng bàn, bóng sẽ nảy ở ranh giới của màn hình.

Vì vậy, ý tưởng đằng sau ranh giới này là thay đổi vị trí của quả bóng hoặc vật thể theo hướng ngược lại ngay khi nó chạm vào tường.

Chúng ta hãy xem cách thêm ranh giới cho một trò chơi trong đó một quả bóng nảy ra khỏi ranh giới đó.1.Trước hết, chúng ta sẽ tạo cửa sổ PyGame.

# nhập mô-đun
import pygame

# khởi tạo lớp
pygame.init()
 
# kích thước màn hình
width = 700
height = 550
 
# các màu
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
black = (0, 0, 0)
 
# tạo màn hình
screen = pygame.display.set_mode((width, height))

# tiêu đề của cửa sổ
pygame.display.set_caption("Bouncy Ball")

2. Bây giờ, chúng ta đang tạo một quả bóng. Quả bóng chỉ là một hình tròn được vẽ trên màn hình. Hình tròn này sẽ được viết trong một vòng lặp while. Ở đây, chúng ta khai báo vị trí và tốc độ của nó. Ban đầu, quả bóng sẽ được đặt ở tâm (chiều rộng/2 và chiều cao/2). Sau đó, chúng ta sẽ tăng tốc độ của quả bóng theo các giá trị tương ứng của XChange và YChange. Khi cả hai hướng X và Y đều thay đổi, quả bóng sẽ di chuyển theo đường chéo và đường đi tiếp theo của nó sẽ phụ thuộc vào vật thể va chạm.

# Nhập mô-đun
import random

# khai báo các biến cho quả bóng
ball_X = width/2 - 12
ball_Y = height/2 - 12
ball_XChange = 3* random.choice((1, -1))
ball_YChange = 3
ballPixel = 24

3. Bây giờ chúng ta sẽ bắt đầu vòng lặp chạy trò chơi cơ bản. Chúng ta cũng sẽ tô màu nền cho màn hình.

# vòng lặp trò choi
running = True
while running:

    # màu nền
    screen.fill(red)

    # thoát khỏi vòng lặp
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

4. Đây là phần chính của trò chơi. Chúng ta đặt điều kiện nếu vị trí X của quả bóng lớn hơn chiều rộng màn hình hoặc nhỏ hơn 0 (tức là nếu quả bóng đang va chạm hoặc đến đầu bên phải hoặc bên trái màn hình), thì chúng ta nhân tốc độ theo hướng X với âm 1. Điều này có nghĩa là hướng bị đảo ngược. Nếu quả bóng đang đến với tốc độ 3 pixel, thì khi va chạm vào tường bên trái hoặc bên phải, tốc độ của nó sẽ là -3 pixel, tức là theo hướng ngược lại, và một lần nữa khi nó chạm vào tường, tốc độ của nó sẽ là dương 3, tức là ngược lại với -3. Do đó, điều này sẽ tạo ra một ranh giới cho quả bóng. Ngoài ra, logic tương tự sẽ được áp dụng cho tường trên và tường dưới. Nếu giá trị Y của quả bóng lớn hơn chiều cao màn hình hoặc nhỏ hơn 0, thì đảo ngược hướng của nó. Sau đó, chúng ta di chuyển quả bóng bằng cách tăng vị trí của quả bóng lần lượt theo XChange và YChange. (đoạn mã bên dưới nằm trong vòng lặp trò chơi)

# bên trong vòng lặp trò chơi 

    # ném bóng
    if ball_X + ballPixel >= width or ball_X <= 0:
        ball_XChange *= -1
    if ball_Y + ballPixel >= height or ball_Y <= 0:
        ball_YChange *= -1

    # di chuyn bóng
    ball_X += ball_XChange
    ball_Y += ball_YChange

5. Bây giờ, chúng ta sẽ vẽ quả bóng trong vòng lặp while để nó được hiển thị trong mỗi vòng lặp. Chúng ta vẽ đường tròn tại vị trí ballX và ballY, sao cho vị trí X và Y của quả bóng tăng dần trong mỗi vòng lặp và quả bóng sẽ được vẽ ở vị trí tiếp theo trong mỗi vòng lặp, do đó quả bóng sẽ di chuyển bên trong màn hình. Cuối cùng, chúng ta cập nhật màn hình.

# bên trong vòng lặp trò chơi

    # vẽ bóng
    ballImg = pygame.draw.circle(screen, (0,0,255),
                                 (int(ball_X), int(ball_Y)),
                                 15)
    pygame.display.update()

Đây là cách chúng ta thêm ranh giới vào một đối tượng trong PyGame. Mã đầy đủ như sau:

# nhập các mô-đun
import pygame
import random
 
# khởi tạo lớp
pygame.init()
  
# kích thước màn hình
width = 700
height = 550
  
# các màu sắc
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)
black = (0, 0, 0)
  
# tạo cửa sổ trò chơi
screen = pygame.display.set_mode((width, height))
 
# tiêu đề cửa sổ
pygame.display.set_caption("Bouncy Ball")

# khai báo biến cho quả bóng
ball_X = width/2 - 12
ball_Y = height/2 - 12
ball_XChange = 3* random.choice((1, -1))
ball_YChange = 3
ballPixel = 24
 
# vòng lặp trò chơi
running = True
while running:
 
    # màu nền
    screen.fill(red)
 
    # để thoát khỏi vòng lặp
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # xử lý bóng nảy
    if ball_X + ballPixel >= width or ball_X <= 0:
        ball_XChange *= -1
    if ball_Y + ballPixel >= height or ball_Y <= 0:
        ball_YChange *= -1
     
    # di chuyển bóng
    ball_X += ball_XChange
    ball_Y += ball_YChange

    # vẽ bóng
    ballImg = pygame.draw.circle(screen, (0,0,255),
                                 (int(ball_X), int(ball_Y)),
                                 15)
    pygame.display.update()

Published on Jul 28, 2025

Related Posts