Rắn săn mồi là lựa game vô cùng quen thuộc xuất hiện từ những năm 1970. Sau này, tựa game vẫn tiếp tục phổ biến trên các thiết bị di động với màn hình đen trắng. Tại đây, người chơi sẽ điều khiển rắn săn tránh vật cản và săn những con mồi để trở nên dài hơn. Trong bài viết này, ICANTECH sẽ hướng dẫn bạn code Python game rắn săn mồi với 8 bước đơn giản. Cùng theo dõi nhé!
Để lập trình Python code game snake, hãy cùng ICANTECH phân tích trò chơi này như sau:
Như vậy, với cách phân tích trò chơi như trên chúng ta cần thực hiện các bước như sau:
Ở bước khởi màn hình, chúng ta sẽ lần lượt khai báo các thư viện cần thiết cho trò chơi: pygame, sys và random theo:
Với các phân tích như vậy, chúng ta sẽ sử dụng các câu lệnh sau:
import pygame, sys, random
WHITE = (255, 255, 255)
YELLOW = (255, 255, 102)
BLACK = (0, 0, 0)
RED = (213, 50, 80)
GREEN = (0, 255, 0)
BLUE = (50, 153, 213)
pygame.init()
screen_width = 600
screen_height = 400
title = 'Rắn săn mồi'
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption(title)
Thực tế con rắn là nhiều hình vuông ghép lại với nhau. Để vẽ các hình vuông trong Pygame, chúng ta sử dụng lệnh vẽ hình chữ nhật pygame.draw.rect() với chiều dài và chiều rộng bằng nhau.
Mỗi hình vuông thể hiện là một khúc của con rắn có kích thước là 10x10 và các khúc của con rắn là 10x10 nên các tọa độ bắt đầu vẽ các khúc của rắn sẽ là bội của 10.
Tiếp theo, ICANTECH sẽ tiến hành khai báo 2 biến toàn cục xác định toạ độ x và tọa độ y bắt đầu của con rắn (đầu rắn) và tiến hành khai báo tiếp biến toàn cục xác định độ dài một khúc (hình vuông) của rắn.
Với các phân tích như vậy, chúng ta sẽ sử dụng các câu lệnh sau:
snake_block = 10
x_head = 300
y_head = 200
x_head_change = 0
y_head_change = 0
clock = pygame.time.Clock()
Để di chuyển rắn, ICANTECH sẽ lần lượt cần tạo ra các sự kiện KEYDOWN của Pygame. Các sự kiện được sử dụng ở đây là K_UP, K_DOWN, K_LEFT và K_RIGHT tương ứng với các mũi tên trên bàn phím di chuyển lên, xuống, trái và phải của rắn.
Như vậy, chúng ta sẽ sử dụng các câu lệnh sau:
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x_head_change = -10
y_head_change = 0
elif event.key == pygame.K_RIGHT:
x_head_change = 10
y_head_change = 0
elif event.key == pygame.K_UP:
y_head_change = -10
x_head_change = 0
elif event.key == pygame.K_DOWN:
y_head_change = 10
x_head_change = 0
Tiếp theo, chúng ta sẽ khai báo hai biến mới là x_head_change và y_head_change để xác định sự thay đổi của đầu rắn.
Ví dụ tọa độ đầu di chuyển sang phải thì tọa độ x tăng 1 lượng là 10 tọa độ y sẽ không thay đổi, di chuyển xuống dưới thì tọa độ x không thay đổi tọa độ y tăng 1 lượng là 10.
Cuối cùng, ICANTECH tiến hành khai báo và cài đặt số lượng khung hình (FPS) trong một giây.
screen.fill(WHITE)
x_head += x_head_change
y_head += y_head_change
pygame.display.update()
clock.tick(12)
Con mồi sẽ xuất hiện ngẫu nhiên trên màn hình hiển thị trò chơi. Vì mỗi bước đi của con rắn là 10 nên con mồi sẽ xuất hiện ở những vị trí có tọa độ là bội của 10. Như vậy, chúng ta sử dụng câu lệnh:
randFoodX = random.randrange(0, screen_width - 10)
surplusFoodX = randFoodX % 10
foodx = round(randFoodX - surplusFoodX)
randFoodY = random.randrange(0, screen_height - 10)
surplusFoodY = randFoodY % 10
foody = round(randFoodY - surplusFoodY)
print('foodx, foody', foodx, foody)
pygame.draw.rect(screen, BLUE, [foodx, foody, snake_block, snake_block]
Để con mồi xuất hiện ngẫu nhiên chúng ta dùng thư viện random lấy tọa độ x, y. Sau khi lấy được tọa độ x, y tiến hành tính toán làm tròn sao cho tọa độ x, y là bội của 10.
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
screen.fill(WHITE)
pygame.draw.rect(screen, BLUE, [foodx, foody, snake_block, snake_block])
pygame.draw.rect(screen, BLACK, [x_head, y_head, snake_block, snake_block])
pygame.display.update()
Để tăng độ dài của rắn khi ăn được mồi bạn lần lượt thực hiện khai báo một biến lưu dữ liệu độ dài của con rắn và một danh sách lưu tọa độ các khúc của con rắn.
snake_list = []
snake_length = 1
def show_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(screen, BLACK, [x[0], x[1], snake_block, snake_block])
Tiếp theo, bạn tiến hành khai báo danh sách lưu toạ độ của đầu rắn và lần lượt Xây dựng một hàm để vẽ con rắn lên màn hình game.
snake_head = []
snake_head.append(x_head)
snake_head.append(y_head)
snake_list.append(snake_head)
if len(snake_list) > snake_length:
del snake_list[0]
show_snake(snake_block, snake_list)
Trong trường hợp rắn chạm vào con mồi thì sẽ tạo một con mồi khác ở vị trí mới.
if x_head == foodx and y_head == foody:
randFoodX = random.randrange(0, screen_width - 10)
surplusFoodX = randFoodX % 10
foodx = round(randFoodX - surplusFoodX)
randFoodY = random.randrange(0, screen_height - 10)
surplusFoodY = randFoodY % 10
foody = round(randFoodY - surplusFoodY)
snake_length += 1
Để kiểm tra rắn chạm biên, bạn cần sử dụng các câu lệnh sau:
# kiểm tra chạm biên
if (x_head >= screen_width) or (x_head < 0) or (y_head >= screen_height) or (y_head < 0):
game_close = True
Khi rắn cắn vào thân hoặc đuôi thì gán biến game_close = True để dừng game lại. ICANTECH sẽ sử dụng câu lệnh sau:
for x in snake_list[:-1]:
if x == snake_head:
game_close = True
Khi trò chơi kết thúc và hiện thông báo, chúng ta sẽ thực hiện các bước sau đây:
arialFont = pygame.font.SysFont("Arial", 30)
def message(msg, color):
mesg = arialFont.render(msg, True, color)
textRect = mesg.get_rect()
textRect.center = (300, 200)
screen.blit(mesg, textRect)
game_close = False
while True:
while game_close == True:
screen.fill(BLUE)
message("Thua rui! Bam phim cach choi lai", RED)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
game_close = False
snake_list = []
snake_length = 1
x_head = 300
y_head = 200
Ở bước cuối cùng, bạn cần lập trình ghi nhận điểm số của người chơi trên màn hình. Số điểm mà người chơi đạt được chính là độ dài của rắn. Như vậy, chúng ta sẽ sử dụng các câu lệnh sau:
def show_score(score):
value = arialFont.render("Score: " + str(score), True, BLACK)
screen.blit(value, [0, 0])
Như vậy, ICANTECH đã hướng dẫn bạn chi tiết các bước code game rắn săn mồi Python. Hi vọng các bạn sẽ áp dụng thành công những kiến thức ở trên để sáng tạo trò chơi rắn săn mồi của riêng mình.
Ngoài ra nếu bạn đang quan tâm đến học lập trình game trên Python thì hãy tham khảo ngay khóa học lập trình Python Code Combat tại ICANTECH nha !
Nguồn ảnh: ICANTECH.