#Hướng Dẫn Làm Game Đơn Giản Với Python Dành Cho Newbie

Trong bài viết này, Recruitery sẽ trình bày chi tiết cách tạo các trò chơi đơn giản như Tic-Tac-Toe và trò chơi Dots-and-Boxes trong python bằng cách sử dụng gói Tkinter. Bài viết được chia thành các nội dung sau:

Giao diện sử dụng Tkinter

Tkinter là khung GUI tiêu chuẩn của python và đi kèm với python 3. Bạn có thể tìm thấy hướng dẫn tuyệt vời cho người mới bắt đầu tại đây. Hướng dẫn này không tập trung vào Tkinter, thay vào đó là cách sử dụng nó để tạo các trò chơi đơn giản. Hai tiện ích chính mà chúng tôi sẽ sử dụng là
- Canvas: Để vẽ đồ họa trò chơi trên cửa sổ
- Bind: Để bắt các đầu vào của người dùng tương tác/nhập vào.

Tiện ích Canvas:

Tiện ích canvas trên Tkinter được sử dụng để vẽ các đối tượng hình học trên cửa sổ. Nó có các phương pháp để vẽ các hình dạng khác nhau. Các phương pháp phổ biến nhất được sử dụng cho một trò chơi đơn giản như sau
Create_line(): Để vẽ các đường
Create_oval(): Để vẽ vòng tròn
Create_text(): Để in văn bản trên cửa sổ
delete(): Xóa các đối tượng đã vẽ khỏi cửa sổ

Tiện ích Bind:

Bind được sử dụng để nhận đầu vào từ các sự kiện nhấp chuột. Các tham số sau có thể được sử dụng trong phương thức liên kết để xác định loại nhấp chuột
Button-1: Xác định nhấp chuột trái
Button-2: Xác định nhấp chuột giữa
Button-3: Xác định nhấp chuột phải
Phương thức liên kết nhận tham số trên làm đối số đầu tiên và tên mô-đun làm đối số thứ hai. Mô-đun được gọi khi sự kiện nhấp chuột xác định tham số được xác định.

Sơ đồ cấu trúc của game python

Bây giờ chúng ta đã có tổng quan cơ bản về Tkinter, hãy vẽ sơ đồ cơ bản của một trò chơi đơn giản.

Game flow Python - Recruitery

Dựa trên một số thông số trò chơi (chẳng hạn như kích thước của lưới, màu sắc, văn bản và các tính năng khởi tạo khác) trò chơi sẽ khởi tạo và sau đó sẽ bắt đầu tìm kiếm thông tin đầu vào của người dùng (dưới dạng nhấp chuột). Sau khi nhận được, các vị trí lưới (tọa độ x, y của cửa sổ nơi con chuột được nhấp vào) sẽ được chuyển đổi thành các vị trí logic phụ thuộc vào trò chơi. Các vị trí logic này sau đó sẽ được sử dụng để cập nhật trạng thái bên trong của trò chơi được lưu trữ dưới dạng các biến trong python và cập nhật đồ họa trò chơi bằng các phương pháp canvas. Quá trình sẽ lặp lại cho đến khi trò chơi kết thúc (điều này sẽ phụ thuộc vào cách nhấp chuột và trạng thái bên trong của trò chơi). Kết quả của trò chơi sẽ được hiển thị. Một sự kiện nhấp chuột sẽ được thêm vào màn hình kết quả để người dùng chọn xem họ có muốn chơi lại trò chơi hay không.

Cấu trúc code:

Để có một tổ chức tốt hơn và hợp lý của code, chúng tôi sẽ cấu trúc các chức năng được cấu trúc thành ba loại.
- Các chức năng khởi tạo
- Chức năng vẽ
- Các hàm logic

Các chức năng khởi tạo:

Các chức năng này có nhiệm vụ thiết lập trạng thái ban đầu cho trò chơi. Chúng bao gồm xác định các biến trò chơi, khởi tạo đồ họa trò chơi, đặt lại các biến trò chơi khi trò chơi kết thúc, xác định khung vẽ và các tiện ích liên kết, v.v. Các chức năng khởi tạo sẽ chủ yếu giải quyết việc thiết lập trò chơi trong trường hợp một trò chơi mới được bắt đầu hoặc trò chơi đã kết thúc và cần được chơi lại.

Chức năng vẽ:

Như tên cho thấy, các chức năng này sẽ chịu trách nhiệm vẽ các yếu tố đồ họa dựa trên trò chơi lên cửa sổ Tkinter. Dựa trên các phương pháp vẽ canvas cơ bản được đề cập ở trên, chúng tôi sẽ tạo các chức năng vẽ cấp cao cụ thể cho trò chơi của chúng tôi. Các chức năng vẽ cấp cao này sau đó sẽ được sử dụng như các khối xây dựng để cập nhật đồ họa trò chơi.

Các chức năng logic:

Các chức năng này sẽ không liên quan gì đến đồ họa trò chơi và sẽ xử lý logic trò chơi. Chúng bao gồm, nhưng không giới hạn ở, theo dõi trạng thái trò chơi, nhận thông tin đầu vào của người dùng, cập nhật trạng thái của trò chơi, kiểm tra xem động thái hiện tại có hợp pháp hay không, theo dõi điểm số của người chơi, kiểm tra xem trò chơi đã kết thúc hay chưa, quyết định kết quả của trò chơi, v.v.

Ví dụ 1: Tic-Tac-Toe:

Bạn có thể download code của trò này tại đây.

Đoạn code sử dụng một mảng có kích thước 3x3 để theo dõi trò chơi, tức là trạng thái của bàn cờ. ‘X’ được đánh dấu là -1 trong khi ‘O’ được đánh dấu là 1. Tất cả các ô trống được đánh dấu là 0 (không). Người dùng nhấp vào trong một hộp và sự kiện được ghi lại bằng phương thức liên kết "click". Vị trí lưới sau đó được chuyển đổi để xác định hộp trong đó sự kiện nhấp chuột đã xảy ra. Dựa trên người chơi, mã sau đó rút ra một chữ ‘X’ hoặc ‘O’ trong ô đã xác định chỉ khi ô đó chưa bị chiếm dụng. Tình trạng bảng cũng được cập nhật. Với mỗi lượt, mã sẽ kiểm tra xem có người chơi nào thắng hay không. Điều này được thực hiện bằng cách tìm các mẫu trong trạng thái bảng 3x3. Trò chơi kết thúc khi một trong hai người chơi thắng hoặc tất cả các ô đã bị chiếm. Ở giai đoạn này, màn hình kết quả được tạo hiển thị người chiến thắng và số điểm của mỗi người chơi.

Ảnh chụp màn hình của trò chơi:

Tictactoe - Recruitery

 

Ví dụ 2: Dots and Boxes

Bạn có thể download code của trò này tại đây.

Đoạn code sử dụng một mảng có kích thước (num_dots-1) x (num_dots-1) để theo dõi số lượng các cạnh được đánh dấu cho mỗi hộp. Bất cứ khi nào người chơi 1 đánh dấu một cạnh xung quanh một hộp, giá trị của mảng được liên kết với hộp đó sẽ giảm đi 1 và khi được người chơi 2 đánh dấu, nó sẽ tăng lên 1. Bất cứ khi nào bất kỳ phần tử nào của mảng này đạt đến giá trị -4 ( hoặc 4), điều này cho biết người chơi 1 (người chơi 2) đã tạo ô thành công.

Người chơi nhấp vào các cạnh giữa các dấu chấm để kích hoạt / đánh dấu chúng. Diện tích kích hoạt được tính toán cẩn thận cho từng cạnh và tương ứng với hình vuông ở giữa cạnh có diện tích bằng 1/3 diện tích của hộp. Khi một cạnh được đánh dấu, vị trí lưới sau đó được chuyển đổi để xác định các hộp tương ứng với cạnh đó và giá trị của mảng tương ứng với các hộp này được tăng / giảm. Trò chơi kết thúc khi tất cả các cạnh đã được đánh dấu. Màn hình kết quả sau đó hiển thị người chiến thắng và số ô được đánh dấu bởi mỗi người chơi.

dots and boxes - Recruitery

Tổng kết:

Đề cương cơ bản về cách tạo các trò chơi đơn giản bằng Python bằng gói Tkinter đã được thảo luận. Hai ví dụ với code đã được cung cấp để cung cấp cho người dùng điểm khởi đầu và hiểu biết cơ bản để tạo các trò chơi đơn giản khác. Mã có sẵn tại các liên kết sau: