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实现端口复用实例代码
Jul 03 Python
基于python的图片修复程序(实现水印去除)
Jun 04 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Python并发之多进程的方法实例代码
Aug 15 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
python使用minimax算法实现五子棋
Jul 29 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
Feb 27 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
PyQT5 实现快捷键复制表格数据的方法示例
Jun 19 Python
使用已经得到的keras模型识别自己手写的数字方式
Jun 29 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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简单隔行变色功能实现代码
2016/07/09 PHP
js压缩利器
2007/02/20 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
js实现二代身份证号码验证详解
2014/11/20 Javascript
JS限制文本框只能输入数字和字母方法
2015/02/28 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
python 判断自定义对象类型
2009/03/21 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
Django实现基于类的分页功能
2019/10/31 Python
python求前n个阶乘的和实例
2020/04/02 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
客户经理岗位职责
2013/12/08 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫