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 07 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
python3正则提取字符串里的中文实例
Jan 31 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
Feb 13 Python
Python实现生成密码字典的方法示例
Sep 02 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Django Auth用户认证组件实现代码
Oct 13 Python
用 python 进行微信好友信息分析
Nov 28 Python
pandas针对excel处理的实现
Jan 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数据流应用的简单例子
2012/06/01 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python迭代器的使用方法实例
2013/11/21 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
基于python实现操作git过程代码解析
2020/07/27 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
HTML5 本地存储实现购物车功能
2017/09/07 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
社区党总支书记先进事迹材料
2014/01/24 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
班主任班级寄语大全
2014/04/04 职场文书
大学自主招生推荐信
2014/05/10 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
戒赌保证书
2015/05/11 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
MySQL插入数据与查询数据
2022/03/25 MySQL
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js