栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python实现贪吃蛇100行代码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python实现贪吃蛇100行代码

import copy  # 拷贝
import turtle  # 画板
import tkinter.messagebox as msgbox  # 弹窗提示
from random import randrange  # 取随机数

# 蛇身体
snake = [[0, 0], [0, 10], [0, 20]]
# 方向
aim = [0, 10]
# 食物
food = [-10, 0]


# 方向函数
def changed_dir(x, y):
    # 不能控制反方向  [例:不能让蛇向上时, 控制它向下]
    if aim[0] == x and aim[1] == -y:
        return
    if aim[0] == -x and aim[1] == y:
        return

    # 重新设置方向
    aim[0] = x
    aim[1] = y


# 判读边界条件
def inside(head):
    return -250 < head[0] < 250 and -250 < head[1] < 250


# 绘制方块
def block(x, y, size, color):
    turtle.penup()  # 抬笔
    turtle.goto(x, y)  # 移动到位置
    turtle.pendown()  # 放下笔
    turtle.color(color)  # 设置颜色
    turtle.begin_fill()  # 开始填充
    # 绘制
    for i in range(4):
        turtle.forward(size)
        turtle.left(90)
    turtle.end_fill()  # 结束填充


# 蛇移动
def snake_move():
    # 蛇移动进行拷贝
    head = copy.deepcopy(snake[-1])
    head = [head[0] + aim[0], head[1] + aim[1]]

    # 判读蛇头是否走出边界
    if head in snake or not inside(head):  # 蛇头在蛇身体里或者不在边界中
        print("game over")
        msgbox.showinfo("提示", "游戏结束")
        return

    # 蛇吃食物的情况
    if head == food:
        food[0] = randrange(-15, 15) * 10  # 因为食物被吃了,需要重新通过随机数设置食物位置
        food[1] = randrange(-15, 15) * 10
    else:
        snake.pop(0)  # pop(0)移除list第一个数据 [移除蛇头,主要是让蛇进行移动]
    # 蛇身体移位
    snake.append(head)
    turtle.clear()  # 画盘清空,重新绘制

    # 绘制食物
    block(food[0], food[1], 10, "red")

    # 绘制蛇的身体
    for body in snake:
        block(body[0], body[1], 10, "black")

    turtle.update()  # 画板刷新,让整个画板看起来更流畅
    turtle.ontimer(snake_move, 200)  # 定时运行此函数


if __name__ == '__main__':
    turtle.setup(500, 500)  # 设置画板大小
    turtle.tracer(False)  # 取消绘制动画
    turtle.hideturtle()  # 取消绘制光标

    # 监听按键 主要监听键盘按键
    turtle.listen()
    turtle.onkey(lambda: changed_dir(0, 10), "Up")
    turtle.onkey(lambda: changed_dir(0, -10), "Down")
    turtle.onkey(lambda: changed_dir(-10, 0), "Left")
    turtle.onkey(lambda: changed_dir(10, 0), "Right")

    # 蛇进行移动
    snake_move()
    # 卡住画板
    turtle.done()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号