50行代码实现贪吃蛇(具体思路及代码)


Posted in Python onApril 27, 2013

最近一直在准备用来面试的几个小demo,为了能展现自己,所以都是亲自设计并实现的,其中一个就是在50行代码内来实现一个贪吃蛇,为了说明鄙人自己练习编程的一种方式--把代码写短,为了理解语言细节。

<SPAN style="FONT-SIZE: 14px">import sys, pygame 
from pygame.locals import * 
from random import randrange 
up =lambda x:(x[0]-1,x[1]) 
down = lambda x :(x[0]+1,x[1]) 
left = lambda x : (x[0],x[1]-1) 
right = lambda x : (x[0],x[1]+1) 
tl = lambda x :x<3 and x+1 or 0 
tr = lambda x :x==0 and 3 or x-1 
dire = [up,left,down,right] 
move = lambda x,y:[y(x[0])]+x[:-1] 
grow = lambda x,y:[y(x[0])]+x 
s = [(5,5),(5,6),(5,7)] 
d = up 
food = randrange(0,30),randrange(0,40) 
FPSCLOCK=pygame.time.Clock() 
pygame.init() 
pygame.display.set_mode((800,600)) 
pygame.mouse.set_visible(0) 
screen = pygame.display.get_surface() 
screen.fill((0,0,0)) 
times=0.0 
while True: 
time_passed = FPSCLOCK.tick(30) 
if times>=150: 
times =0.0 
s = move(s,d) 
else: 
times +=time_passed 
for event in pygame.event.get(): 
if event.type == QUIT: 
sys.exit() 
if event.type == KEYDOWN and event.key == K_UP: 
s = move(s,d) 
if event.type == KEYDOWN and event.key == K_LEFT: 
d=dire[tl(dire.index(d))] 
if event.type == KEYDOWN and event.key == K_RIGHT: 
d=dire[tr(dire.index(d))] 
if s[0]==food: 
s = grow(s,d) 
food =randrange(0,30),randrange(0,40) 
if s[0] in s[1:] or s[0][0]<0 or s[0][0] >= 30 or s[0][1]<0 or s[0][1]>=40: 
break 
screen.fill((0,0,0)) 
for r,c in s: 
pygame.draw.rect(screen,(255,0,0),(c*20,r*20,20,20)) 
pygame.draw.rect(screen,(0,255,0),(food[1]*20,food[0]*20,20,20)) 
pygame.display.update()</SPAN>

游戏截图:
50行代码实现贪吃蛇(具体思路及代码)
说明:
1.其实不用pygame,在把一些条件判断改改,估计可以再短一半。。等以后自己python水平高了再回来试试。。
2.但是50行的贪吃蛇代码,还是有可读性的,写的太短就真没有了。。
3.关键是把旋转,移动,等等这些算法用lamda表达式实现,还有函数对象。。
4.哪位“行者”能写的更短,小弟愿意赐教....
作者:aiqier
Python 相关文章推荐
在Python中操作时间之tzset()方法的使用教程
May 22 Python
Python 3.7新功能之dataclass装饰器详解
Apr 21 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
python3.x实现base64加密和解密
Mar 28 Python
python自动发微信监控报警
Sep 06 Python
Django更新models数据库结构步骤
Apr 01 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
Apr 20 Python
python安装读取grib库总结(推荐)
Jun 24 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
Python3压缩和解压缩实现代码
Mar 01 Python
python常见的占位符总结及用法
Jul 02 Python
Python的lambda匿名函数的简单介绍
Apr 25 #Python
python批量下载图片的三种方法
Apr 22 #Python
如何运行Python程序的方法
Apr 21 #Python
python读取注册表中值的方法
Apr 08 #Python
重命名批处理python脚本
Apr 05 #Python
Python编写的com组件发生R6034错误的原因与解决办法
Apr 01 #Python
Python中用Ctrl+C终止多线程程序的问题解决
Mar 30 #Python
You might like
PHP开发过程中常用函数收藏
2009/12/14 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python实现基于权重的随机数2种方法
2015/04/28 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python实时监控logstash日志代码
2020/04/27 Python
python使用smtplib模块发送邮件
2020/12/17 Python
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
Linux机考试题
2015/07/17 面试题
园林技术个人的自我评价
2014/02/15 职场文书
高中学生干部学习的自我评价
2014/02/21 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
乳制品整治工作方案
2014/05/29 职场文书
应届生求职自荐信
2014/07/04 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书