/ / Cách xây dựng trò chơi Memory Tile bằng Python

Cách xây dựng trò chơi Memory Tile bằng Python

Xếp hình trí nhớ hoặc trò chơi ghép hình là một cách thú vị và tuyệt vời để tăng cường khả năng nhận thức, tăng cường trí nhớ và cải thiện sự tập trung. Trò chơi có một bộ ô mà bạn phải lật từng ô một, ghi nhớ và chọn những ô phù hợp. Khi ghép đúng tất cả các ô, bạn sẽ thắng trò chơi.


Vậy làm cách nào bạn có thể phát triển trò chơi tuyệt vời này bằng Python?


Các mô-đun Tkinter và Random

Bạn có thể xây dựng trò chơi xếp ô trí nhớ bằng các mô-đun Tkinter và Random. Tkinter cho phép bạn tạo các ứng dụng máy tính để bàn. Nó cung cấp nhiều tiện ích con như nút, nhãn và hộp văn bản giúp phát triển các ứng dụng như lịch, máy tính và danh sách việc cần làm dễ dàng hơn. Để cài đặt Tkinter, hãy mở terminal và chạy:

 pip install tkinter 

Mô-đun Ngẫu nhiên là một mô-đun Python tích hợp được sử dụng để tạo các số giả ngẫu nhiên. Sử dụng điều này, bạn có thể xây dựng trình tạo mật khẩu ngẫu nhiên, ứng dụng mô phỏng cuộn xúc xắc hoặc trình xáo trộn danh sách. Hơn nữa, bạn cũng có thể phát triển các trò chơi thú vị như chơi cricket bằng tay và trò chơi đoán số.

Cách xây dựng trò chơi Memory Tile bằng Python

Bạn có thể tìm thấy mã nguồn để xây dựng trò chơi xếp ô trí nhớ bằng Python trong kho lưu trữ GitHub này.

Bắt đầu bằng cách nhập mô-đun Tkinter và Random. Khởi tạo cửa sổ gốc và đặt tiêu đề và kích thước tính bằng pixel.

 from tkinter import *
import random
from tkinter import messagebox

root = Tk()
root.title('Memory Tile Game')
root.geometry("760x550")

Xác định hai biến toàn cục và khởi tạo biến người chiến thắng bằng 0. Khai báo danh sách các mục sẽ xuất hiện trên các ô xếp. Sắp xếp lại danh sách bằng cách sử dụng mô-đun ngẫu nhiên xáo trộn() phương pháp. Xác định một khung trong cửa sổ gốc và thêm phần đệm 10 theo hướng dọc.

Khởi tạo biến đếm bằng 0 và khai báo danh sách câu trả lời và từ điển tương ứng.

 global winner, matches
winner = 0
matches = ["apple","apple","banana","banana", "orange","orange", "blueberry","blueberry","mulberry","mulberry", "grapes","grapes"]
random.shuffle(matches)
my_frame = Frame(root)
my_frame.pack(pady=10)
count = 0
answer_list = []
answer_dict = {}

Xác định một chức năng, cài lại(). Đặt văn bản của nhãn thành một chuỗi trống bằng cách sử dụng cấu hình() chức năng. Xác định một danh sách nút, một danh sách cho mỗi ô. Lặp lại danh sách và đặt văn bản trên ô nút thành một chuỗi trống, màu nền thành mặc định (Hệ ThốngNútKhuôn Mặt), và trạng thái bình thường.

 def reset():
    my_label.config(text="")
    button_list = [b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]
    for button in button_list:
        button.config(text=" ", bg="SystemButtonFace", state="normal")

Xác định một chức năng, thắng(). Đặt thông báo chiến thắng trong tham số văn bản của nhãn bằng cách sử dụng cấu hình() chức năng. Xác định danh sách nút như trước đó và lặp qua danh sách đó để đặt màu nền của ô thành màu lục nhạt.

 def win():
    my_label.config(text="Congratulations! You Win!")
    button_list = [b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11]
    for button in button_list:
        button.config(bg="#90EE90")

Xác định một chức năng, button_click() lấy nút và số của nó làm tham số đầu vào. Tham khảo các biến toàn cục, danh sách và từ điển. Nếu văn bản của nút bằng khoảng trắng và số đếm nhỏ hơn hai thì hãy chèn và hiển thị văn bản của nút. Nối số nút vào danh sách câu trả lời và tên vào từ điển câu trả lời. Tăng biến đếm lên một.

 def button_click(b, number):
    global count, answer_list, answer_dict, winner
    if b["text"] == ' ' and count < 2:
        b["text"] = matches[number]
        answer_list.append(number)
        answer_dict[b] = matches[number]
        count += 1

Nếu độ dài của danh sách câu trả lời là hai, điều đó có nghĩa là người dùng đã chọn hai ô. Nếu văn bản của ô đầu tiên khớp với ô kia, hãy định cấu hình nhãn để hiển thị rằng cả hai ô này đều khớp chính xác. Biến trạng thái của nút thành vô hiệu hóa. Đặt số đếm thành 0 và làm trống danh sách và từ điển. Tăng biến người chiến thắng lên một và nếu nó chuyển sang sáu, hãy gọi hàm win đã khai báo trước đó.

     if len(answer_list) == 2:
        if matches[answer_list[0]] == matches[answer_list[1]]:
            my_label.config(text="It's a Match!")
            for key in answer_dict:
                key["state"] = "disabled"
            count = 0
            answer_list = []
            answer_dict = {}
            winner += 1
            if winner == 6:
                win()

Nếu không, hãy đặt lại biến đếm và danh sách. Hiển thị hộp thông báo có tiêu đề và nội dung mô tả không khớp. Lặp lại danh sách câu trả lời và đặt văn bản của ngăn xếp thành khoảng trắng. Đặt lại nhãn và làm trống từ điển. Điều này đảm bảo rằng không có văn bản hiển thị trên nút và nhãn sau khi người dùng đã chọn ô xếp không chính xác.

         else:
            count = 0
            answer_list = []
            messagebox.showinfo("Incorrect!", "Incorrect")
            for key in answer_dict:
                key["text"] = " "
            my_label.config(text=" ")
            answer_dict = {}

Xác định 12 nút. Đặt cửa sổ mẹ mà bạn muốn đặt chúng vào, văn bản mà chúng sẽ hiển thị, kiểu phông chữ mà chúng nên có, chiều cao và chiều rộng của chúng cũng như lệnh thực thi khi được nhấp. Hãy nhớ sử dụng hàm lambda để truyền dữ liệu cho button_click() chức năng. Đặt sự cứu tế tham số để rãnh để tạo hiệu ứng độ sâu 3-D xung quanh nút.

 b0 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b0, 0), relief="groove")
b1 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b1, 1), relief="groove")
b2 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b2, 2), relief="groove")
b3 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b3, 3), relief="groove")
b4 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b4, 4), relief="groove")
b5 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b5, 5), relief="groove")
b6 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b6, 6), relief="groove")
b7 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b7, 7), relief="groove")
b8 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b8, 8), relief="groove")
b9 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b9, 9), relief="groove")
b10 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b10, 10), relief="groove")
b11 = Button(my_frame, text=' ', font=("Helvetica", 20), height=4, width=8, command=lambda: button_click(b11, 11), relief="groove")

Sắp xếp các nút theo định dạng bảng bao gồm ba hàng và bốn cột bằng trình quản lý lưới của Tkinter. Để làm như vậy, hãy gọi lưới() và chuyển hàng cùng với số cột mà bạn muốn đặt nó vào.

 b0.grid(row=0, column=0)
b1.grid(row=0, column=1)
b2.grid(row=0, column=2)
b3.grid(row=0, column=3)
b4.grid(row=1, column=0)
b5.grid(row=1, column=1)
b6.grid(row=1, column=2)
b7.grid(row=1, column=3)
b8.grid(row=2, column=0)
b9.grid(row=2, column=1)
b10.grid(row=2, column=2)
b11.grid(row=2, column=3)

Xác định nhãn hiển thị một chuỗi trống và thêm phần đệm 20 theo hướng dọc. Xác định menu cấp cao nhất trên cửa sổ gốc và đính kèm nó bằng cách xoay xé nhỏ tham số để SAI. Thêm một mục menu phụ, Tùy chọn sử dụng add_cascade tham số.

Thêm hai mục menu cùng với các lệnh mà chúng sẽ thực thi khi được nhấp vào trong menu con có tên Đặt lại trò chơiThoát trò chơi. Thêm một dấu phân cách giữa chúng để phân định ranh giới.

 my_label = Label(root, text="")
my_label.pack(pady=20)

my_menu = Menu(root)
root.config(menu=my_menu)
option_menu = Menu(my_menu, tearoff=False)
my_menu.add_cascade(label="Options", menu=option_menu)
option_menu.add_command(label="Reset Game", command=reset)
option_menu.add_separator()
option_menu.add_command(label="Exit Game", command=root.quit)

Các vòng lặp chính() hàm yêu cầu Python chạy vòng lặp sự kiện Tkinter và lắng nghe các sự kiện cho đến khi bạn đóng cửa sổ.

 root.mainloop() 

Đặt tất cả các mã lại với nhau. Bây giờ trò chơi gạch trí nhớ đã sẵn sàng để chơi.

Đầu ra của trò chơi Memory Tile

Khi chạy chương trình, 12 nút xuất hiện với văn bản trống cùng với Tùy chọn thực đơn. Khi nhấp vào Đặt lại trò chơicửa sổ sẽ xuất hiện theo cách tương tự.

Đầu ra của trò chơi ô nhớ khi bắt đầu hoặc khi nhấn đặt lại trò chơi

Khi chọn hai ô phù hợp, các nút sẽ bị vô hiệu hóa và nhãn hiển thị rằng lựa chọn đó là chính xác.

Đầu ra của trò chơi xếp gạch bộ nhớ khi chọn đúng ô

Khi chọn hai ô không khớp, một hộp thông báo xuất hiện cho biết lựa chọn không chính xác. Các nút và nhãn trở về trạng thái rỗng ban đầu.

Đầu ra của trò chơi xếp gạch bộ nhớ khi chọn sai ô

Khi khớp thành công tất cả các lựa chọn, chương trình sẽ chuyển tất cả các ô màu xanh lục và hiển thị thông báo chiến thắng.

Đầu ra của trò chơi gạch trí nhớ khi bạn giành chiến thắng

Trò chơi bạn có thể xây dựng bằng Python

Python cung cấp nhiều mô-đun để xây dựng trò chơi. Để tạo các trò chơi dựa trên lựa chọn hoặc từ đơn giản như Hangman, Tic-Tac-Toe hoặc Rock Paper Scissors, bạn có thể sử dụng các mô-đun Tkinter và Random. Để phát triển các trò chơi cần nhiều đồ họa hơn, bạn có thể sử dụng Pygame.

Pygame là một tập hợp các mô-đun Python hoạt động trên mọi nền tảng. Nó bao gồm đồ họa máy tính và thư viện âm thanh giúp trò chơi tương tác hơn. Một số trò chơi bạn có thể xây dựng bằng Pygame bao gồm trò chơi Rắn săn mồi, trò chơi giải đố trí nhớ và Sudoku.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *