python用海龟绘图写贪吃蛇游戏


Posted in Python onJune 18, 2021

一个简单的贪吃蛇程序,供大家参考,具体内容如下

如图显示

python用海龟绘图写贪吃蛇游戏

导入海龟绘图库

from turtle import *
from random import randrange

常量设置

food_x = randrange(-20, 20) * 20
food_y = randrange(-20, 20) * 20
snack = [[0, 0], [20, 0], [40, 0], [40, 20]]
dir_x = 20
dir_y = 0

主函数

if __name__ == '__main__':
    # 设置主窗口的大小和位置
    # width,height,startx,starty(初始位置距离屏幕左边和右边多少,默认中间)
    setup(800, 800)
    # 禁用海龟动画
    tracer(False)
    loop_view()
    listen()
    onkey(lambda: control(0, 20), "w")
    onkey(lambda: control(0, -20), "s")
    onkey(lambda: control(-20, 0), "a")
    onkey(lambda: control(20, 0), "d")
    # 开始事件循环
    # 调用 Tkinter 的 mainloop 函数
    # 必须作为一个海龟绘图程序的结束语句
    done()

画正方形

def draw_square(x, y, size, color_name):
    '''
    画正方形
    :param x 表示在画布的x位置
    :param y 表示画布的y位置
    :param size 表示正方形的长度
    :param color_name 表示正方形的颜色
    :return
    '''

    # 画笔抬起,移动的时候不画线
    up()
    # 是海龟不可见
    ht()
    # 将海龟移动到这个位置
    goto(x, y)

    # 画笔落下 -- 移动时将画线
    down()
    color("red", color_name)
    begin_fill()
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    end_fill()

    pass

在画布上画食物和蛇

def loop_view():
    '''
    循环界面
    '''
    global food_x, food_y
    if not is_zhangqiang():
        return

    snack.append([snack[-1][0] + dir_x, snack[-1][1] + dir_y])
    if snack[-1][0] != food_x or snack[-1][1] != food_y:
        snack.pop(0)
    else:
        food_x = randrange(-20, 20) * 20
        food_y = randrange(-20, 20) * 20
    clear()
    # 画食物
    draw_square(food_x, food_y, 20, "red")
    # 画蛇
    for s in range(len(snack)):
        if s == len(snack) - 1:
            draw_square(snack[s][0], snack[s][1], 20, "yellow")
            continue
        draw_square(snack[s][0], snack[s][1], 20, "black")



    ontimer(loop_view, 100)
    # 执行一次 TurtleScreen 刷新。在禁用追踪时使用
    update()

控制方向

def control(x,y):
    global dir_x, dir_y
    dir_x = x
    dir_y = y

碰撞检测

def is_zhangqiang():
    if -400 <= snack[-1][0] <= 380 and -400 <= snack[-1][1] <= 380:
        return True
    else:
        return False

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用Python解决计数原理问题的方法
Aug 04 Python
获取Django项目的全部url方法详解
Oct 26 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python列表元素常见操作简单示例
Oct 25 Python
Python正则表达式急速入门(小结)
Dec 16 Python
如何真正的了解python装饰器
Aug 14 Python
python实现自动清理重复文件
Aug 24 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Python如何使用神经网络进行简单文本分类
Feb 25 Python
Python图片处理之图片裁剪教程
May 27 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 #Python
Python turtle实现贪吃蛇游戏
python中%格式表达式实例用法
Jun 18 #Python
如何用python清洗文件中的数据
Jun 18 #Python
Python中glob库实现文件名的匹配
python中的装饰器该如何使用
Jun 18 #Python
Python预测分词的实现
You might like
模仿OSO的论坛(二)
2006/10/09 PHP
PHP中return 和 exit 、break和contiue 区别与用法
2012/04/09 PHP
PHP输出日历表代码实例
2015/03/27 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
在模板页面的js使用办法
2010/04/01 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
环境工程求职简历的自我评价范文
2013/10/24 职场文书
团员个人的自我评价
2013/12/02 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
实习生岗位职责
2014/04/12 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
求职自我评价参考范文
2019/05/16 职场文书
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python