Xem thêm

Hướng dẫn code game "Rắn săn mồi" bằng Python

Huy Erick
Trong bài viết này, chúng ta sẽ học cách code game "Rắn săn mồi" bằng ngôn ngữ lập trình Python. Từ việc cài đặt thư viện Pygame cho đến tạo ra chuyển động cho con...

Trong bài viết này, chúng ta sẽ học cách code game "Rắn săn mồi" bằng lập trình python' class='hover-show-link replace-link-1687'> ngôn ngữ lập trình python . Từ việc cài đặt thư viện Pygame cho đến tạo ra chuyển động cho con rắn và hiển thị số điểm, tất cả đều sẽ được hướng dẫn chi tiết.

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

Đầu tiên, bạn cần cài đặt thư viện Pygame lên máy tính của mình. Bạn có thể truy cập trang web pygame.org/download.shtml để tải và cài đặt phiên bản Pygame phù hợp với phiên bản Python trên máy của bạn.

Bước 2: Tạo màn hình game

Để tạo màn hình cho game "Rắn săn mồi" bằng Pygame, bạn sẽ sử dụng hàm display.set_mode(). Ngoài ra, bạn cũng cần sử dụng hàm init()quit() để khởi tạo và kết thúc chương trình. Hàm update() được sử dụng để cập nhật bất kỳ thay đổi nào trên màn hình.

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.quit() quit()

Màn hình ban đầu của game Rắn săn mồi Màn hình ban đầu của game Rắn săn mồi

Tuy nhiên, màn hình này sẽ đóng lại ngay lập tức. Để khắc phục vấn đề này, bạn cần tạo một vòng lặp cho game bằng cách sử dụng while trước khi thực sự thoát game.

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.display.set_caption('Snake game by Edureka') game_over = False while not game_over:     for event in pygame.event.get():         print(event)  # in ra tất cả các hành động xuất hiện trên màn hình pygame.quit() quit()

Khi bạn chạy đoạn mã này, bạn sẽ thấy màn hình giống như ở trên nhưng nó không đóng lại. Với việc có thêm hàm event.get(), màn hình sẽ trả về tất cả các hành động xuất hiện trên nó. Bạn cũng có thể đặt tiêu đề cho màn hình bằng cách sử dụng hàm display.set_caption().

Màn hình game hiện đã có tiêu đề Màn hình game hiện đã có tiêu đề

Bây giờ, bạn đã có màn hình cho game "Rắn săn mồi" của mình nhưng khi nhấp vào nút đóng (dấu X), màn hình không đóng lại. Lý do là bạn chưa thiết lập màn hình phải đóng khi bạn nhấn nút đóng. Để làm điều này, Pygame cung cấp cho bạn một lệnh có tên QUIT và bạn có thể sử dụng nó như sau:

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.display.set_caption('Snake game by Edureka') game_over = False while not game_over:     for event in pygame.event.get():         if event.type == pygame.QUIT:             game_over = True pygame.quit() quit()

Bây giờ, màn hình đã được thiết lập xong. Phần tiếp theo là tạo ra con rắn.

Bước 3: Tạo ra con rắn

Để tạo con rắn, trước tiên bạn cần xác định một số màu cho rắn, con mồi, màn hình,... Bảng màu được sử dụng trong Pygame là RGB (Red Green Blue). Trong trường hợp này, nếu bạn thiết lập giá trị là 0 cho cả R, G, B, bạn sẽ nhận được màu đen, và nếu bạn thiết lập giá trị là 255 cho cả R, G, B, bạn sẽ nhận được màu trắng.

Thực tế, con rắn của chúng ta là một hình chữ nhật. Để vẽ hình chữ nhật trong Pygame, bạn cần sử dụng hàm draw.rect() và cung cấp tọa độ, kích thước và màu sắc.

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.display.set_caption('Snake game by Edureka') game_over = False while not game_over:     for event in pygame.event.get():         if event.type == pygame.QUIT:             game_over = True     pygame.draw.rect(dis, (0, 0, 255), [200, 150, 10, 10])     pygame.display.update() pygame.quit() quit()

Con rắn đã được thiết lập xong Con rắn đã được thiết lập xong

Như bạn thấy, con rắn màu xanh da trời đã xuất hiện trên màn hình. Bước tiếp theo là tạo ra chuyển động cho con rắn.

Bước 4: Tạo chuyển động cho con rắn

Để di chuyển con rắn, bạn cần tạo ra các sự kiện trong hàm KEYDOWN của Pygame. Các sự kiện được sử dụng ở đây là K_LEFT, K_RIGHT, K_UPK_DOWN, tương ứng với di chuyển sang trái, sang phải, lên trên và xuống dưới của con rắn. Từ bước này, màn hình game cũng sẽ được thay đổi từ màu đen mặc định sang màu xanh da trời bằng cách sử dụng hàm fill(). Từ bước này, con rắn cũng được chuyển sang màu đen và màn hình game cũng lớn gấp đôi.

Bạn cũng cần tạo ra hai biến mới là x1_changey1_change để lưu trữ các giá trị được cập nhật của tọa độ x và y. Dưới đây là đoạn mã mẫu cho bước này:

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.display.set_caption('Snake game by Edureka') game_over = False while not game_over:     for event in pygame.event.get():         if event.type == pygame.QUIT:             game_over = True         if event.type == pygame.KEYDOWN:             if event.key == pygame.K_LEFT:                 x1_change = -10                 y1_change = 0             elif event.key == pygame.K_RIGHT:                 x1_change = 10                 y1_change = 0             elif event.key == pygame.K_UP:                 y1_change = -10                 x1_change = 0             elif event.key == pygame.K_DOWN:                 y1_change = 10                 x1_change = 0     x1 += x1_change     y1 += y1_change     dis.fill((255, 255, 255))     pygame.draw.rect(dis, (0, 0, 0), [x1, y1, 10, 10])     pygame.display.update() pygame.quit() quit()

Kết quả khi chạy chương trình:

Đây là con rắn sau khi được gán chuyển động theo điều khiển bàn phím Đây là con rắn sau khi được gán chuyển động theo điều khiển bàn phím

Bước 5: Tạo giới cơ chế Game Over khi con rắn đâm vào rìa màn hình

Trong game rắn săn mồi, người chơi sẽ thua nếu con rắn đâm vào rìa màn hình. Để làm điều này, bạn thêm một lệnh if để xác định giới hạn cho tọa độ x và y sao cho nó nhỏ hơn hoặc bằng với chiều rộng và chiều cao của màn hình. Bạn cũng không nên sử dụng các giá trị cố định mà thay bằng các biến để dễ dàng sửa đổi sau này nếu cần.

Đoạn mã mẫu như sau:

import pygame  pygame.init() dis = pygame.display.set_mode((400, 300)) pygame.display.update() pygame.display.set_caption('Snake game by Edureka') game_over = False while not game_over:     for event in pygame.event.get():         if event.type == pygame.QUIT:             game_over = True     x1 += x1_change     y1 += y1_change     if x1 >= 400 or x1 < 0 or y1 >= 300 or y1 < 0:         game_over = True     dis.fill((255, 255, 255))     pygame.draw.rect(dis, (0, 0, 0), [x1, y1, 10, 10])     pygame.display.update() pygame.quit() quit()

Bước này sẽ kết quả như sau:

Bạn sẽ thua nếu điều khiển rắn đâm đầu vào màn hình Bạn sẽ thua nếu điều khiển rắn đâm đầu vào màn hình

Bước 6: Thêm con mồi

Tại bước này, bạn sẽ thêm con mồi cho con rắn và khi con rắn ăn mồi, một thông báo "Yummy!!" sẽ hiển thị. Game cũng được điều chỉnh để cho phép người chơi thoát hoặc chơi lại sau khi thua. Ban đầu, con mồi được thiết lập là màu xanh da trời.

Code mẫu:

import pygame import time import random  pygame.init() white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) blue = (0, 0, 255)  dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Snake Game by Edureka')  clock = pygame.time.Clock()  snake_block = 10 snake_speed = 30  font_style = pygame.font.SysFont(None, 50)  def message(msg,color):     mesg = font_style.render(msg, True, color)     dis.blit(mesg, [dis_width/2, dis_height/2])  def gameLoop():     game_over = False     game_close = False      x1 = dis_width/2     y1 = dis_height/2      x1_change = 0     y1_change = 0      foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0     foody = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0      while not game_over:          while game_close == True:             dis.fill(white)             message("You Lost! Press Q-Quit or C-Play Again", red)             pygame.display.update()              for event in pygame.event.get():                 if event.type == pygame.KEYDOWN:                     if event.key == pygame.K_q:                         game_over = True                         game_close = False                     if event.key == pygame.K_c:                         gameLoop()          for event in pygame.event.get():             if event.type == pygame.QUIT:                 game_over = True             if event.type == pygame.KEYDOWN:                 if event.key == pygame.K_LEFT:                     x1_change = -snake_block                     y1_change = 0                 elif event.key == pygame.K_RIGHT:                     x1_change = snake_block                     y1_change = 0                 elif event.key == pygame.K_UP:                     y1_change = -snake_block                     x1_change = 0                 elif event.key == pygame.K_DOWN:                     y1_change = snake_block                     x1_change = 0          if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:             game_close = True          x1 += x1_change         y1 += y1_change         dis.fill(white)         pygame.draw.rect(dis, blue, [foodx, foody, snake_block, snake_block])         pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block])         pygame.display.update()          if x1 == foodx and y1 == foody:             print("Yummy!!")         clock.tick(snake_speed)      pygame.quit()     quit()   gameLoop()

Đây là kết quả của bước này:

Con mồi màu xanh da trời đã được thêm vào Con mồi màu xanh da trời đã được thêm vào

Bước 7: Tăng độ dài của con rắn

Ở bước này, chúng ta sẽ thêm vào đoạn mã giúp tăng độ dài của con rắn sau khi nó ăn mồi. Ngoài ra, một đoạn mã nữa được thêm vào để khi con rắn va chạm với thân của nó, một thông báo sẽ hiện ra cho biết người chơi đã thua, và người chơi có thể nhấn Q để thoát hoặc nhấn C để chơi lại. Độ dài của con rắn về cơ bản được lưu trữ trong một danh sách và kích thước ban đầu được chỉ định trong đoạn mã sau:

import pygame import time import random  pygame.init() white = (255, 255, 255) yellow = (255, 255, 102) black = (0, 0, 0) red = (213, 50, 80) green = (0, 255, 0) blue = (50, 153, 213)  dis_width = 600 dis_height = 400 dis = pygame.display.set_mode((dis_width, dis_height)) pygame.display.set_caption('Snake Game by Edureka')  clock = pygame.time.Clock()  snake_block = 10 snake_speed = 15  font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35)  def our_snake(snake_block, snake_list):     for x in snake_list:         pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])  def message(msg, color):     mesg = font_style.render(msg, True, color)     dis.blit(mesg, [dis_width / 6, dis_height / 3])  def gameLoop():     game_over = False     game_close = False      x1 = dis_width / 2     y1 = dis_height / 2      x1_change = 0     y1_change = 0      snake_List = []     Length_of_snake = 1      foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0     foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0      while not game_over:         while game_close == True:             dis.fill(blue)             message("You Lost! Press C-Play Again or Q-Quit", red)             pygame.display.update()             for event in pygame.event.get():                 if event.type == pygame.KEYDOWN:                     if event.key == pygame.K_q:                         game_over = True                         game_close = False                     if event.key == pygame.K_c:                         gameLoop()          for event in pygame.event.get():             if event.type == pygame.QUIT:                 game_over = True             if event.type == pygame.KEYDOWN:                 if event.key == pygame.K_LEFT:                     x1_change = -snake_block                     y1_change = 0                 elif event.key == pygame.K_RIGHT:                     x1_change = snake_block                     y1_change = 0                 elif event.key == pygame.K_UP:                     y1_change = -snake_block                     x1_change = 0                 elif event.key == pygame.K_DOWN:                     y1_change = snake_block                     x1_change = 0          if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:             game_close = True          x1 += x1_change         y1 += y1_change         dis.fill(white)         pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])         snake_Head = []         snake_Head.append(x1)         snake_Head.append(y1)         snake_List.append(snake_Head)         if len(snake_List) > Length_of_snake:             del snake_List[0]          for x in snake_List[:-1]:             if x == snake_Head:                 game_close = True          our_snake(snake_block, snake_List)         pygame.display.update()          if x1 == foodx and y1 == foody:             foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0             foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0             Length_of_snake += 1          clock.tick(snake_speed)      pygame.quit()     quit()  gameLoop()

Kết quả cuối cùng khi chạy chương trình:

Kết quả cuối cùng Kết quả cuối cùng

Như vậy là chúng ta đã hướng dẫn các bạn cách code game "Rắn săn mồi" bằng Python cùng với code mẫu. Hy vọng rằng bài viết đã mang lại cho bạn những kiến thức bổ ích về ngôn ngữ lập trình Python.

Để tìm hiểu thêm về Python, bạn có thể truy cập: Python là gì? Tại sao nên chọn Python? và để tìm hiểu thêm về các hàm của Python mời các bạn vào: Hàm trong Python là gì? Các hàm trong Python.

1