今天来尝试下用python写一个贪吃小游戏,哈哈哈哈,毕竟贪吃蛇,大家小时候都玩过,但现在却有机会自己实现一个!!!

效果图

绘制蛇

1.如何画turtle画一个正方形?

其实就是一个点,往右,往下,往左,往上,回到原点…

# 坐标,长度,颜色名称
def square(x, y, size, color):import turtleturtle.up()turtle.goto(x, y)turtle.down()turtle.color(color)turtle.begin_fill()for count in range(4):turtle.forward(size)turtle.left(90)turtle.end_fill()

然后我们就可以画出一个正方啦。

2.画出多个连续的正方形,来模拟蛇的身子。

蛇的身子其实就是一个一个方块列表,所以我们来尝试画多个方块。

snake = [[0,0],[0,10]]
for body in snake:  square(body[0], body[1], 10, 'black')

移动蛇

1. 移动方向

蛇需要可以朝四个方向移动。

x,y代表坐标

  • (10,0):代表向右移动
  • (-10,0):代表想左移动
  • (0,10):代表向上移动
  • (0,-10):代表向下移动
aim = [0, 10]
# 设置方向
def change_direction(x, y):aim[0] = xaim[1] = y

2. 移动逻辑

有了移动方向,我们就可以开始写移动的逻辑啦

思路是这样的:我们把列表看成一条蛇,这条蛇的右边在右边,尾部在左边!

  • 移动时,我们消除尾部的一个方块。
  • 根据方向,在头部添加一个方块。
  • 然后在刷新动画。
  • 就可以完成蛇移动的效果啦。

下面是代码

import copy
def snake_move():# 获取蛇头head = [snake[-1][0],snake[-1][1]]# 最后一个加方向head = [head[0] + aim[0], head[1] + aim[1]]# 加过后还在蛇里面,不在画布里面snake.append(head) # 蛇的头部添加这个新的方块snake.pop(0) # 蛇的尾部,去除一个方块turtle.clear()# 清除方块# 重新画一遍蛇的整个身子for body in snake:square(body[0], body[1], 10, 'black')turtle.update()# 更新动画turtle.ontimer(snake_move, 300)
turtle.hideturtle()
turtle.tracer(False)

3. 移动蛇

现在蛇就可以移动啦,但是我们还不能控制它的方向!

我们来监听键盘的按键,用上下左右来控制蛇的移动!

turtle.listen()
turtle.onkey(lambda: change_direction(10, 0), "Right")
# 右
turtle.onkey(lambda: change_direction(-10, 0), "Left")
# 左
turtle.onkey(lambda: change_direction(0, 10), "Up")
# 上
turtle.onkey(lambda: change_direction(0, -10), "Down")
# 下

食物

设置随机产生食物

首先一个食物被吃掉时,我们就在一个指定的区间里,随机产生食物。

 # 如果蛇头吃到了食物,我们就不删除蛇的尾巴最后一个方块
if head == food: print("snake的长度", len(snake))food[0] = randrange(-15, 15)*10 # 设置食物的区间,必须是10的倍数food[1] = randrange(-15, 15)*10
else:snake.pop(0)  # 蛇的尾部,去除一个方块

边界

设置边界条件

当蛇碰到自己或者当蛇碰到边界的时候,我们就算输啦!!

# 先给屏幕设定一个初始值500*500
turtle.setup(500, 500)
# 设置边界条件判断
def inside(head):return -250 < head[0] < 250 and -250 < head[1] < 250
# 在蛇移动的过程中进行判断,如果发生碰撞我们就把头部标记为红色,结束游戏。if head in snake or not inside(head):print(head)square(head[0], head[1], 10, 'red')turtle.update()

全部完整代码

import turtle
from random import randrangesnake = [[0, 0]]
aim = [0, 10]
food = [-10, 0]def change_direction(x, y):aim[0] = xaim[1] = ydef sqaure(x, y, size, color):turtle.penup()turtle.goto(x, y)turtle.pendown()turtle.begin_fill()turtle.color(color)for i in range(4):turtle.forward(size)turtle.left(90)turtle.end_fill()import copydef inside(head):return -250<head[0]<250 and -250 <head[1] <250def snake_move():#head = snake[-1][:]# 获取蛇头head = [snake[-1][0],snake[-1][1]]# 最后一个加方向head = [head[0] + aim[0], head[1] + aim[1]]# 加过后还在蛇里面,不在画布里面if head in snake or not inside(head):# 红色sqaure(head[0],head[1],10,'red')turtle.update()returnif head == food:# 遇到食物print("snake", len(snake))food[0] = randrange(-15, 15) * 10food[1] = randrange(-15, 15) * 10else:snake.pop(0)# 删除蛇尾snake.append(head)turtle.clear()sqaure(food[0], food[1], 10, "green")for body in snake:sqaure(body[0], body[1], 10, "black")turtle.update()turtle.ontimer(snake_move, 300)turtle.setup(500,500)
turtle.hideturtle()
turtle.listen()
turtle.onkey(lambda: change_direction(0, 10), "Up")
turtle.onkey(lambda: change_direction(0, -10), "Down")
turtle.onkey(lambda: change_direction(-10, 0), "Left")
turtle.onkey(lambda: change_direction(10, 0), "Right")
turtle.tracer(False)
snake_move()
turtle.done()

结尾

这样我们就我完成了一个简单的贪吃蛇的游戏啦,我们还可以调成速度,记录分数,还有更多的功能,大家可以自行添加。

视频教程

参考

黄九九 https://zhuanlan.zhihu.com/p/102504395

Python100行-贪吃蛇小游戏相关推荐

  1. python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  2. python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  3. 100行代码,使用 Pygame 制作一个贪吃蛇小游戏!

    作者 | 周萝卜 来源 | 萝卜大杂烩 相信我们大家都玩过贪吃蛇游戏,今天我们就从头一起来写一个贪吃蛇小游戏,只需要100多行的代码就完成了. 用到的 Pygame 函数 贪吃蛇小游戏用到的函数 功能 ...

  4. bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏

    来源:DataGo数据狗   链接: https://mp.weixin.qq.com/s/fDcr1SfcbynLzHye7Q7VOg 大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉 ...

  5. 蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏

    在很久很久以前,手机屏幕都还是黑白的年代,有一款叫做"贪吃蛇"的游戏风靡了大街小巷,在那分辨率极低的屏幕上,几条扭扭曲曲的弧线似乎穿越了整个童年. 这节课上,就让我们用行空板来实现 ...

  6. python50行小游戏_50行python代码实现的贪吃蛇小游戏

    50行python代码实现的贪吃蛇小游戏 发布于 2014-09-01 21:26:24 | 1337 次阅读 | 评论: 1 | 来源: 网友投递 Python编程语言Python 是一种面向对象. ...

  7. Golang 控制台百行代码贪吃蛇小游戏

    Golang 并不适合在前端工作,缺少强大的图形图像包和硬件加速包,更适合做成后台服务程序.本文的贪吃蛇小游戏运行与控制台上,其中调用了Window系统kernel32.dll中控制台相关的函数. 项 ...

  8. Python实现贪吃蛇小游戏(双人模式)

    这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...

  9. GUI编程---贪吃蛇小游戏开发

    学习链接:狂神说Java–1小时开发贪吃蛇小游戏 ①初识理论 帧:时间片足够小=>就是动画,1秒30帧.连起来是动画,拆开就是静态的图片! 键盘监听 定时器Timer 游戏图片素材:GUI之贪吃 ...

最新文章

  1. 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
  2. poj1410(线段相交问题判断)
  3. Android中asset文件夹和raw文件夹区别(转载)
  4. 关于眼界、眼光、眼前的哪些....
  5. linux c语言 电子相册,纯C语言开发(电子相册).doc
  6. 设计模式学习笔记--Flyweight享元模式
  7. html自动计时器,html计时器
  8. 我的人生观、爱情观和世界观
  9. 从顶点覆盖(Vertex Cover)到碰撞集(Hitting Set)的归约
  10. 用支付宝如何自己拍证件照?
  11. “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布
  12. SQL语句按照姓名首字母排序
  13. php前端计算合计,js统计表格指定列的合计
  14. 缓存之缓存击穿、缓存穿透和缓存雪崩
  15. 实战:使用WindowsPE备份和还原系统
  16. Mysql复习秘籍(燕十八出品)
  17. TestDirector-缺陷跟踪工具用户使用指南
  18. 苹果公司传奇-让人匪夷所思的创业奇迹
  19. IDEA启动项目时报Error:Kotlin: Module was compiled with an incompatible version of Kotlin.
  20. 币须知道 | V神助攻,ETC创两月来新高;周锦增回应豆币跑路系不实信息

热门文章

  1. serializeArray()与 serialize()
  2. Android 主题切换/换肤方案 研究(四) - qq和qq空间
  3. JAVA COMMON
  4. Qt Linguist 介绍
  5. 阿里MySQL 经理_我以为我对Mysql事务很熟,直到我遇到了阿里面试官!
  6. 使用phpStudy在本地安装墨子系统教程
  7. ssh 连接报错:Unable to negotiate with 192.168.xx.xx port 22: no matching key exchange method found.
  8. RTS/CTS机制以及RTS threshold
  9. Android初体验——运用手机多媒体
  10. STM32开发实例 基于STM32单片机的智能机房系统