50行代码实现贪吃蛇(具体思路及代码)

 更新时间:2013年04月27日 14:54:28   作者:  
在50行代码内来实现一个贪吃蛇,具体实现代码如下,感兴趣的朋友可以参考下哈,希望可以帮助到你
最近一直在准备用来面试的几个小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>

游戏截图:

说明:
1.其实不用pygame,在把一些条件判断改改,估计可以再短一半。。等以后自己python水平高了再回来试试。。
2.但是50行的贪吃蛇代码,还是有可读性的,写的太短就真没有了。。
3.关键是把旋转,移动,等等这些算法用lamda表达式实现,还有函数对象。。
4.哪位“行者”能写的更短,小弟愿意赐教....
作者:aiqier

相关文章

  • python3 xpath和requests应用详解

    python3 xpath和requests应用详解

    这篇文章主要介绍了python3 xpath和requests应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python爬虫进阶Scrapy框架精文讲解

    Python爬虫进阶Scrapy框架精文讲解

    这篇文章主要为大家介绍了Python爬虫进阶中Scrapy框架精细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • Python学习之异常断言详解

    Python学习之异常断言详解

    这篇文章主要和大家介绍一下异常的最后一个知识点——断言 ,断言是判断一个表达式,在表达式为 False 的时候触发异常。本文将通过示例详细介绍一下断言,需要的可以参考一下
    2022-03-03
  • 如何利用Python拟合函数曲线详解

    如何利用Python拟合函数曲线详解

    在实际项目中,往往有这样的需求:对采集到的数据进行数据处理(曲线拟合),再计算出一些想要的参数,比如峰值/dip值/周期等等,下面这篇文章主要给大家介绍了关于如何利用Python拟合函数曲线的相关资料,需要的朋友可以参考下
    2022-04-04
  • Python 中如何使用 virtualenv 管理虚拟环境

    Python 中如何使用 virtualenv 管理虚拟环境

    这篇文章主要介绍了Python 中使用 virtualenv 管理虚拟环境的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • django 使用 PIL 压缩图片的例子

    django 使用 PIL 压缩图片的例子

    今天小编就为大家分享一篇django 使用 PIL 压缩图片的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python 批量添加的button 使用同一点击事件的方法

    python 批量添加的button 使用同一点击事件的方法

    今天小编就为大家分享一篇python 批量添加的button 使用同一点击事件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python2实现的图片文本识别功能详解

    Python2实现的图片文本识别功能详解

    这篇文章主要介绍了Python2实现的图片文本识别功能,结合实例形式分析了Python pytesser库的安装及使用pytesser库识别图片文字相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Django关于admin的使用技巧和知识点

    Django关于admin的使用技巧和知识点

    在本篇文章里小编给大家整理的是关于Django的admin简单使用的相关知识点内容,需要的朋友们可以跟着学习下。
    2020-02-02
  • Python中Iterator迭代器的使用杂谈

    Python中Iterator迭代器的使用杂谈

    Python中的迭代器意义不仅是在iter函数上的运用,更是一种处理可迭代对象的迭代器模式,这里我们来简单聊聊Python中Iterator迭代器的使用杂谈:
    2016-06-06

最新评论