当前位置: 首页 > news >正文

python 代码设计贪吃蛇

代码:
# -*- codeing = utf-8 -*-
import tkinter as tk
import random
from tkinter import messageboxclass Snake:def __init__(self, master):self.master = masterself.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 * 20y1 = y * 20x2 = x1 + 20y2 = y1 + 20self.canvas.create_rectangle(x1, y1, x2, y2, fill="green")def draw_food(self):# 绘制食物x1 = self.food[0] * 20y1 = self.food[1] * 20x2 = x1 + 20y2 = y1 + 20self.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:breakself.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.keysymif __name__ == "__main__":root = tk.Tk()snake = Snake(root)root.mainloop()

结果图:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python如何查看类的函数
  • C++学习笔记
  • 自动化回复信息工具的开发分享!
  • 报错:pytest: error: argument -m: expected one argument (via addopts config)
  • 100 个网络基础知识普及,看完成半个网络高手!
  • 程序的控制结构——if-else语句(双分支结构)【互三互三】
  • 语言模型演进:从NLP到LLM的跨越之旅
  • 【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希
  • 面向对象进阶基础练习
  • 逆序对——树状数组
  • 爬虫-浏览器自动化
  • OceanBase 配置项系统变量实现及应用详解(1):配置项的定义及使用方法
  • 超级好用的java http请求工具
  • shift 命令学习
  • 数据库客户端自定义驱动和数据源:以 HighGo-瀚高为例子
  • ----------
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • egg(89)--egg之redis的发布和订阅
  • ES6--对象的扩展
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Facebook AccountKit 接入的坑点
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java编程基础24——递归练习
  • java中具有继承关系的类及其对象初始化顺序
  • session共享问题解决方案
  • vue中实现单选
  • 初识MongoDB分片
  • 猴子数据域名防封接口降低小说被封的风险
  • 简单实现一个textarea自适应高度
  • Python 之网络式编程
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​低代码平台的核心价值与优势
  • # include “ “ 和 # include < >两者的区别
  • ###C语言程序设计-----C语言学习(3)#
  • (4) PIVOT 和 UPIVOT 的使用
  • (4.10~4.16)
  • (C++17) std算法之执行策略 execution
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Forward) Music Player: From UI Proposal to Code
  • (Java入门)学生管理系统
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转) RFS+AutoItLibrary测试web对话框
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • 、写入Shellcode到注册表上线
  • ./configure、make、make install 命令
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .naturalWidth 和naturalHeight属性,