import pygame
import copy
import tkinter.messagebox
from random import randint
屏幕宽度 = 640
屏幕高度 = 480
pygame.init() # 初始化pygame模块
pygame.display.set_caption("贪吃蛇") # 设置窗口标题
屏幕区域 = pygame.display.set_mode((屏幕宽度, 屏幕高度)) # 设置窗口尺寸
计时器 = pygame.time.Clock() # 创建一个计时器
正在运行 = True
累计时间 = 0
# 屏幕左上角是原点 往右x增加 往下y增加
蛇身 = [pygame.Vector2(100, 100), pygame.Vector2(120, 100), pygame.Vector2(140, 100)] # 蛇身
食物 = pygame.Vector2(randint(1, 31) * 20, randint(1, 23) * 20) # 食物位置
当前移动方向 = "right" # 当前移动方向
输入的移动方向 = "right" # 用户输入的移动方向
# 游戏主循环
while 正在运行:
# 处理窗口和按键事件(若有)
# pygame.event保存的是当前发送到游戏窗口的消息列表,用循环依次处理
for i in pygame.event.get():
# 若遇到QUIT事件,则设置running为False,这样游戏主循环就会退出
if i.type == pygame.QUIT:
正在运行 = False
屏幕区域.fill("purple")
# 绘制蛇身
for i in 蛇身:
pygame.draw.circle(屏幕区域, "yellow", i, 10)
# 绘制食物
pygame.draw.circle(屏幕区域, "blue", 食物, 10)
# 接收用户按下的按键方向到输入的移动方向 每过一定时间移动一次
keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
输入的移动方向 = "up"
if keys[pygame.K_DOWN]:
输入的移动方向 = "down"
if keys[pygame.K_LEFT]:
输入的移动方向 = "left"
if keys[pygame.K_RIGHT]:
输入的移动方向 = "right"
# 显示这一帧画面
pygame.display.flip()
# clock.tick(60): 等待1/60秒(渲染速率设置为60帧),并返回上一帧到现在经过的毫秒数。
# 用t累计经过的时间,如果累计了一定时间,就移动蛇身前进一格,并重置累计时间。
累计时间 += 计时器.tick(60)
if 累计时间 > 200:
累计时间 = 0
# 如果going_direction合法,则将direction设置为going_direction并移动,否则不改变direction。
if not (输入的移动方向 == "up" and 当前移动方向 == "down" or
输入的移动方向 == "down" and 当前移动方向 == "up" or
输入的移动方向 == "left" and 当前移动方向 == "right" or
输入的移动方向 == "right" and 当前移动方向 == "left"):
当前移动方向 = 输入的移动方向 # 如果按键的移动方向和之前相反,则此按键不应该生效
# 如何移动:将snake_body列表第一个元素删掉,在列表末尾根据前进方向新增一个元素即可
蛇尾 = 蛇身.pop(0) # 弹出蛇尾
新蛇头 = copy.copy(蛇身[-1]) # 把蛇头复制一份,作为下一个蛇头位置
if 当前移动方向 == "up":
新蛇头.y -= 20
if 当前移动方向 == "down":
新蛇头.y += 20
if 当前移动方向 == "left":
新蛇头.x -= 20
if 当前移动方向 == "right":
新蛇头.x += 20
# 判断是否撞自己,没撞就加到snake_body
for i in 蛇身:
if 新蛇头 == i:
tkinter.messagebox.showinfo("撞自己了", "撞自己了")
正在运行 = False
蛇身.append(新蛇头)
# 判断是否撞墙
if 新蛇头.x < 0 or 新蛇头.y < 0 or 新蛇头.x > 屏幕宽度 or 新蛇头.y > 屏幕高度:
tkinter.messagebox.showinfo("撞墙了", "撞墙了")
正在运行 = False
# 判断是否吃到食物,吃到就保留原来蛇尾并重新生成食物
if 新蛇头 == 食物:
蛇身.insert(0, 蛇尾)
食物 = pygame.Vector2(randint(1, 31) * 20, randint(1, 23) * 20)
pygame.quit() # 关闭pygame模块
没有合适的资源?快使用搜索试试~ 我知道了~
爱心代码python2
共4个文件
txt:3个
py:1个
需积分: 1 0 下载量 182 浏览量
2024-03-09
11:56:06
上传
评论
收藏 5KB RAR 举报
温馨提示
爱心代码python
资源推荐
资源详情
资源评论
收起资源包目录
love-code-master.rar (4个子文件)
love-code-master
love-code-master
Python爱心代码1.py.py 6KB
新建 文本文档.txt 510B
贪吃蛇.txt 4KB
会动的心.txt 4KB
共 4 条
- 1
资源评论
十小大
- 粉丝: 1w+
- 资源: 2556
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功