Hỏi đáp

Xây dựng một game màu sắc bằng Tkinter trong Python

Huy Erick

Bạn có muốn thử lập trình mini-game bằng Python? Hôm nay, chúng ta sẽ khám phá cách tạo một game thú vị về màu sắc bằng Tkinter trong Python. Battlefield2, World of Tanks, The Sims4,...

Bạn có muốn thử lập trình mini-game bằng Python? Hôm nay, chúng ta sẽ khám phá cách tạo một game thú vị về màu sắc bằng Tkinter trong Python.

Battlefield2, World of Tanks, The Sims4, và Freedom Force là một vài trong số hàng nghìn game hấp dẫn được lập trình bằng Python.

Tkinter, giao diện Python chuẩn cho toolkit Tk GUI, là một mô đun mạnh mẽ, giúp việc tạo giao diện người dùng đồ họa trở nên dễ dàng và thú vị. Với mô đun này, bạn có thể phát triển một "Color Game" - một game đố vui về màu sắc.

Color Game là gì?

Trong Color Game, chương trình sẽ hiển thị tên của một màu sắc trên màn hình, nhưng bằng một màu font khác. Ví dụ, nó có thể hiển thị từ "Yellow" bằng màu font đỏ, và người chơi phải nhập đúng tên màu của từ đó vào trường tương ứng.

Thông tin sai lệch kèm theo đồng hồ đếm giờ tạo nên yếu tố gây nhiễu, đồng thời tạo ra trải nghiệm chơi có tính giải trí cao.

Mô đun Tkinter và Random

Để xây dựng Color Game, bạn sẽ sử dụng hai mô đun chính là Tkinter và Random. Tkinter là một mô đun GUI thân thiện người dùng, đơn giản và chạy trên nhiều nền tảng, giúp bạn dễ dàng tạo giao diện người dùng đồ họa.

Tkinter cung cấp một số công cụ hữu ích như label, entry và trình quản lý bố cục pack, grid, và place. Các hàm được cung cấp khá đơn giản, ngay cả người mới học lập trình cũng có thể thiết kế ứng dụng một cách dễ dàng. Để cài đặt Tkinter trong hệ thống, bạn chỉ cần chạy lệnh sau trong terminal:

pip install tkinter

Mô đun Random là một thư viện tích hợp cho phép bạn tạo ra các lựa chọn ngẫu nhiên. Sử dụng mô đun này, bạn có thể phát triển game đoán số, trình tạo mật khẩu ngẫu nhiên và nhiều hơn nữa.

Cách tạo game đố màu bằng Python

Bắt đầu bằng việc import Tkinter và mô đun Random. Lưu trữ tên các màu sắc dưới dạng danh sách các chuỗi, và khởi tạo biến score bằng 0 và biến time_remaining bằng 60.

from tkinter import * import random  colours = ['Red', 'Green', 'Blue', 'Black', 'Pink', 'White', 'Purple', 'Yellow', 'Brown'] score = 0 time_remaining = 60

Xác định hàm beginGame(), với event là tham số nhập vào. Hàm này thực hiện hai nhiệm vụ. Đầu tiên, nó kiểm tra xem biến time_remaining có bằng 60 hay không. Nếu đúng, nó gọi và chạy hàm countdown(). Thứ hai, nó gọi hàm nextColor() để xáo trộn ngẫu nhiên và hiển thị màu sắc cũng như điểm số khi trò chơi đang diễn ra.

def beginGame(event):     if time_remaining == 60:         countdown()     nextColor()

Xác định một hàm nextColor() và tham chiếu biến toàn cầu. Nếu biến time_remaining lớn hơn 0, thiết lập trọng tâm trên trường nhập bằng focus_set() trên widget label (được lưu trong biến e). Widget này sẽ được giải thích trong đoạn mã dưới đây.

Sử dụng hàm get() để trích xuất văn bản hiện tại của trường nhập dưới dạng chuỗi và chuyển nó thành chữ viết thường để tránh trường hợp không khớp chữ hoa/thường. Nếu giá trị này trùng với màu hiện trên màn hình, hãy tăng điểm lên một. Sử dụng hàm delete() từ vị trí 0 đến vị trí cuối cùng trên widget entry để xóa nội dung.

def nextColor():     global score     global time_remaining     if time_remaining > 0:         e.focus_set()         if e.get().lower() == colours[1].lower():             score += 1             e.delete(0, END)

Sử dụng hàm shuffle() để sắp xếp lại các mục trong danh sách và hiển thị nhãn màu kèm theo văn bản dưới dạng màu đầu tiên trong danh sách này và màu font là màu thứ hai trong danh sách. Sử dụng hàm config() trên scoreLabel (yêu cầu nhấn Enter) để hiển thị điểm số khi chơi game.

    random.shuffle(colours)     label.config(fg=str(colours[1]), text=str(colours[0]))     scoreLabel.config(text="Điểm số: " + str(score))

Xác định một hàm có tên countdown() để giảm thời gian còn lại và giảm 1. Sử dụng hàm config() trên timeLabel để hiển thị thời gian còn lại trên màn hình và hàm after() để gọi lại hàm countdown() sau một khoảng thời gian trễ 1000 mili giây hoặc 1 giây.

def countdown():     global time_remaining     if time_remaining > 0:         time_remaining -= 1         timeLabel.config(text="Thời gian còn lại: " + str(time_remaining))         timeLabel.after(1000, countdown)

Khởi tạo phiên bản Tkinter và hiển thị cửa sổ gốc. Đặt tiêu đề, kích thước theo pixel và màu nền cho cửa sổ.

root = Tk() root.title("Color Game với một chút thay đổi") root.geometry("750x450") root.configure(background='Orange')

Sử dụng widget Label để hướng dẫn người chơi, và chấp nhận cửa sổ chính để đặt nó. Văn bản này sẽ hiển thị kiểu font và kích thước cùng với màu nền của nhãn. Sử dụng hàm pack() để sắp xếp lại widget label trước khi đặt chúng vào widget chính.

Tương tự, xác định nhãn scoreLabel để hướng dẫn người dùng nhấn Enter để bắt đầu chơi game, còn nhãn timeLabel để hiển thị thời gian còn lại. Đảm bảo tất cả các nhãn có màu nền cam để hòa hợp với nền. Xác định một nhãn trống để chứa các tên màu trong hàm nextColor().

instructions = Label(root, text="Hãy nhập tên của màu, chứ không phải văn bản ;)", font=('Arial', 24), bg="orange") instructions.pack()  scoreLabel = Label(root, text="Nhấn Enter để bắt đầu", font=('Arial', 24), bg="orange") scoreLabel.pack()  timeLabel = Label(root, text="Thời gian còn lại: " + str(time_remaining), font=('Arial', 24), bg="orange") timeLabel.pack()  label = Label(root, font=('Arial', 90), bg="orange")

Như đã đề cập từ đầu, sử dụng widget Entry để lưu câu trả lời của người chơi. Một bước quan trọng cần nhớ là liên kết phím Enter với một sự kiện trong cửa sổ Tkinter để khi người chơi nhấn Enter, chức năng tương ứng sẽ được triển khai.

Để thực hiện điều đó, bạn cần liên kết phím với hàm beginGame() dưới dạng tham số cho hàm bind(). Sử dụng pack()focus_set() để sắp xếp và đặt tiêu điểm trên nhãn trường nhập khi nhấn Enter.

e = Entry(font=20) root.bind('', beginGame) e.pack() e.focus_set()

Cuối cùng, sử dụng mainloop() để thông báo vòng lặp sự kiện Tkinter và lắng nghe hành động cho tới khi bạn đóng cửa sổ này.

root.mainloop()

Đặt tất cả đoạn mã lại với nhau và bạn đã có một trò chơi Color Game thú vị cho mọi người chơi thỏa thích.

Khi chạy chương trình Color Game, một cửa sổ sẽ hiển thị trên màn hình. Khi nhấn Enter, đồng hồ đếm ngược sẽ chạy, và người chơi phải nhập chính xác tên màu sắc của từ hiển thị. Đối với mỗi câu trả lời đúng, bạn sẽ nhận được một điểm. Khi trò chơi kết thúc, tổng điểm sẽ được hiển thị trên màn hình.

Trên đây là cách tạo game với Python. Hy vọng bài viết này hữu ích với các bạn.

1