Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Trò chơi bắt bóng bằng Python


Python cũng có thể dùng để tạo game máy tính. Trong bài này, chúng ta sẽ xem cách tạo trò chơi bắt bóng (ball catching game) bằng Python. Trong game này, một quả bóng liên tục rơi từ trên cùng cửa sổ canvas, và một thanh (bar) nằm ở dưới cùng. Hai nút bấm được cung cấp để di chuyển thanh sang trái và phải. Khi nhấn chuột, thanh ở dưới di chuyển để bắt quả bóng rơi. Ở các thời điểm khác nhau, quả bóng rơi từ các vị trí khác nhau.

Cách tiếp cận

Cách xây dựng game được mô tả qua các bước sau:

  • Bước 1 – Vẽ một canvas hình chữ nhật tkinter để chứa các bố cục tiếp theo như đồ họa, văn bản, hình ảnh, v.v.

  • Bước 2 – Tạo quả bóng sẽ rơi từ trên. Dùng phương thức create_oval. Nó nhận 4 tọa độ để tạo một hình elip (kết hợp giữa tròn và chữ nhật).

  • Bước 3 – Tạo thanh ở dưới sẽ di chuyển trái/phải khi nhấn chuột. Dùng phương thức create_rectangle.

  • Bước 4 – Dùng phương thức canvas.move để di chuyển bóng hoặc thanh. Phương thức này dùng cho cả chuyển động dọc và ngang của các đối tượng gắn liền.

  • Bước 5 – Tạo các nút bấm để di chuyển thanh ở dưới. Sẽ có sự kiện gắn vào nút bấm, kích hoạt khi nút được nhấn.

Chương trình hoàn chỉnh

Dưới đây là chương trình hoàn chỉnh dựa trên các bước trên, dùng các phương thức và đối tượng liên quan.

Ví dụ

# Trò chơi bắt bóng bằng Python
from tkinter import Tk, Button, Label
from tkinter import Canvas
from random import randint

base = Tk()
base.title("BALL GAME")
base.resizable(False, False)
color = Canvas(base, width=590, height=610)
color.pack()
standard = 0
length = 5
marks = 0

class model:
    def __init__(self, color, m1, n1, m2, n2):
        self.m1 = m1
        self.n1 = n1
        self.m2 = m2
        self.n2 = n2
        self.color = color
        self.circle = color.create_oval(self.m1, self.n1, self.m2, self.n2, fill="blue", tags='dot1')
    def Game(self):
        offset = 5
        global standard
        if standard >= 510:
            global length, marks, next
            if (length - offset <= self.m1 and
                length + 40 + offset >= self.m2):
                marks += 5
                color.delete('dot1')
                game_play()
            else:
                color.delete('dot1')
                slide.remove(self)
                result()
            return
        standard += 1
        self.color.move(self.circle, 0, 1)
        self.color.after(10, self.Game)

class slide:
    def __init__(self, color, m1, n1, m2, n2):
        self.m1 = m1
        self.n1 = n1
        self.m2 = m2
        self.n2 = n2
        self.color = color
        self.num = color.create_rectangle(self.m1, self.n1, self.m2, self.n2, fill="green", tags='dot2')
    def push(self, num):
        global length
        if num == 1:
            self.color.move(self.num, 20, 0)
            length += 20
        else:
            self.color.move(self.num, -20, 0)
            length -= 20
    def remove(self):
        color.delete('dot2')

def game_play():
    global standard
    standard = 0
    size = randint(0, 570)
    game1 = model(color, size, 20, size + 30, 50)
    game1.Game()

def result():
    base2 = Tk()
    base2.title("THE BALL GAME")
    base2.resizable(False, False)
    set = Canvas(base2, width=300, height=300)
    set.pack()
    z = Label(set, text="\nGame over\n\nYou have scored = " + str(marks) + "\n\n")
    z.pack()
    btx = Button(set, text="Enter if you want to play again", bg="yellow", command=lambda: repeat(base2))
    btx.pack()
    bty = Button(set, text=" CLOSE ", bg="red", command=lambda: destroy(base2))
    bty.pack()

def repeat(base2):
    base2.destroy()
    function()

def destroy(base2):
    base2.destroy()
    base.destroy()

def function():
    global marks, length
    marks = 0
    length = 0
    x1 = slide(color, 5, 560, 45, 575)
    Bt0 = Button(color, text="move right**", bg="pink", command=lambda: x1.push(1))
    Bt0.place(x=335, y=580)
    Bt1 = Button(color, text="**move left ", bg="pink", command=lambda: x1.push(0))
    Bt1.place(x=260, y=580)
    game_play()
    base.mainloop()

if (__name__ == "__main__"):
    function()

Kết quả

Chạy mã trên cho kết quả sau:

Trò chơi bắt bóng bằng Python