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类定义的讲解
Nov 01 Python
解密Python中的描述符(descriptor)
Jun 03 Python
python插入排序算法实例分析
Jul 03 Python
Python的地形三维可视化Matplotlib和gdal使用实例
Dec 09 Python
python+opencv轮廓检测代码解析
Jan 05 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python模块zipfile原理及使用方法详解
Aug 04 Python
anaconda python3.8安装后降级
Jun 11 Python
Python 统计序列中元素的出现频度
Apr 26 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
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
2019/10/18 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python 装饰器实现DRY(不重复代码)原则
2018/03/05 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
自荐信格式的六要素
2013/09/21 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
安全资料员岗位职责
2013/12/14 职场文书
大学生志愿者感言
2014/01/15 职场文书
cf战队收人广告词
2014/03/14 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
建国大业电影观后感
2015/06/01 职场文书
欢送领导祝酒词
2015/08/12 职场文书
给领导敬酒词
2015/08/12 职场文书