当前位置:首页 > 娱乐 > 怎么用python做贪吃蛇

怎么用python做贪吃蛇

2026-10-17 05:47:10 [百科] 来源:力不从心网

贪吃蛇的贪吃核心逻辑只有三件事:蛇怎么动、食物怎么出现、贪吃撞了怎么办。贪吃用 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怎么设置目录直接跳转

    excel怎么设置目录直接跳转 Excel里做目录,最烦人的就是做好了却点不动。你辛辛苦苦列了一堆工作表名字,结果点一下,光标只是老老实实停在那个单元格上——页面纹丝不动。那感觉,就像按了电梯按钮却发现电梯坏了。 其实真正常用的跳转 ...[详细]
  • 手游推广联盟官网

    手游推广联盟官网 手游推广联盟官网首页挂着一张巨大的动态数据图,实时刷新着联盟成员的游戏下载量分成曲线。我盯着那条起伏的橙色折线,想起三年前第一次接触这个平台时的场景——当时我的小团队做了一款竖屏跑酷游戏,上线两周日活 ...[详细]
  • sql攻击

    sql攻击 2017年,一家美国征信公司的数据库被人拖走了,1.43亿条包含社保号、驾照信息的记录在暗网上明码标价。事后调查发现,攻击者用的不是什么零日漏洞,而是通过该公司一个面向开发者的网页查询接口,在参数里拼 ...[详细]
  • web3是骗局

    web3是骗局 我2017年买过一只加密猫,花了我0.3个以太坊,当时值两千多块人民币。那只像素小猫在屏幕上眨眼睛,我盯着它看了半小时,突然意识到自己买了一串代码——而且这串代码随时可能因为某个开发团队跑路而变成废数 ...[详细]
  • 渗透测试培训本地

    渗透测试培训本地 本地一家做工业控制系统的公司,上周被勒索病毒打穿了内网。不是黑客多高明,就是有人把U盘插进了控制室的电脑。事后请来的应急团队发现,系统里连最基本的日志审计都没开,更别提什么分段隔离了。这活儿要是让本地 ...[详细]
  • cdn资质办理

    cdn资质办理 工信部官网的办事指南里,CDN资质内容分发网络业务经营许可证)的办理流程写得清清楚楚,但真正跑过一趟的人才知道,那张表格背后藏着多少坑。我见过一家创业公司,技术团队熬了三个月把节点铺到十几个省份,最后 ...[详细]
  • 网站安全漏洞扫描工具

    网站安全漏洞扫描工具 上周三凌晨两点,我盯着屏幕上的红色告警列表,后背发凉。一个不起眼的参数注入漏洞,让攻击者能直接读取数据库里的用户密码哈希——而这家公司三个月前刚通过等保测评。工具报告打印出来有47页,但没人翻到第39 ...[详细]
  • laravel网站

    laravel网站 Laravel 的 `php artisan serve` 敲下去,浏览器弹出默认欢迎页的那一刻,我总有种拆盲盒的快感。但这快感保质期极短,真正让人上瘾的是后面那些“不优雅”的折腾。 路由文件里堆了十 ...[详细]
热点阅读