Đây là thư viện mã nguồn mở trên ngôn ngữ Python dùng để lập trình video games. PyGame chứa đầy đủ các công cụ hỗ trợ lập trình game như đồ hoạt, hoạt hình, âm thanh, và sự kiện điều khiển.
Đồ hoạ và hoạt hình là hai phần không thể thiếu trong video games. PyGame giúp lập trình có thể tạo các nhân vật với hình ảnh. PyGame cũng đồng thời cung cấp các công cụ tích hợp hiệu ứng âm thanh cũng như nhạc nền cho game. Cuối cùng, các sự kiện điều khiển từ bàn phím, chuột cũng được được PyGame hỗ trợ một cách hiệu quả nhất
Rất nhiều games với thao tác phức tạp được lập trình bằng Python:
Truy cập các đường link phía trên, tải về và chạy trên Thonny để có thể trải nghiệm game
Ngoài ra chúng ta còn có thể tham khảo thêm các game khác được lập trình bằng ngôn ngữ Python tại đây: https://www.pygame.org/tags/all
Game T-Rex Jump được lấy ý tưởng từ game trên Google Chrome giúp người chơi thư giãn trong khi không kết nối được với internet
Trong Thonny, chọn Tools -> Manage Packages -> Search “Pygame” -> Install
Vòng lặp giống như “quả tim” của tất cả các video games. Khi một game bắt đầu, một vòng lặp sẽ được khởi động và sẽ chạy xuyên suốt quá trình chơi game cho đến khi người chơi thoát game.
Trong mỗi vòng lặp, sẽ có 3 sự kiện chính xảy ra, đó là dữ liệu từ người chơi, cập nhật các thông số, và vẽ các nhân vật ra màn hình.
Đây là việc mà mỗi video game cần phải làm trong mỗi vòng lặp. Đó là lấy các sự kiện mà người chơi tác động vào trò chơi như nhấn phím space hay click chuột trái.
VD: Đối với game T-Rex Jump này, thao tác của người dùng sẽ là nhấn phím space.
Đây là bước tiếp theo trong một vòng lặp là cập nhật các thông số của game như toạ độ của nhân vật, tốc độ của nhân vật, điểm số người chơi đang đạt được, …
VD: Trong game T-Rex Jump, toạ độ của T-Rex sẽ được thay đổi theo mỗi vòng lặp, hay toạ độ của các cây xương rồng sẽ di chuyển về hướng T-Rex
Sau khi đã cập nhật xong các thông số của game, chúng ta cần “vẽ” tất cả các nhân vật ra ngoài cửa sổ game
VD: Sau khi kết thúc vòng lặp, chúng ta cần vẽ lại tất cả nhân vật với toạ độ mới.
Ngoài ra, một phần rất đặc biệt không thể thiếu trong PyGame là bộ đếm thời gian (clock). Bộ đếm thời gian giúp chúng ta điều khiển được tốc độ lặp của một vòng lặp đủ để tất cả các quá trình trên được hoàn thành trước khi chuyển sang một vòng lặp mới.
Với bài học đầu tiên này chúng ta chỉ cần import hai thư viện Python cần thiết là random và PyGame thôi nhé:
import pygame
import random
Việc định nghĩa các hằng số trong các chương trình, đặc biệt là các chương trình video games, là điều rất quan trọng. Vì các hằng số này sẽ được dùng lại rất nhiều lần, khi có thay đổi gì về giá trị của các hằng số này, chúng ta chỉ cần thay đổi một vị trí duy nhất mà thôi. Lưu ý: các hằng số được viết in hoa để phân biệt với các biến số khác trong game
WIDTH = 360 # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second
pygame.init()
pygame.display.set_caption("T-REX")
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
Để định nghĩa vòng lặp game, chúng ta dùng while loop mà các thầy cô trong CS101 đã dạy cho chúng ta nhé.
running = True
while running:
# Du lieu tu nguoi choi
# Cap nhat thong so cua game
# Ve cac doi tuong ra man hinh game
Làm thế nào để điều được tốc độ của bộ đếm thời gian nhỉ?
running = True
while running:
clock.tick(FPS)
# Du lieu tu nguoi choi
# Cap nhat thong so cua game
# Ve cac doi tuong ra man hinh game
pygame.display.flip()
Chúng ta có thể thêm đoạn code xử lý sự kiện thoát game khi nhấn vào nút thoát cửa sổ game bằng đoạn code sau trong vòng lặp game của chúng ta nhé
for event in pygame.event.get():
# check for closing window
if event.type == pygame.QUIT:
running = False
Sau khi hoàn thành các bước trên, chúng ta sẽ được đoạn code như sau:
import pygame
import random
WIDTH = 600
HEIGHT = 600
FPS = 30 # khung hinh tren giay
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Du lieu tu nguoi choi
# Cap nhat thong so cua game
# Ve cac doi tuong ra man hinh game
pygame.display.flip()
pygame.quit()
Chúng ta có thể chạy đoạn code trên nhưng chỉ nhìn thấy cửa sổ game màu đen thôi nhé.
Trong lập trình game mã màu cũng là phần rất quan trọng vì nó giúp người chơi có thể phân biệt được các nhân vật khác nhau khi chúng cùng xuất hiện trong màn hình game. Một số mã màu quan trọng:
Để có thể dùng các màu trong Pygame, chúng ta nên khai báo chúng giống như các hằng số và chỉ gọi tên khi chúng ta cần dùng đến
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
Gốc toạ độ trong PyGame sẽ nằm ở góc trên bên trái của cửa sổ game nhé
VD: như hình vẽ bên dưới đối tượng hình chữ nhật sẽ có toạ độ là 50px theo trục X và 50px theo trục Y và có kích thước là 40×30.
Vẽ hình vuông màu đỏ ở toạ độ (50,50) và có kích thước 60×60 pixels
pygame.draw.rect(screen, RED,(50, 50, 60, 60))
Vẽ hình tròn màu xanh dương ở toạ độ (200,200) và có bán kính 75 pixels
pygame.draw.circle(screen, BLUE, (150,150), 75)
Hãy cùng kiểm tra code của các bạn có giống như bộ code của bài dưới đây không nhé [link]
import pygame
import random
WIDTH = 600
HEIGHT = 600
FPS = 30 # khung hinh tren giay
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Du lieu tu nguoi choi
# Cap nhat thong so cua game
# Ve cac doi tuong ra man hinh game
screen.fill(BLACK)
pygame.draw.rect(screen, RED, (50, 50, 60, 60))
pygame.draw.circle(screen, BLUE, (200,200), 75)
pygame.display.flip()
pygame.quit()
Tham khảo
http://kidscancode.org/blog/2016/08/pygame_1-1_getting-started/
Chúc mừng các bạn đã hoàn thành bài lập trình game đầu tiên với ngôn ngữ PyGame!
Hãy đừng quên chia sẻ thành quả của mình với thầy cô và các bạn trên hệ thống STEAMese Profile nhé!
— — —
Người viết: Huy Nguyễn
STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.
📧Email: hello@steamforvietnam.org
🌐Website: www.steamforvietnam.org
🌐Fanpage: STEAM for Vietnam
📺YouTube: http://bit.ly/S4V_YT
🌐Zalo: Zalo Official