自学内容网 自学内容网

python 代码设计贪吃蛇

代码:
# -*- codeing = utf-8 -*-
import tkinter as tk
import random
from tkinter import messagebox

class Snake:
    def __init__(self, master):
        self.master = master
        self.master.title("Snake")

        # 创建画布
        self.canvas = tk.Canvas(self.master, width=400, height=400, bg="white")
        self.canvas.pack()

        # 初始化游戏数据
        self.snake = [(0, 0), (0, 1), (0, 2)]
        self.food = (5, 5)
        self.direction = "Right"
        self.score = 0

        # 绑定键盘事件
        self.master.bind("<Key>", self.on_key_press)

        # 开始游戏
        self.start_game()

    def start_game(self):
        # 绘制贪吃蛇和食物
        self.draw_snake()
        self.draw_food()

        # 更新游戏状态
        self.update_game()

    def draw_snake(self):
        # 清空画布
        self.canvas.delete("all")

        # 绘制贪吃蛇
        for x, y in self.snake:
            x1 = x * 20
            y1 = y * 20
            x2 = x1 + 20
            y2 = y1 + 20
            self.canvas.create_rectangle(x1, y1, x2, y2, fill="green")

    def draw_food(self):
        # 绘制食物
        x1 = self.food[0] * 20
        y1 = self.food[1] * 20
        x2 = x1 + 20
        y2 = y1 + 20
        self.canvas.create_oval(x1, y1, x2, y2, fill="red")

    def update_game(self):
        # 更新贪吃蛇位置
        head_x, head_y = self.snake[-1]
        if self.direction == "Left":
            new_head = (head_x - 1, head_y)
        elif self.direction == "Right":
            new_head = (head_x + 1, head_y)
        elif self.direction == "Up":
            new_head = (head_x, head_y - 1)
        else:
            new_head = (head_x, head_y + 1)
        self.snake.append(new_head)
        del self.snake[0]

        # 检查游戏是否结束
        if new_head[0] < 0 or new_head[0] >= 20 or new_head[1] < 0 or new_head[1] >= 20 or new_head in self.snake[:-1]:
            tk.messagebox.showinfo("Game Over", f"Score: {self.score}")
            return

        # 检查贪吃蛇是否吃掉食物
        if new_head == self.food:
            while True:
                food_x = random.randint(0, 19)
                food_y = random.randint(0, 19)
                if (food_x, food_y) not in self.snake:
                    break
            self.food = (food_x, food_y)
            tail_x, tail_y = self.snake[0]
            if self.direction == "Left":
                new_tail = (tail_x + 1, tail_y)
            elif self.direction == "Right":
                new_tail = (tail_x - 1, tail_y)
            elif self.direction == "Up":
                new_tail = (tail_x, tail_y + 1)
            else:
                new_tail = (tail_x, tail_y - 1)
            self.snake.insert(0, new_tail)
            self.score += 1

        # 绘制贪吃蛇和食物
        self.draw_snake()
        self.draw_food()

        # 定时更新游戏状态
        self.master.after(200, self.update_game)

    def on_key_press(self, event):
        if event.keysym in ["Left", "Right", "Up", "Down"]:
            self.direction = event.keysym

if __name__ == "__main__":
    root = tk.Tk()
    snake = Snake(root)
    root.mainloop()

结果图:


原文地址:https://blog.csdn.net/2302_77382298/article/details/140361693

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!