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字典序问题实例
Sep 26 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
python构建深度神经网络(DNN)
Mar 10 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
Feb 18 Python
深入探讨opencv图像矫正算法实战
May 21 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 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-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
JavaScript定时器使用方法详解
2020/03/26 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
一个超级简单的python web程序
2014/09/11 Python
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
python中reader的next用法
2018/07/24 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
社会实践感言
2014/01/25 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
工地材料员岗位职责
2015/04/11 职场文书
会议新闻稿
2015/07/17 职场文书
2016教师国培研修感言
2015/12/08 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
求职信如何撰写?
2019/05/22 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
在js中修改html body的样式
2021/11/11 Javascript
redis复制有可能碰到的问题汇总
2022/04/03 Redis