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

Bạn có thể lập trình mini-game bằng Python theo cách vô cùng đơn giản. Dưới đây là cách tạo một game đố vui về màu sắc bằng Tkinter trong Python.

Game màu sắc bằng 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ẽ, khiến việc tạo giao diện người dùng đồ họa dễ dàng và thú vị. Dùng mô đun này, bạn có thể phát triển một Color Game - game đố vui tiếng Anh về màu sắc.

Color Game là gì?

Trong Color Game, chương trình này hiện 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ó hiện từ Yellow bằng màu font đỏ, người chơi phải nhập đúng tên màu của văn bản vào trường tương ứng.

Thông tin sai lệch cùng với đồng hồ bấm giờ là nhân 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ẽ dùng mô đun tkinter và random. Tkinter là một mô đun GUI thân thiện người dùng, đơn giản và chéo nền tảng mà bạn có thể dùng để tạo giao diện người dùng đồ họa thật nhanh.

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

pip install tkinter

Mô đun ngẫu nhiên là một thư viện được tích hợp mà bạn có thể tạo ra các lựa chọn ngẫu nhiên. 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 thế nữa.

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

Bắt đầu bằng cách nhập tkinter và mô đun ngẫu nhiên. Lưu trữ tên của màu sắc dưới dạng danh sách các chuỗi và khởi tạo biến score sang 0 time_remaining sang 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(), lấy event làm đối số nhập vào. Hàm này triển khai hai nhiệm vụ. Đầu tiên, nó kiểm tra xem liệu 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 màu sắc cũng như điểm số khi game đang chạy.

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

Xác định một hàm nextColour() và tham chiếu biến toàn cầu. Nếu thời gian còn lại lớn hơn 0, thiết lập mục tiêu trên trường nhập bằng focus_set() trên label mục nhập (được lưu trong biến e). Nó sẽ được xác định ở nửa sau của mã.

Dùng hàm get() để trích xuất văn bản hiện tại của entry 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 trùng khớp. Nếu giá trị này bằng màu hiện trên màn hình, hãy tăng điểm lên một. Dùng hàm delete() từ 0 tới chỉ mục cuối cùng trên widget entry để làm rõ nội dung.

def nextColour():
    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)

Dùng hàm shuffle() để sắp xếp lại các mục trong danh sách và hiện nhãn màu kèm text 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. Dùng hàm config() trên scoreLabel (yêu cầu nhấn Enter) để hiện điểm số khi chơi game.

        random.shuffle(colours)
        label.config(fg=str(colours[1]), text=str(colours[0]))
        scoreLabel.config(text="Score: " + str(score))

Xác định một hàm mang tên countdown() tham chiếu thời gian còn lại và giảm 1 cho nó. Dùng hàm config() trên timeLabel để hiện 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 khi trì hoãn 1000 mili giây hoặc một giây.

def countdown():
    global time_remaining
    if time_remaining > 0:
        time_remaining -= 1
        timeLabel.config(text="Time left: " + str(time_remaining))
        timeLabel.after(1000, countdown)

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

root = Tk()
root.title("Color Game With a Twist")
root.geometry("750x450")
root.configure(background='Orange')

Dùng widget Label để dẫn người chơi tới phần hướng dẫn game. Nó chấp nhận cửa sổ chính mà bạn sẽ đặt nó. Text này sẽ hiện kiểu font và kích thước cùng với màu nền của nhãn. Dùng hàm pack() để sắp xếp lại widget label thành các khối trước khi đặt chúng vào widget chính.

Tương tự, xác định nhãn score để hướng dẫn người dùng nhấn Enter khởi động game, còn nhãn time để hiện thời gian còn lại. Đảm bảo tất cả các nhãn đều có màu nền vàng cam để chúng hòa vào nền. Xác định một nhãn trống sẽ chứa các tên màu trong hàm nextColour().

instructions = Label(root, text="Type the colour of the word not the text ;)", font=('Arial', 24), bg="orange")
instructions.pack()
scoreLabel = Label(root, text="Press Enter to begin", font=('Arial', 24), bg="orange")
scoreLabel.pack()
timeLabel = Label(root, text="Time remaining: " + str(time_remaining), font=('Arial', 24), bg="orange")
timeLabel.pack()
label = Label(root, font=('Arial', 90), bg="orange")

Như đã đề cập từ đầu, dùng widget entry để ghi lại 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 vào nó, chức năng tương ứng sẽ được triển khai.

Để có kết quả đó, bạn chuyển khóa <Return> và hàm beginGame() dưới dạng tham số cho hàm bind(). Ngoài ra, dùng pack()focus_set() để sắp xếp và thiết lập tiêu điểm trên nhãn trường nhập khi bạn nhấn Enter.

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

Hàm mainloop() cho Python biết phải chạy 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ả code lại với nhau và bạn đã có 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ổ hiện trên màn hình. Khi nhấn Enter, đồng hồ đếm ngược chạy, người chơi phải bắt đầu nhập chính xác tên màu sắc của từ hiện ra. Đối với mỗi câu trả lời đúng, bạn sẽ nhận được một điểm. Khi game kết thúc, tổng điểm số sẽ hiện trên màn hình.

Màn hình chơi game

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

Thứ Tư, 22/02/2023 10:31
51 👨 1.693
0 Bình luận
Sắp xếp theo
    ❖ Python