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 正则表达式操作指南
May 04 Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
深入浅析Python字符编码
Nov 12 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
Jul 04 Python
Python 中 list 的各项操作技巧
Apr 13 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
在python中利用KNN实现对iris进行分类的方法
Dec 11 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
详解Django 时间与时区设置问题
Jul 23 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
python中lower函数实现方法及用法讲解
Dec 23 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
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php数组指针操作详解
2017/02/14 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
JS如何把字符串转换成json
2020/02/21 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
python绘制漏斗图步骤详解
2019/03/04 Python
Django中的静态文件管理过程解析
2019/08/01 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
解决python的空格和tab混淆而报错的问题
2021/02/26 Python
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
预备党员政审材料
2014/02/04 职场文书
渡河少年教学反思
2014/02/12 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
2019个人半年工作总结
2019/06/21 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python