怎么用python做贪吃蛇
贪吃蛇的贪吃核心逻辑只有三件事:蛇怎么动、食物怎么出现、贪吃撞了怎么办。贪吃用 Python 写它,贪吃最省事的贪吃路径是 pygame,装一个库就能把这三件事全塞进一个 while 循环里。贪吃别急着写图形界面,贪吃先把蛇当成一串坐标点,贪吃脑子会清楚很多。贪吃
我习惯用列表存蛇身,贪吃snake = [(5,贪吃5), (4,5), (3,5)],索引 0 是贪吃蛇头。每次移动就是贪吃往列表头部插一个新坐标,再把尾巴删掉——如果没吃到食物的贪吃话。吃到食物就只插不删,贪吃蛇自然变长。这个思路比操作像素简单得多。
import pygame, random, sys pygame.init() cell = 20 cols, rows = 30, 20 screen = pygame.display.set_mode((cols*cell, rows*cell)) clock = pygame.time.Clock() snake = [(5,5), (4,5), (3,5)] direction = (1, 0) food = (10, 10) def spawn_food(): while True: pos = (random.randint(0, cols-1), random.randint(0, rows-1)) if pos not in snake: return pos 方向控制有个坑:不能直接反向。蛇往右走的时候按左键,如果立刻改方向,蛇头会撞上自己的脖子。所以得存一个“待生效方向”,等下一帧再真正切换。
next_dir = direction for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit(); sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP and direction != (0,1): next_dir = (0,-1) elif event.key == pygame.K_DOWN and direction != (0,-1): next_dir = (0,1) elif event.key == pygame.K_LEFT and direction != (1,0): next_dir = (-1,0) elif event.key == pygame.K_RIGHT and direction != (-1,0): next_dir = (1,0) direction = next_dir 主循环里先算新蛇头,再判断边界和自撞。边界处理我偏向“撞墙即死”,比穿墙更有紧张感。自撞判断用 new_head in snake[:-1],排除掉当前尾巴,因为尾巴这一帧会移走。
head = (snake[0][0] + direction[0], snake[0][1] + direction[1]) if (head[0] < 0 or head[0] >= cols or head[1] < 0 or head[1] >= rows or head in snake[:-1]): pygame.quit(); sys.exit() snake.insert(0, head) if head == food: food = spawn_food() else: snake.pop() 绘制部分没什么好说的,清屏、画食物、遍历蛇身画方块。给蛇头换个颜色,视觉上更容易分辨。速度用 clock.tick(10) 控制,数字越大蛇跑得越快,10 到 15 之间手感比较合适。
screen.fill((30,30,30)) pygame.draw.rect(screen, (200,60,60), (food[0]*cell, food[1]*cell, cell, cell)) for i, seg in enumerate(snake): color = (80,220,120) if i == 0 else (60,180,100) pygame.draw.rect(screen, color, (seg[0]*cell, seg[1]*cell, cell, cell)) pygame.display.flip() clock.tick(12) 跑起来之后你会发现一个细节:食物可能刷在蛇身上,所以 spawn_food 里那个 while 循环不能省。另外蛇快速连按两个方向键时,next_dir 可能被覆盖两次,导致一帧内转了两次弯。严格来说应该用队列存方向,但休闲玩的话单变量也够用。
整个程序不到 60 行。真正花时间的地方是调手感——速度、格子大小、颜色。pygame 的 Rect 画方块比用图片资源省事,像素风反而更对味。想加分数就在吃到食物时累加一个变量,用 pygame.font 渲染到左上角,十分钟的事。
(责任编辑:知识)
-
小冰数字人官网打开的一瞬间,最先撞进眼睛的不是花哨的3D特效,而是一句极简的slogan——“创造有温度的AI”。这句话放在一个数字人产品页上,有种奇异的反差感。毕竟,大多数科技公司恨不得把“元宇宙”
...[详细]
-
你手机通讯录里存了五百个联系人,但真到过年群发祝福时,你绝不会挨个翻名字。你打开微信,搜索"客户",勾选标签,一键发送。这个"标签"功能,就是数据库的雏形——把杂乱的信息按规则归类,需要时精准调取。
...[详细]
-
Excel里做目录,最烦人的就是做好了却点不动。你辛辛苦苦列了一堆工作表名字,结果点一下,光标只是老老实实停在那个单元格上——页面纹丝不动。那感觉,就像按了电梯按钮却发现电梯坏了。 其实真正常用的跳转
...[详细]
-
手游推广联盟官网首页挂着一张巨大的动态数据图,实时刷新着联盟成员的游戏下载量分成曲线。我盯着那条起伏的橙色折线,想起三年前第一次接触这个平台时的场景——当时我的小团队做了一款竖屏跑酷游戏,上线两周日活
...[详细]
-
2017年,一家美国征信公司的数据库被人拖走了,1.43亿条包含社保号、驾照信息的记录在暗网上明码标价。事后调查发现,攻击者用的不是什么零日漏洞,而是通过该公司一个面向开发者的网页查询接口,在参数里拼
...[详细]
-
我2017年买过一只加密猫,花了我0.3个以太坊,当时值两千多块人民币。那只像素小猫在屏幕上眨眼睛,我盯着它看了半小时,突然意识到自己买了一串代码——而且这串代码随时可能因为某个开发团队跑路而变成废数
...[详细]
-
本地一家做工业控制系统的公司,上周被勒索病毒打穿了内网。不是黑客多高明,就是有人把U盘插进了控制室的电脑。事后请来的应急团队发现,系统里连最基本的日志审计都没开,更别提什么分段隔离了。这活儿要是让本地
...[详细]
-
工信部官网的办事指南里,CDN资质内容分发网络业务经营许可证)的办理流程写得清清楚楚,但真正跑过一趟的人才知道,那张表格背后藏着多少坑。我见过一家创业公司,技术团队熬了三个月把节点铺到十几个省份,最后
...[详细]
-
上周三凌晨两点,我盯着屏幕上的红色告警列表,后背发凉。一个不起眼的参数注入漏洞,让攻击者能直接读取数据库里的用户密码哈希——而这家公司三个月前刚通过等保测评。工具报告打印出来有47页,但没人翻到第39
...[详细]
-
Laravel 的 `php artisan serve` 敲下去,浏览器弹出默认欢迎页的那一刻,我总有种拆盲盒的快感。但这快感保质期极短,真正让人上瘾的是后面那些“不优雅”的折腾。 路由文件里堆了十
...[详细]

判断网站
俄乌战争最新视频实拍
电影票网络代售平台资质
传智播客教育平台
学校教务处工作职责
