Python100行-贪吃蛇小游戏
今天来尝试下用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行-贪吃蛇小游戏相关推荐
- python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏
大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...
- python100行代码-怎样写贪吃蛇小游戏?用100行python代码轻松解决!
大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...
- 100行代码,使用 Pygame 制作一个贪吃蛇小游戏!
作者 | 周萝卜 来源 | 萝卜大杂烩 相信我们大家都玩过贪吃蛇游戏,今天我们就从头一起来写一个贪吃蛇小游戏,只需要100多行的代码就完成了. 用到的 Pygame 函数 贪吃蛇小游戏用到的函数 功能 ...
- bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏
来源:DataGo数据狗 链接: https://mp.weixin.qq.com/s/fDcr1SfcbynLzHye7Q7VOg 大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉 ...
- 蘑菇云「行空板Python入门教程」第六课:贪吃蛇小游戏
在很久很久以前,手机屏幕都还是黑白的年代,有一款叫做"贪吃蛇"的游戏风靡了大街小巷,在那分辨率极低的屏幕上,几条扭扭曲曲的弧线似乎穿越了整个童年. 这节课上,就让我们用行空板来实现 ...
- python50行小游戏_50行python代码实现的贪吃蛇小游戏
50行python代码实现的贪吃蛇小游戏 发布于 2014-09-01 21:26:24 | 1337 次阅读 | 评论: 1 | 来源: 网友投递 Python编程语言Python 是一种面向对象. ...
- Golang 控制台百行代码贪吃蛇小游戏
Golang 并不适合在前端工作,缺少强大的图形图像包和硬件加速包,更适合做成后台服务程序.本文的贪吃蛇小游戏运行与控制台上,其中调用了Window系统kernel32.dll中控制台相关的函数. 项 ...
- Python实现贪吃蛇小游戏(双人模式)
这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...
- GUI编程---贪吃蛇小游戏开发
学习链接:狂神说Java–1小时开发贪吃蛇小游戏 ①初识理论 帧:时间片足够小=>就是动画,1秒30帧.连起来是动画,拆开就是静态的图片! 键盘监听 定时器Timer 游戏图片素材:GUI之贪吃 ...
最新文章
- 2021-2027全球与中国奶牛冻精市场现状及未来发展趋势
- poj1410(线段相交问题判断)
- Android中asset文件夹和raw文件夹区别(转载)
- 关于眼界、眼光、眼前的哪些....
- linux c语言 电子相册,纯C语言开发(电子相册).doc
- 设计模式学习笔记--Flyweight享元模式
- html自动计时器,html计时器
- 我的人生观、爱情观和世界观
- 从顶点覆盖(Vertex Cover)到碰撞集(Hitting Set)的归约
- 用支付宝如何自己拍证件照?
- “重塑安全边界,揭秘零信任业务保障”,联软科技下一代零信任访问管理系统发布
- SQL语句按照姓名首字母排序
- php前端计算合计,js统计表格指定列的合计
- 缓存之缓存击穿、缓存穿透和缓存雪崩
- 实战:使用WindowsPE备份和还原系统
- Mysql复习秘籍(燕十八出品)
- TestDirector-缺陷跟踪工具用户使用指南
- 苹果公司传奇-让人匪夷所思的创业奇迹
- IDEA启动项目时报Error:Kotlin: Module was compiled with an incompatible version of Kotlin.
- 币须知道 | V神助攻,ETC创两月来新高;周锦增回应豆币跑路系不实信息
热门文章
- serializeArray()与 serialize()
- Android 主题切换/换肤方案 研究(四) - qq和qq空间
- JAVA COMMON
- Qt Linguist 介绍
- 阿里MySQL 经理_我以为我对Mysql事务很熟,直到我遇到了阿里面试官!
- 使用phpStudy在本地安装墨子系统教程
- ssh 连接报错:Unable to negotiate with 192.168.xx.xx port 22: no matching key exchange method found.
- RTS/CTS机制以及RTS threshold
- Android初体验——运用手机多媒体
- STM32开发实例 基于STM32单片机的智能机房系统