python贪吃蛇程序_Python 实现 贪吃蛇大作战 代码分享

201609070846251.jpg

感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核。媒体们除了之前竞相追捧《Pokemon Go》热闹了一把,似乎也听不到什么声音了。直到最近几天,突然听见好几人都提到同一个游戏,网上还有人表示朋友圈被它刷屏了。(不过现在微信已经悍然屏蔽了它的分享)

这个游戏就是现在iOS免费榜排名第一的《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了。反正一款游戏火了,各路媒体、专家总能说出种种套路来,所以我就不发表意见了。不过这实在是一个挺好实现的游戏,于是一时技痒,拿 Python 做了一个实现。

【动图】

201609070846252.gif

demo 花了大约一整天时间,实现了基本效果(没做加速)。代码已上传 GitHub:

GitHub - crossin/gluttonous: game of gluttonous python(仿制《贪吃蛇大作战》)

使用了 cocos2d-python 作为游戏引擎。如果要运行代码,需要安装 Python 2.7 和 cocos2d 库。

pip install cocos2d

代码实现上的几个难点:

运动方向的控制。键盘上只有上下左右四个键,要转换到 360 度的运动方向,需要用到不少三角函数运算。

蛇身子的处理。这里我用了一个路径列表,记录蛇头经过的位置,身子则根据路径中的对应数据更新位置。

电脑的运动策略。这里我用的方法是,对于在头部范围内的其他蛇身,计算蛇身与蛇头连线的角度,和自身的运动方向进行比较,如果角度相差很小,就意味着会撞上,于是调整当前运动方向。

运行效率。最大的效率瓶颈在于屏幕上的图片绘制。最开始完成的版本,场上蛇身总量达到 300 左右就卡顿严重了。后来用 cocos 的 BatchNode 替代直接添加,大大减少了图片绘制次数,可保证游戏顺畅运行。但如果玩到分钟很高,依然会出现效率问题,暂时没有解决。

平心而论,Python 并不适合做商业游戏,而用来学习或者开发原型倒也是个不错的选择。现在很流行的手机游戏开发引擎 cocos2d-x,最初就是源于 Python 的版本,也就我这次使用的 cocos2d 库。虽然在功能上有一定差距,但引擎结构是非常接近的,包括其中场景和层的概念、动作、事件、刷新等。

只是心血来潮,随手写写,代码没怎么优化,注释也基本没有。大家凑合看看。如果点赞、转发的人多,之后会考虑继续优化,并专门做一个系列教程。

本文标题: Python 实现 贪吃蛇大作战 代码分享

本文地址: http://www.cppcns.com/jiaoben/python/162870.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Python贪吃蛇游戏的代码实现: ```python import pygame import random # 初始化游戏 pygame.init() # 定义颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) GREEN = (0, 255, 0) RED = (255, 0, 0) # 设置屏幕尺寸 screen_width = 640 screen_height = 480 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("贪吃蛇游戏") # 定义蛇的初始位置和速度 snake_pos = [[100, 50], [90, 50], [80, 50]] snake_speed = [10, 0] # 定义食物的初始位置 food_pos = [random.randrange(1, (screen_width//10)) * 10, random.randrange(1, (screen_height//10)) * 10] food_spawn = True # 初始化计分 score = 0 # 游戏主循环 game_over = False clock = pygame.time.Clock() while not game_over: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True # 检测按键操作 keys = pygame.key.get_pressed() for key in keys: if keys[pygame.K_LEFT]: snake_speed = [-10, 0] if keys[pygame.K_RIGHT]: snake_speed = [10, 0] if keys[pygame.K_UP]: snake_speed = [0, -10] if keys[pygame.K_DOWN]: snake_speed = [0, 10] # 移动蛇的头部 snake_pos[0][0] += snake_speed[0] snake_pos[0][1] += snake_speed[1] # 检测蛇与食物的碰撞 if snake_pos[0][0] == food_pos[0] and snake_pos[0][1] == food_pos[1]: score += 1 food_spawn = False else: snake_pos.pop() # 重新生成食物 if not food_spawn: food_pos = [random.randrange(1, (screen_width // 10)) * 10, random.randrange(1, (screen_height // 10)) * 10] food_spawn = True # 绘制屏幕 screen.fill(BLACK) for pos in snake_pos: pygame.draw.rect(screen, GREEN, pygame.Rect( pos[0], pos[1], 10, 10)) pygame.draw.rect(screen, RED, pygame.Rect( food_pos[0], food_pos[1], 10, 10)) # 游戏结束判断 if snake_pos[0][0] < 0 or snake_pos[0][0] > screen_width-10: game_over = True if snake_pos[0][1] < 0 or snake_pos[0][1] > screen_height-10: game_over = True for block in snake_pos[1:]: if snake_pos[0][0] == block[0] and snake_pos[0][1] == block[1]: game_over = True pygame.display.update() # 控制游戏速度 clock.tick(30) # 退出游戏 pygame.quit() ``` 以上就是一个简单的Python贪吃蛇游戏的代码实现。你可以将代码复制到Python环境中运行,即可开始游戏。祝你玩得开心!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值