python3实现贪吃蛇案例(代码可以直接运行)

先安装下面两个库:
1、pip3 install freegames
2、pip3 install turtle

代码如下:

# -*- encoding: utf-8 -*-
"""
@File: 贪吃蛇.py
@Description: 
"""
from random import randrange  # 导入随机函数
from freegames import vector, square  # 导入向量函数与绘图函数
import turtle  # 导入绘图海龟模块

food = vector(0, 0)  # 食物
snake = [vector(10, 0)]  # 蛇
position = vector(0, -10)  # 移动位置,一步的距离为10


def change(x, y):  # 改变蛇的移动方向
    position.x = x
    position.y = y


def is_inside(head):  # 判断蛇头是否在窗体内
    return -200 < head.x < 190 and -200 < head.y < 190


def move():  # 可以让蛇移动的方法
    head = snake[-1].copy()  # 确定蛇头的位置
    head.move(position)  # 移动一步
    if not is_inside(head) or head in snake:  # 如果蛇的头部位于边界外或者蛇头在蛇的身体中
        square(head.x, head.y, 9, 'red')  # 绘制红色蛇头,说明游戏结束
        turtle.update()  # 更新
        return
    snake.append(head)  # 更新蛇的位置
    if head == food:  # 如果蛇吃到食物
        print('Snake:', len(snake))  # 根据蛇的长度进行加分
        food.x = randrange(-15, 15) * 10  # 随机生成食物x坐标
        food.y = randrange(-15, 15) * 10  # 随机生成食物y坐标
    else:
        snake.pop(0)  # 移除蛇走过的坐标
    turtle.clear()  # 清空蛇走过的位置
    for body in snake:  # 循环遍历蛇的坐标
        square(body.x, body.y, 9, 'black')  # 绘制黑色蛇
    square(food.x, food.y, 9, 'green')  # 绘制绿色食物
    turtle.update()
    turtle.ontimer(move, 100)  # 定时执行move函数


if __name__ == '__main__':  # 程序入口
    turtle.setup(420, 420, 370, 0)  # 创建窗体大小
    turtle.hideturtle()  # 隐藏箭头显示
    turtle.tracer(False)  # 关闭绘画效果
    move()  # 调用让蛇移动的方法
    turtle.listen()  # 事件监听器
    turtle.onkey(lambda: change(10, 0), 'Right')  # 按键盘右键,蛇向右走
    turtle.onkey(lambda: change(-10, 0), 'Left')  # 按键盘左键,蛇向左走
    turtle.onkey(lambda: change(0, 10), 'Up')  # 按键盘上键,蛇向上走
    turtle.onkey(lambda: change(0, -10), 'Down')  # 按键盘下键,蛇向下走
    turtle.done()  # 停止画笔绘制,但绘图窗体不关闭

执行结果如下图:
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值