hoc-lap-trinh-3

Giới thiệu

Lập trình game là một lĩnh vực thú vị và đầy thách thức trong ngành công nghệ thông tin. Nếu bạn là người mới bắt đầu, việc học lập trình game có thể cảm thấy khó khăn. Tuy nhiên, thông qua các ví dụ thực hành đơn giản, bạn có thể nắm vững các kiến thức cơ bản và phát triển kỹ năng lập trình game của mình. Bài viết này sẽ chia sẻ các ví dụ demo dễ hiểu để bạn có thể bắt đầu học lập trình game một cách hiệu quả.

Tại sao nên học lập trình game?

1. Kết hợp giữa sáng tạo và công nghệ

Lập trình game không chỉ đòi hỏi kỹ năng lập trình mà còn khuyến khích sự sáng tạo. Bạn sẽ học cách tạo ra những thế giới ảo, xây dựng các câu chuyện và cơ chế gameplay hấp dẫn.

2. Cơ hội nghề nghiệp rộng mở

Ngành công nghiệp game đang phát triển mạnh mẽ và luôn cần những nhà phát triển game tài năng. Học lập trình game mở ra cơ hội việc làm trong các công ty game lớn, các studio độc lập, hoặc thậm chí là tự phát triển game của riêng mình.

3. Cộng đồng lớn và tài liệu phong phú

Lập trình game có một cộng đồng lớn mạnh và rất nhiều tài liệu, khóa học, và tài nguyên miễn phí để bạn học hỏi và tham khảo.

Các ví dụ demo cho người mới bắt đầu

Dưới đây là một số ví dụ đơn giản giúp bạn làm quen với lập trình game và luyện tập các kiến thức cơ bản.

1. Tạo một game “Pong” đơn giản

Game “Pong” là một trò chơi cổ điển và là bài tập cơ bản khi bắt đầu học lập trình game. Bạn sẽ học cách xử lý sự kiện và vẽ đồ họa cơ bản.

import pygame

import sys

# Khởi tạo Pygame

pygame.init()

# Thiết lập màn hình

screen = pygame.display.set_mode((640, 480))

pygame.display.set_caption("Pong")

# Màu sắc

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

# Vị trí ban đầu của bóng

ball_pos = [320, 240]

ball_speed = [2, 2]

ball_radius = 15

# Vị trí ban đầu của thanh

paddle1_pos = [10, 200]

paddle2_pos = [620, 200]

paddle_size = [10, 60]

paddle_speed = 5

# Vòng lặp chính của game

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

    # Cập nhật vị trí bóng

    ball_pos[0] += ball_speed[0]

    ball_pos[1] += ball_speed[1]

    # Kiểm tra va chạm với tường

    if ball_pos[1] - ball_radius <= 0 or ball_pos[1] + ball_radius >= 480:

        ball_speed[1] = -ball_speed[1]

    if ball_pos[0] - ball_radius <= 0 or ball_pos[0] + ball_radius >= 640:

        ball_speed[0] = -ball_speed[0]

    # Kiểm tra va chạm với thanh

    if (ball_pos[0] - ball_radius <= paddle1_pos[0] + paddle_size[0] and

        paddle1_pos[1] <= ball_pos[1] <= paddle1_pos[1] + paddle_size[1]):

        ball_speed[0] = -ball_speed[0]

    if (ball_pos[0] + ball_radius >= paddle2_pos[0] and

        paddle2_pos[1] <= ball_pos[1] <= paddle2_pos[1] + paddle_size[1]):

        ball_speed[0] = -ball_speed[0]

    # Di chuyển thanh

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w] and paddle1_pos[1] > 0:

        paddle1_pos[1] -= paddle_speed

    if keys[pygame.K_s] and paddle1_pos[1] < 420:

        paddle1_pos[1] += paddle_speed

    if keys[pygame.K_UP] and paddle2_pos[1] > 0:

        paddle2_pos[1] -= paddle_speed

    if keys[pygame.K_DOWN] and paddle2_pos[1] < 420:

        paddle2_pos[1] += paddle_speed

    # Vẽ mọi thứ lên màn hình

    screen.fill(BLACK)

    pygame.draw.circle(screen, WHITE, ball_pos, ball_radius)

    pygame.draw.rect(screen, WHITE, (*paddle1_pos, *paddle_size))

    pygame.draw.rect(screen, WHITE, (*paddle2_pos, *paddle_size))

    pygame.display.flip()

    # Giới hạn tốc độ khung hình

    pygame.time.Clock().tick(60)

2. Tạo một game “Snake” đơn giản

Game “Snake” là một trò chơi cổ điển khác giúp bạn học cách quản lý các đối tượng trong game và xử lý va chạm.

import pygame

import sys

import random

# Khởi tạo Pygame

pygame.init()

# Thiết lập màn hình

screen = pygame.display.set_mode((640, 480))

pygame.display.set_caption("Snake")

# Màu sắc

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

GREEN = (0, 255, 0)

# Vị trí ban đầu của rắn và thức ăn

snake_pos = [100, 50]

snake_body = [[100, 50], [90, 50], [80, 50]]

food_pos = [random.randrange(1, 64) * 10, random.randrange(1, 48) * 10]

food_spawn = True

# Hướng di chuyển ban đầu

direction = 'RIGHT'

change_to = direction

# Tốc độ

speed = 15

# Vòng lặp chính của game

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_UP and direction != 'DOWN':

                change_to = 'UP'

            elif event.key == pygame.K_DOWN and direction != 'UP':

                change_to = 'DOWN'

            elif event.key == pygame.K_LEFT and direction != 'RIGHT':

                change_to = 'LEFT'

            elif event.key == pygame.K_RIGHT and direction != 'LEFT':

                change_to = 'RIGHT'

    # Nếu rắn va chạm với chính nó hoặc với tường

    if (snake_pos[0] < 0 or snake_pos[0] > 630 or

        snake_pos[1] < 0 or snake_pos[1] > 470):

        pygame.quit()

        sys.exit()

    # Di chuyển rắn

    if change_to == 'UP':

        direction = 'UP'

    if change_to == 'DOWN':

        direction = 'DOWN'

    if change_to == 'LEFT':

        direction = 'LEFT'

    if change_to == 'RIGHT':

        direction = 'RIGHT'

    if direction == 'UP':

        snake_pos[1] -= 10

    if direction == 'DOWN':

        snake_pos[1] += 10

    if direction == 'LEFT':

        snake_pos[0] -= 10

    if direction == 'RIGHT':

        snake_pos[0] += 10

    # Rắn ăn thức ăn

    snake_body.insert(0, list(snake_pos))

    if snake_pos == food_pos:

        food_spawn = False

    else:

        snake_body.pop()

    if not food_spawn:

        food_pos = [random.randrange(1, 64) * 10, random.randrange(1, 48) * 10]

    food_spawn = True

    # Vẽ mọi thứ lên màn hình

    screen.fill(BLACK)

    for pos in snake_body:

        pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10))

    pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 10, 10))

    pygame.display.flip()

    # Giới hạn tốc độ khung hình

    pygame.time.Clock().tick(speed)

3. Tạo một game “Flappy Bird” đơn giản

Game “Flappy Bird” là một trò chơi nổi tiếng, giúp bạn học cách xử lý vật lý đơn giản và quản lý các đối tượng di chuyển trong không gian hai chiều.

import pygame

import sys

import random

# Khởi tạo Pygame

pygame.init()

# Thiết lập màn hình

screen = pygame.display.set_mode((640, 480))

pygame.display.set_caption("Flappy Bird")

# Màu sắc

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

RED = (255, 0, 0)

GREEN = (0, 255, 0)

BLUE = (0, 0, 255)

# Vị trí ban đầu của chim

bird_pos = [100, 240]

bird_speed = 0

gravity = 0.5

flap_strength = -10

# Vị trí và tốc độ của các ống

pipe_width = 70

pipe_gap = 150

pipe_speed = -4

pipes = [[400, random.randint(-100, 100)], [600, random.randint(-100, 100)], [800, random.randint(-100, 100)]]

# Vòng lặp chính của game

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

        elif event.type == pygame.KEYDOWN:

            if event.key == pygame.K_SPACE:

                bird_speed = flap_strength

    # Cập nhật vị trí của chim

    bird_speed += gravity

    bird_pos[1] += bird_speed

    # Cập nhật vị trí của các ống

    for pipe in pipes:

        pipe[0] += pipe_speed

        if pipe[0] < -pipe_width:

            pipe[0] = 640

            pipe[1] = random.randint(-100, 100)

    # Kiểm tra va chạm

    for pipe in pipes:

        if (bird_pos[0] + 20 > pipe[0] and bird_pos[0] - 20 < pipe[0] + pipe_width and

            (bird_pos[1] - 20 < pipe[1] + pipe_gap / 2 or bird_pos[1] + 20 > pipe[1] + pipe_gap / 2)):

            pygame.quit()

            sys.exit()

    if bird_pos[1] < 0 or bird_pos[1] > 480:

        pygame.quit()

        sys.exit()

    # Vẽ mọi thứ lên màn hình

    screen.fill(BLUE)

    pygame.draw.circle(screen, YELLOW, bird_pos, 20)

    for pipe in pipes:

        pygame.draw.rect(screen, GREEN, pygame.Rect(pipe[0], 0, pipe_width, pipe[1] + pipe_gap / 2))

        pygame.draw.rect(screen, GREEN, pygame.Rect(pipe[0], pipe[1] + pipe_gap / 2 + 100, pipe_width, 480))

    pygame.display.flip()

    # Giới hạn tốc độ khung hình

    pygame.time.Clock().tick(30)

Kết luận

Các ví dụ trên giúp bạn làm quen với lập trình game từ những bài tập đơn giản. Hãy bắt đầu từ những game cơ bản, kiên trì thực hành và không ngừng khám phá thêm các kiến thức mới. Dần dần, bạn sẽ nắm vững các kỹ năng cần thiết để tạo ra những trò chơi phức tạp và hấp dẫn hơn. Chúc bạn thành công trên con đường học lập trình game!

By hoadv