Xây dựng và trực quan hóa trò chơi Sudoku bằng Pygame
Sudoku là một trò chơi giải đố sắp xếp số dựa trên logic, kết hợp. Mục tiêu là...
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 chuyển 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
Sudoku là một trò chơi giải đố sắp xếp số dựa trên logic, kết hợp. Mục tiêu là điền các chữ số vào lưới 9x9 sao cho mỗi cột, mỗi hàng và mỗi ô lưới....
Thuật toán như Tìm kiếm Nhị phân có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toá...
Thuật toán sắp xếp chèn có thể dễ dàng được hiểu bằng cách trực quan hóa. Trong bài viết này, một chương trình trực quan hóa thuật toán sắp xếp ch...
Thuật toán sắp xếp Heap có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toán sắp xếp...
Thuật toán như Tìm kiếm Tam phân có thể được hiểu dễ dàng bằng cách trực quan hóa. Bài viết này trình bày một chương trình trực quan hóa Thuật toá...
Trong bài viết này, chúng ta sẽ xem cách hình dung thuật toán sắp xếp nổi bọt (bubble sort ) bằng PyGame. Cụ thể, khi khởi động ứng dụng PyGame,....