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 多进程通信模块的简单实现
Feb 20 Python
python小技巧之批量抓取美女图片
Jun 06 Python
python基于pyDes库实现des加密的方法
Apr 29 Python
python2.7到3.x迁移指南
Feb 01 Python
python+opencv实现霍夫变换检测直线
Oct 23 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
python3获取url文件大小示例代码
Sep 18 Python
Python中的list与tuple集合区别解析
Oct 12 Python
python如何停止递归
Sep 09 Python
python编写函数注意事项总结
Mar 29 Python
Python办公自动化PPT批量转换操作
Sep 15 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调用Java对象的方法
2006/10/09 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php中chdir()函数用法实例
2014/11/13 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python中字符串前面加r的作用
2015/06/04 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
Python列表list排列组合操作示例
2018/12/18 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
opencv python如何实现图像二值化
2020/02/03 Python
Python模块 _winreg操作注册表
2020/02/05 Python
哪些是python中web开发框架
2020/06/17 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
毕业生就业自荐书
2013/12/15 职场文书
销售工作岗位职责
2013/12/24 职场文书
医院办公室主任职责
2013/12/29 职场文书
商场中秋节广播稿
2014/01/17 职场文书
大学自主招生推荐信
2014/05/10 职场文书
法定代表人资格证明书
2014/09/11 职场文书
补充协议书
2015/01/28 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
CKAD认证中部署k8s并配置Calico插件
2022/03/31 Servers
maven 解包依赖项中的文件的解决方法
2022/07/15 Java/Android