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采用raw_input读取输入值的方法
Aug 18 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
Python 模拟购物车的实例讲解
Sep 11 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
简单实现python聊天程序
Apr 01 Python
Python列表(List)知识点总结
Feb 18 Python
python图像处理入门(一)
Apr 04 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Django用户身份验证完成示例代码
Apr 03 Python
删除pycharm鼠标右键快捷键打开项目的操作
Jan 16 Python
python获取淘宝服务器时间的代码示例
Apr 22 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
晋城吧对DiscuzX进行的前端优化要点
2010/09/05 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
深入理解es6块级作用域的使用
2019/03/28 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python编程图形库之Pillow使用方法讲解
2018/12/28 Python
如何在Django配置文件里配置session链接
2019/08/06 Python
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
STP协议的主要用途是什么?为什么要用STP
2012/12/20 面试题
Shell如何接收变量输入
2016/08/06 面试题
运动会广播稿300字
2014/01/10 职场文书
周年庆典邀请函范文
2014/01/24 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
青春寄语大全
2014/04/09 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
大学课外活动总结
2014/07/09 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
2015年质检工作总结
2015/05/04 职场文书
活动主持人开场白
2015/05/28 职场文书
网络妈妈观后感
2015/06/08 职场文书
生产实习心得体会范文
2016/01/22 职场文书