PyGame Series phần 1: Lập trình Game T-Rex Jump bằng Python

I. Tìm hiểu về PyGame

1. PyGame là gì?

Đây là thư viện mã nguồn mở trên ngôn từ Python dùng để lập trình video games. PyGame chứa vừa đủ những công cụ tương hỗ lập trình game như đồ hoạt, phim hoạt hình, âm thanh, và sự kiện điều khiển và tinh chỉnh .
Đồ hoạ và phim hoạt hình là hai phần không hề thiếu trong video games. PyGame giúp lập trình hoàn toàn có thể tạo những nhân vật với hình ảnh. PyGame cũng đồng thời phân phối những 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, những sự kiện tinh chỉnh và điều khiển từ bàn phím, chuột cũng được được PyGame tương hỗ một cách hiệu suất cao nhất

2. Một số game được xây dựng bằng Python

Rất nhiều games với thao tác phức tạp được lập trình bằng Python :

Plattformspiel

Pygame RPG Fighter
Truy cập những đường link phía trên, tải về và chạy trên Thonny để hoàn toàn có thể thưởng thức game
Ngoài ra tất cả chúng ta còn hoàn toàn có thể tìm hiểu thêm thêm những game khác được lập trình bằng ngôn từ Python tại đây : https://www.pygame.org/tags/all

Trại hè Lập trình 2021 với khoá học CS 101 về PythonĐĂNG KÝ NGAY

II. Cách lập trình Game T-Rex Jump 

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

Game T-Rex Jump demo

Bước 1: Cài đặt Thonny và Pygame

  • Cài đặt Thonny
  • Cài đặt PyGame trong Thonny

Trong Thonny, chọn Tools -> Manage Packages -> Search “ Pygame ” -> Install

Bước 2: Hiểu cách game vận hành – Vòng lặp game (game loop)

Vòng lặp giống như “ quả tim ” của toàn bộ những video games. Khi một game mở màn, một vòng lặp sẽ được khởi động và sẽ chạy xuyên thấu quy 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à tài liệu từ người chơi, update những thông số kỹ thuật, và vẽ những nhân vật ra màn hình hiển thị .

a. Dữ liệu từ người chơi (process input)

Đâ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 những sự kiện mà người chơi ảnh hưởng tác động vào game show 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.

b. Cập nhật các thông số trong game (Update Game)

Đây là bước tiếp theo trong một vòng lặp là update những thông số kỹ thuật của game như toạ độ của nhân vật, vận 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

c. Vẽ (Draw or render)

Sau khi đã update xong những thông số kỹ thuật của game, tất cả chúng ta cần “ vẽ ” toàn bộ những nhân vật ra ngoài hành lang 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. 

Bước 3: Thực hiện lập trình: Các thành phần cơ bản của một dự án PyGame

3.1 Import các thư viện cần thiết

Với bài học kinh nghiệm tiên phong này tất cả chúng ta chỉ cần import hai thư viện Python thiết yếu là random và PyGame thôi nhé :

import pygame
import random

3.2 Định nghĩa các hằng số trong game

Việc định nghĩa những hằng số trong những chương trình, đặc biệt quan trọng là những chương trình video games, là điều rất quan trọng. Vì những hằng số này sẽ được dùng lại rất nhiều lần, khi có biến hóa gì về giá trị của những hằng số này, tất cả chúng ta chỉ cần biến hóa một vị trí duy nhất mà thôi. Lưu ý : những hằng số được viết in hoa để phân biệt với những 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

3.3 Khởi tạo cửa sổ game

  • Tên chương trình
pygame.init()
pygame.display.set_caption("T-REX")
  • Kích thước cửa sổ
screen = pygame.display.set_mode((WIDTH, HEIGHT))
  • Khởi tạo bộ đếm thời gian
clock = pygame.time.Clock()

3.4 Tạo vòng lặp game

Để định nghĩa vòng lặp game, tất cả chúng ta dùng while loop mà những thầy cô trong CS101 đã dạy cho tất cả 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

3.5 Thiết lập tốc độ của bộ đếm thời gian (FPS)

Làm thế nào để điều được vận tốc của bộ đếm thời hạn 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()

3.6 Thoát game

Chúng ta hoàn toàn có thể thêm đoạn code xử lý sự kiện thoát game khi nhấn vào nút thoát hành lang cửa số game bằng đoạn code sau trong vòng lặp game của tất cả chúng ta nhé

for event in pygame.event.get():
    # check for closing window
    if event.type == pygame.QUIT:
        running = False

3.7 Thành quả

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 hoàn toàn có thể chạy đoạn code trên nhưng chỉ nhìn thấy hành lang cửa số game màu đen thôi nhé .

Bước 4: Vẽ và tô màu cho đối tượng

4.1. Thiết lập màu sắc và mã màu

Mã màu RGBTrong 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 hoàn toàn có thể phân biệt được những nhân vật khác nhau khi chúng cùng Open trong màn hình hiển thị game. Một số mã màu quan trọng :
Để hoàn toàn có thể dùng những màu trong Pygame, tất cả chúng ta nên khai báo chúng giống như những hằng số và chỉ gọi tên khi tất cả 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)

4.2 Thiết lập tọa độ của một đối tượng

Gốc toạ độ trong PyGame sẽ nằm ở góc trên bên trái của hành lang 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.

4.3. Vẽ hình vuông, hình tròn trên cửa sổ game

Vẽ hình vuông vắn màu đỏ ở toạ độ ( 50,50 ) và có size 60 × 60 pixels

pygame.draw.rect(screen, RED,(50, 50, 60, 60))

Vẽ hình tròn trụ màu xanh dương ở toạ độ ( 200,200 ) và có nửa đường kính 75 pixels

pygame.draw.circle(screen, BLUE, (150,150), 75)

Bước 5: Thành quả: 

Hãy cùng kiểm tra code của những 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()

Trại hè Lập trình 2021 với khoá học CS 101 về PythonĐĂNG KÝ NGAY

Tham khảo

http://kidscancode.org/blog/2016/08/pygame_1-1_getting-started/
Chúc mừng những bạn đã hoàn thành xong bài lập trình game tiên phong với ngôn từ PyGame !
Hãy đừng quên san sẻ thành quả của mình với thầy cô và những bạn trên mạng lưới hệ thống STEAMese Profile nhé !
— — —
Người viết : Huy Nguyễn
STEAM for Vietnam Foundation là tổ chức triển khai phi doanh thu 501 ( c ) ( 3 ) được xây dựng tại Hoa Kỳ với thiên chức thôi thúc những hoạt động giải trí tương 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 xây dựng và quản lý và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên viên người Việt trên khắp quốc tế .
📧 E-Mail : [email protected]

🌐Website: www.steamforvietnam.org

🌐 Fanpage : STEAM for Vietnam
📺 YouTube : http://bit.ly/S4V_YT
🌐 Zalo : Zalo Official