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程序
Apr 04 Python
python实现文件分组复制到不同目录的例子
Jun 04 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
用pickle存储Python的原生对象方法
Apr 28 Python
python 2.7.14安装图文教程
Apr 08 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
Python 的AES加密与解密实现
Jul 09 Python
python的一些加密方法及python 加密模块
Jul 11 Python
Python的形参和实参使用方式
Dec 24 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 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读取html并截取字符串的简单代码
2009/11/30 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
JS控制表格隔行变色
2006/06/26 Javascript
通过JAVAScript实现页面自适应
2007/01/19 Javascript
js arguments.callee的应用代码
2009/05/07 Javascript
Javascript 汉字字节判断
2009/08/01 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python中的匿名函数使用简介
2015/04/27 Python
Python 基础教程之包和类的用法
2017/02/23 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
Python新手学习标准库模块命名
2020/05/29 Python
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
送货司机岗位职责
2013/12/11 职场文书
测控技术自荐信
2014/06/05 职场文书
酒后驾车标语
2014/06/30 职场文书
房屋租赁协议书
2014/10/18 职场文书
百家讲坛观后感
2015/06/12 职场文书
工作年限证明模板
2015/06/15 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python