欢迎访问宙启技术站
智能推送

Python编写一个简单的图形界面游戏

发布时间:2023-12-04 12:56:11

import tkinter as tk

import random

class Game(tk.Frame):

    def __init__(self, master=None):

        super().__init__(master)

        self.master = master

        self.pack()

        self.create_widgets()

        self.canvas_width = 500

        self.canvas_height = 400

        self.ball_radius = 20

        self.ball_color = "red"

        self.score = 0

        self.create_ball()

    def create_widgets(self):

        self.canvas = tk.Canvas(self, width=self.canvas_width, height=self.canvas_height)

        self.canvas.pack()

        self.score_label = tk.Label(self, text="Score: 0")

        self.score_label.pack()

    def create_ball(self):

        x = random.randint(self.ball_radius, self.canvas_width - self.ball_radius)

        y = random.randint(self.ball_radius, self.canvas_height - self.ball_radius)

        self.ball = self.canvas.create_oval(x-self.ball_radius, y-self.ball_radius, x+self.ball_radius, y+self.ball_radius, fill=self.ball_color)

        self.ball_dx = random.randint(-5, 5)

        self.ball_dy = random.randint(-5, 5)

        self.move_ball()

    def move_ball(self):

        self.canvas.move(self.ball, self.ball_dx, self.ball_dy)

        x1, y1, x2, y2 = self.canvas.coords(self.ball)

        if x1 <= 0 or x2 >= self.canvas_width:

            self.ball_dx = -self.ball_dx

        if y1 <= 0 or y2 >= self.canvas_height:

            self.ball_dy = -self.ball_dy

        self.check_collision()

        self.after(10, self.move_ball)

    def check_collision(self):

        x1, y1, x2, y2 = self.canvas.coords(self.ball)

        paddle_coords = self.canvas.coords(self.paddle)

        if x2 >= paddle_coords[0] and x1 <= paddle_coords[2] and y2 >= paddle_coords[1] and y1 <= paddle_coords[3]:

            self.increase_score()

            self.canvas.delete(self.ball)

            self.create_ball()

    def increase_score(self):

        self.score += 1

        self.score_label["text"] = "Score: {}".format(self.score)

    def start_game(self):

        self.paddle = self.canvas.create_rectangle(200, 350, 300, 370, fill="blue")

        self.canvas.bind("<Left>", self.move_left)

        self.canvas.bind("<Right>", self.move_right)

        self.canvas.focus_set()

    def move_left(self, event):

        if self.canvas.coords(self.paddle)[0] > 0:

            self.canvas.move(self.paddle, -10, 0)

    def move_right(self, event):

        if self.canvas.coords(self.paddle)[2] < self.canvas_width:

            self.canvas.move(self.paddle, 10, 0)

root = tk.Tk()

game = Game(master=root)

game.start_game()

game.mainloop()