当前位置:   article > 正文

python实现贪吃蛇100行代码_python贪吃蛇代码复制

python贪吃蛇代码复制
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()
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/81030
推荐阅读
相关标签
  

闽ICP备14008679号