Cách lập trình game bằng Python

Thời đại 4.0 mở ra rất nhiều cơ hội nghề nghiệp cho các bạn trẻ, trong đó Lập trình Game lại là ngành nghề đang rất được săn đón. Các bạn trẻ đam mê công nghệ và trò chơi điện tử ngày càng có cơ hội được phát huy thế mạnh, sở trường của mình hơn.

Bằng ngôn ngữ lập trình điển hình là Python, các bạn đã có thể tạo ra một tựa game cho bản thân và bước lên con đường trở thành một nhà lập trình game chuyên nghiệp.

Lập trình game Python là gì?

Lập trình game Python là việc sử dụng ngôn ngữ lập trình Python để tạo ra các sản phẩm trò chơi điện tử.

Hiện nay, có rất nhiều loại ngôn ngữ lập trình như Java, C++, C#,… Tuy nhiên Python vẫn là lựa chọn phổ biến nhất từ các nhà Lập trình Game khi mới bắt đầu.

Xem thêm bài viết: Các ngôn ngữ lập trình hiện nay

Không chỉ dùng để lập trình Game, Python còn được sử dụng để thiết kế phần mềm, xây dựng website, tạo ra các ứng dụng trên các thiết bị điện tử,…

Cách lập trình game bằng Python

Python là một trong những ngôn ngữ lập trình phổ biến nhất trong ngành lập trình game hiện tại

Tại sao Python là ngôn ngữ lập trình phổ biến nhất trong thế giới lập trình Game

Cú pháp dễ hiểu

Một trong những ưu điểm lớn nhất của Python để phát triển trò chơi là ngôn ngữ này khá dễ dàng vì cách viết giống tiếng Anh.

Python là một trong những ngôn ngữ lập trình đơn giản nhất để viết và đọc, khiến đây là điểm khởi đầu tốt nhất cho các hoạt động viết mã còn lại.

Đối với những công ty Game lớn, họ cần sử dụng ngôn ngữ này tạo một nguyên mẫu trò chơi một cách nhanh chóng để xem xét có nên phát triển tiếp hay không. Sử dụng Python sẽ tiết kiệm thời gian hơn so với các ngôn ngữ khác như C++.

Đối với những nhà lập trình Game mới bắt đầu, thời gian và tốc độ lập trình rất quan trọng. Sử dụng một ngôn ngữ đơn giản hơn để tạo ra một trò chơi sẽ giúp tạo nên sự khác biệt thời gian lớn thay vì lập trình trong nhiều ngày, thậm chí là nhiều tuần liền.

Khả năng tận dụng lại các đoạn mã code

Một điểm cộng lớn cho Python là khả năng tận dụng lại lượng lớn các mã code

Python là một ngôn ngữ mã hóa hướng đối tượng (Object-oriented programming, viết tắt: OOP).

Khái niệm về OOP trong Python tập trung vào việc tạo code sử dụng lại. Khái niệm này còn được gọi là DRY (Don’t Repeat Yourself), có nghĩa là nó có thể lấy một đoạn mã đã chuẩn bị sẵn và sử dụng nó ở bất cứ đâu cần thiết.

Điều này cực kỳ hữu ích và giúp giảm thiểu các đoạn mã code trong một trò chơi hoàn chỉnh. Ít dòng mã hơn có nghĩa là ít thời gian hơn để viết lại cùng một đoạn mã trong suốt dự án và ít thời gian hơn cho việc phát triển tổng thể.

Quan trọng hơn, Python cũng cung cấp khả năng sử dụng mã do các nhà phát triển khác viết thông qua việc sử dụng hệ sinh thái thư viện mã cực kỳ lớn của Python.

Điều này không chỉ giúp giảm thiểu khối lượng công việc tổng thể trong việc sáng tạo các trò chơi mà còn giúp các nhà Lập trình Game mới bắt đầu học các kỹ năng cần thiết để đối phó với tất cả các loại vấn đề.

Dễ gỡ lỗi

Lý do thứ 3 cho việc sử dụng Python để Lập trình Game là việc Python khiến quá trình gỡ lỗi (Debug) dễ dàng hơn. Debug là công việc tìm kiếm và loại bỏ những lỗi sai trong đoạn mã để chương trình tổng thể hoàn chỉnh hơn.

Vì Python là một trong những ngôn ngữ lập trình dễ đọc và dễ viết nhất, có nghĩa là Python sẽ đơn giản hơn để gỡ lỗi so với các ngôn ngữ khác.

Không những thế, Python còn được gọi là ngôn ngữ thông dịch (interpreted programming languages). Đặc trưng của ngôn ngữ lập trình kiểu thông dịch là thường có một Interactive Prompt đi kèm. Interactive Prompt cho phép nhà lập trình tương tác “trực tiếp” với máy tính để thực hiện những câu lệnh độc lập.

Với ngôn ngữ không có Interactive Prompt, nhà lập trình thường phải chạy lại từ đầu cả chương trình chỉ để kiểm tra một đoạn code khiến việc Debug mất nhiều thời gian và công sức hơn.

Việc có thể tập trung vào một lỗi duy nhất, giải quyết nó và tiếp tục chương trình sẽ giúp ích rất lớn trong việc quản lý việc gỡ lỗi.

Bằng 3 lý do trên, có thể hình dung vì sao Python lại được các nhà Lập trình Game ưu tiên sử dụng trong việc xây dựng một sản phẩm Game cho mình.

Học gì để lập trình game bằng python giỏi?

Bắt đầu với Kiến thức cơ bản về Python

Bước đầu tiên để học Python để phát triển trò chơi là học các kiến ​​thức cơ bản một cách độc lập. Bạn cần hiểu Python là gì, cách thức hoạt động và sự khác biệt của nó so với các ngôn ngữ lập trình đa năng khác. Tìm hiểu về những thứ như cú pháp Python, ngữ nghĩa, hàm, khuôn khổ, lớp và thư viện.

Có một số tài nguyên có sẵn cho các nhà phát triển Python, vì vậy bạn cần tìm hiểu về những tài nguyên phổ biến nhất và cách chúng có thể hữu ích.

Tìm hiểu cách Python có thể được sử dụng để phát triển trò chơi

Sau khi bạn đã có được kiến ​​thức nền tảng về Python, bạn cần tìm hiểu ứng dụng của Python trong phát triển trò chơi. Pygame là một trong những framework phổ biến nhất để phát triển trò chơi nhưng nó không phải là lựa chọn duy nhất có sẵn.

Một số khuôn khổ đáng tin cậy khác để phát triển trò chơi là Python-Ogre, Cocos2d, Panda3D, Kivy và Pyglet.

Xem xét các khóa học lập trình

Bắt đầu tự học với những tài liệu như hướng dẫn nhập môn là một ý tưởng hay nếu bạn có lòng tận tâm và kỷ luật để tự học. Tuy nhiên, một giải pháp thay thế lý tưởng hơn cho việc tự học là học các khóa học lập trình game. Các khóa học này có thể cung cấp nhiều kiến thức hơn việc tự học. Việc thuyết phục nhà tuyển dụng tiềm năng cho bạn cơ hội cũng sẽ dễ dàng hơn nếu bạn được đào tạo bài bản và bạn có đủ chứng chỉ để chứng minh điều đó.

Bắt đầu các dự án cá nhân

Cho dù bạn tự học Python để phát triển trò chơi hay bạn tham gia một khóa học chính thức, bạn cần phải thực hành với các dự án. Bắt đầu với một trò chơi 2D đơn giản và hoàn thành các dự án phức tạp hơn như trò chơi mạo hiểm. Bạn càng thực hành nhiều, bạn sẽ càng phát triển trò chơi hiệu quả hơn bằng Python.

Các trò chơi bạn phát triển nên được thêm vào porfolio của bạn để khách hàng tiềm năng hoặc nhà tuyển dụng có thể sử dụng chúng để đánh giá kỹ năng của bạn. Điều quan trọng là bạn phải làm cho porfolio của mình được cá nhân hóa và có thể truy cập công khai nếu bạn muốn tăng phạm vi tiếp cận của mình.

Một số tựa game kinh điển được lập trình bằng Python

Từ các tựa game 2D kinh điển đơn giản đến các game 3D nổi tiếng đều có sự đóng góp của Python

Snake

Snake là một trò chơi vui nhộn cổ điển nổi tiếng với hầu hết các bạn từ 9x thường được chơi bằng điện thoại di động Nokia. Bằng thư viện Python, trò chơi được xây dựng đơn giản và dễ dàng từ cách tạo màn hình chơi, thức ăn, các chức năng khác và màn hình Game Over khi trò chơi kết thúc.

Cách lập trình game bằng Python

Tetris (Xếp gạch)

Tetris cũng là một trong những trò chơi tuổi thơ của nhiều thế hệ. Sử dụng Python để tạo ra các chức năng như xoay khối hình, chuyển động, liên kết với các con số sẽ là một thách thức đối với những người mới bắt đầu lập trình Game.

Cách lập trình game bằng Python

Pac-man

Pac-man – một trò chơi nổi tiếng từ thập niên 80, thậm chí còn được Hollywood làm phim, là một trò chơi thú vị khác trong danh sách mà Python có thể thực hiện.

Cách lập trình game bằng Python

The Sim4

The Sims 4 là phiên bản thứ 4 trong loạt trò chơi điện tử mô phỏng cuộc sống nổi tiếng – The Sims. The Sims 4 được tạo ra bởi Maxis và The Sims Studio và được phân phối bởi Electronic Arts. Người chơi sẽ thiết kế một nhân vật Sim và quản lý cuộc sống của họ để xem xét các tính cách khác nhau, điều này sẽ biến đổi cách chơi của trò chơi. Hỗ trợ mod cho The Sims 4 được xây dựng thông qua Python bao gồm cả ứng dụng Python để viết mã.

Cách lập trình game bằng Python

Civilization IV

Civilization IV, có tên gọi khác là Sid Meier’s Civilization IV là một trò chơi PC phiên bản thứ tư của loạt trò chơi Civilization. Được phát triển bởi Soren Johnson dưới sự quản lý của Sid Meier và studio phát triển trò chơi điện tử Firaxis Games.

Được ra mắt trong khoảng thời gian từ ngày 25 tháng 10 đến ngày 4 tháng 11 năm 2005, ở Châu u, Bắc Mỹ và Úc. Trình chỉnh sửa bản đồ của trò chơi này được hỗ trợ bằng Python.

Ngoài lập trình game bằng Python các bạn cũng có thể làm được với Unity, tham khảo ngay bài viết lập trình game bằng Unity để biết thêm cách lập trình mới này.

Các bạn có thể tham gia vào các khóa học Lập trình Game để được trang bị đầy đủ những hiểu biết về quá trình lập trình game nói chung và lập trình game python nói riêng. Cùng đó là tìm hiểu thêm về vai trò của các bộ phận liên quan để trở thành một Chuyên viên Lập trình Game, bước chân vào thế giới Lập trình Game chuyên nghiệp. 

Trong bài viết Hướng dẫn code game "Thỏ chiến binh" bằng Python lần trước, chúng ta đã làm quen với việc code game trên Python. Lần này, mời các bạn tiếp tục tìm hiểu thêm nhiều điều hay ho hơn nữa qua hướng dẫn code game "Rắn săn mồi".

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

Điều đầu tiên bạn cần làm đó là cài đặt thư viện Pygame lên máy tính của mình. Bạn có thể truy cập pygame.org/download.shtml để tải về 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 mình.

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 thư viện Pygame, bạn cần sử dụng hàm display.set_mode(). Ngoài ra, bạn cũng sẽ phải sử dụng hàm init()quit() để khởi tạo và hủy khởi tạo mọi thứ ở đầu và cuối chương trình. Hàm update() được sử dụng để cập nhật bất kỳ thay đổi nào được thực hiện trên màn hình.

flip() là một hàm khác có cách hoạt động tương tự hàm update(). Khác biệt nằm ở chỗ hàm update() chỉ cập nhật những thay đổi được thực hiện trong khi đó hàm flip() sẽ làm lại toàn bộ màn hình.

Dưới đây là đoạn code mẫu:

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

Chạy đoạn code bạn sẽ có kết quả sau:

Cách lập trình game bằng Python
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 ra vòng lặp cho game bằng cách dùng while trước khi thực sự thoát game.

Code mẫu:

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 code 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òn có thể đặt tiêu đề cho màn hình bằng cách sử dụng hàm display.set_caption().

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

Cách lập trình game bằng Python
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à vì 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 vài biến 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 thiết lập là 0 hết cho RGB thì bạn sẽ nhận được màu đen, còn đặt 255 cho tất cả thì bạn 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à nhập và kích thước, màu sắc.

Code mẫu:

import pygame pygame.init() dis=pygame.display.set_mode((400,300)) pygame.display.set_caption('Snake game by Edureka') blue=(0,0,255) red=(255,0,0) 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,blue,[200,150,10,10]) pygame.display.update() pygame.quit() quit()

Kết quả khi chạy code mẫu:

Cách lập trình game bằng Python
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 class 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 di chuyển lên, xuống, trái và phả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 trắng 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 để chứa các giá trị được cập nhật của tọa độ x và y. Code mẫu cho tới phần này như sau:

import pygame pygame.init() white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) dis = pygame.display.set_mode((800, 600)) pygame.display.set_caption('Snake Game by Edureka') game_over = False x1 = 300 y1 = 300 x1_change = 0 y1_change = 0 clock = pygame.time.Clock() 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(white) pygame.draw.rect(dis, black, [x1, y1, 10, 10]) pygame.display.update() clock.tick(30) pygame.quit() quit()

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

Cách lập trình game bằng Python
Đâ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 điều khiển rắn đâm vào rìa màn hình. Để làm được điều đó, 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 màn hình. Bạn cũng không nên sử dụng các hardcode mà thay bằng các biến để có thể dễ dàng sửa đổi sau này nếu cần.

Code mẫu như sau:

import pygame import time pygame.init() white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) dis_width = 800 dis_height = 600 dis = pygame.display.set_mode((dis_width, dis_width)) pygame.display.set_caption('Snake Game by Edureka') game_over = False x1 = dis_width/2 y1 = dis_height/2 snake_block=10 x1_change = 0 y1_change = 0 clock = pygame.time.Clock() 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]) 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 = -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_over = True x1 += x1_change y1 += y1_change dis.fill(white) pygame.draw.rect(dis, black, [x1, y1, snake_block, snake_block]) pygame.display.update() clock.tick(snake_speed) message("You lost",red) pygame.display.update() time.sleep(2) pygame.quit() quit()

Còn đây là kết quả khi chạy chương trình và cho rắn đâm đầu vào rìa màn hình:

Cách lập trình game bằng Python
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 thêm con mồi cho con rắn và khi con rắn đi qua mồi, một thông báo "Yummy!!" sẽ hiện ra. Game cũng được điều chỉnh một chút ở code mẫu để thêm tùy chọn cho phép thoát hoặc chơi lại sau khi bị 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, 30) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [dis_width/3, dis_height/3]) def gameLoop(): # creating a function 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:

Cách lập trình game bằng Python
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 code giúp tăng độ dài của con rắn sau khi nó ăn mồi. Ngoài ra, một đoạn code 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, 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 chứa trong một liset và kích thước ban đầu là một khối đượ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(blue) 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ả của bước này:

Cách lập trình game bằng Python
Game gần như đã hoàn thiện

Bạn có thể thấy, để đồ họa của game trở nên hấp dẫn, ở bước này nền màn hình đã được chuyển sang màu xanh da trời, con mồi chuyển sang màu xanh lá và con rắn vẫn giữ nguyên màu đen nhưng kích thước đã được điều chỉnh.

Bước 8: Hiển thị số điểm

Cuối cùng nhưng cũng không kém phần quan trọng, bạn cần hiển thị số điểm của người chơi lên màn hình. Để làm điều này, bạn tạo ra một hàm mới có tên Your_score. Hàm này sẽ hiển thị độ dài của con rắn trừ đi độ dài ban đầu là 1.

Code mẫu hoàn chỉnh của game như 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 Your_score(score): value = score_font.render("Your Score: " + str(score), True, yellow) dis.blit(value, [0, 0]) 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) Your_score(Length_of_snake - 1) 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(blue) 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) Your_score(Length_of_snake - 1) 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:

Cách lập trình game bằng Python
Kết quả cuối cùng

Như vậy là chúng tôi vừa 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 sẽ mang tới cho các bạn thêm những kiến thức bổ ích về ngôn ngữ lập trình Python.

Để tham khảo 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 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.