开发工具

Python版本: 3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

贪吃蛇的游戏规则应该不需要我多做介绍了吧T_T。写个贪吃蛇游戏其实还是很简单的。首先,我们进行一下游戏初始化:

pygame.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('Greedy Snake —— 微信公众号:Charles的皮卡丘')
clock = pygame.time.Clock()
复制代码

然后定义一个贪吃蛇类:

'''贪吃蛇类'''
class Snake(pygame.sprite.Sprite):def __init__(self, cfg, **kwargs):pygame.sprite.Sprite.__init__(self)self.cfg = cfgself.head_coord = [random.randint(5, cfg.GAME_MATRIX_SIZE[0]-6), random.randint(5, cfg.GAME_MATRIX_SIZE[1]-6)]self.tail_coords = []for i in range(1, 3):self.tail_coords.append([self.head_coord[0]-i, self.head_coord[1]])self.direction = 'right'self.head_colors = [(0, 80, 255), (0, 255, 255)]self.tail_colors = [(0, 155, 0), (0, 255, 0)]
复制代码

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过↑↓←→键来控制贪吃蛇的行动:

# --按键检测
for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()elif event.type == pygame.KEYDOWN:if event.key in [pygame.K_UP, pygame.K_DOWN, pygame.K_LEFT, pygame.K_RIGHT]:snake.setDirection({pygame.K_UP: 'up', pygame.K_DOWN: 'down', pygame.K_LEFT: 'left', pygame.K_RIGHT: 'right'}[event.key])
复制代码

需要注意的是,贪吃蛇不能180°大拐弯,只能90°地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

'''设置方向'''
def setDirection(self, direction):assert direction in ['up', 'down', 'right', 'left']if direction == 'up':if self.head_coord[1]-1 != self.tail_coords[0][1]:self.direction = directionelif direction == 'down':if self.head_coord[1]+1 != self.tail_coords[0][1]:self.direction = directionelif direction == 'left':if self.head_coord[0]-1 != self.tail_coords[0][0]:self.direction = directionelif direction == 'right':if self.head_coord[0]+1 != self.tail_coords[0][0]:self.direction = direction
复制代码

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

'''食物类'''
class Apple(pygame.sprite.Sprite):def __init__(self, cfg, snake_coords, **kwargs):pygame.sprite.Sprite.__init__(self)self.cfg = cfgwhile True:self.coord = [random.randint(0, cfg.GAME_MATRIX_SIZE[0]-1), random.randint(0, cfg.GAME_MATRIX_SIZE[1]-1)]if self.coord not in snake_coords:breakself.color = (255, 0, 0)'''画到屏幕上'''def draw(self, screen):cx, cy = int((self.coord[0] + 0.5) * self.cfg.BLOCK_SIZE), int((self.coord[1] + 0.5) * self.cfg.BLOCK_SIZE)pygame.draw.circle(screen, self.color, (cx, cy), self.cfg.BLOCK_SIZE//2-2)
# 随机生成一个食物
apple = Apple(cfg, snake.coords)
复制代码

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

'''更新贪吃蛇'''
def update(self, apple):# 根据指定的方向运动self.tail_coords.insert(0, copy.deepcopy(self.head_coord))if self.direction == 'up':self.head_coord[1] -= 1elif self.direction == 'down':self.head_coord[1] += 1elif self.direction == 'left':self.head_coord[0] -= 1elif self.direction == 'right':self.head_coord[0] += 1# 判断是否吃到了食物if self.head_coord == apple.coord:return Trueelse:self.tail_coords = self.tail_coords[:-1]return False
复制代码

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

apple = Apple(cfg, snake.coords)
复制代码

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时,游戏结束:

'''判断游戏是否结束'''
@property
def isgameover(self):if (self.head_coord[0] < 0) or (self.head_coord[1] < 0) or \(self.head_coord[0] >= self.cfg.GAME_MATRIX_SIZE[0]) or \(self.head_coord[1] >= self.cfg.GAME_MATRIX_SIZE[1]):return Trueif self.head_coord in self.tail_coords:return Truereturn False
复制代码

并显示一下游戏结束界面:

endInterface(screen, cfg)
复制代码

效果展示

经典吃豆豆小游戏原理简介

效果展示

游戏简介:

玩家通过↑↓←→键控制游戏的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则游戏胜利,否则游戏失败。

逐步实现:

Step1:定义游戏精灵类

首先,让我们先来明确一下该游戏需要哪些游戏精灵类。

① 墙类

② 食物类(即豆豆)

③ 角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计游戏地图

利用Step1中定义的游戏精灵类,我们就可以开始设计游戏地图了。由于时间有限,我只写了一个关卡的游戏地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。游戏地图的设计包括以下四方面内容:

① 创建墙

② 创建门(一开始关幽灵用的)

image.gif

③ 创建角色

④ 创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计游戏地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计游戏主循环

接下来开始设计游戏主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关游戏,其源代码如下:

showText函数用于在游戏结束或关卡切换时在游戏界面中显示提示性文字,其源代码如下:

文章到这里就结束了,感谢你的观看,记得点赞关注下篇文章分享消消乐小游戏

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,每一个读者,希望能帮到你。

Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码相关推荐

  1. python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  2. bat贪吃蛇游戏代码_100行python代码,轻松完成贪吃蛇小游戏

    来源:DataGo数据狗   链接: https://mp.weixin.qq.com/s/fDcr1SfcbynLzHye7Q7VOg 大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉 ...

  3. python代码,轻松完成贪吃蛇小游戏

    大家小时候都玩过贪吃蛇吧?小编小时候可喜欢拿爸妈的手机玩了,厉害着呢!今天,小编就来用100行代码实现一个简易版的贪吃蛇.在网上,贪吃蛇教程蛮多的,但要安装蛮多库的,而且也不够清晰,今天的代码比较短, ...

  4. 贪吃蛇小游戏代码html,自制贪吃蛇小游戏代码

    package game; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Game_St ...

  5. html5实现贪吃蛇小游戏,H5 canvas实现贪吃蛇小游戏

    本文介绍了h5 canvas实现贪吃蛇小游戏,分享给大家,具体如下: 实现效果如下 实现思路: ps:这个只是思路,详细可看代码注释 一.先把蛇画出来 定义一下蛇的结构,用一个数组保存一堆矩形,包含蛇 ...

  6. java小游戏代码压缩包_java 贪吃蛇小游戏 源码下载

    [实例简介] 使用java程序设计语言制作的一个贪吃蛇小游戏.游戏的控制模块应该做到易懂.易操作,以给玩家一个很好的游戏环境.在这个游戏的设计中,牵涉到图形界面的显示与更新.数据的收集与更新,还要应用 ...

  7. python程序源码百行_百行python代码,轻松完成贪吃蛇小游戏

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  8. html与js简单小游戏,JS实现简单贪吃蛇小游戏

    本文实例为大家分享了JS实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.使用语言 HTML+CSS+JavaScript 2.使用工具 visual studio code 3.GitHu ...

  9. Python实现贪吃蛇小游戏(双人模式)

    这篇文章主要为大家详细介绍了Python实现双人模式的贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 简单用py写了一个贪吃蛇游戏,有单人.双人模式,比较简 ...

最新文章

  1. Apache的服务端包含--SSI
  2. python爬取正确但不出文件_python爬取糗事百科,该如何正确保存到本地文件夹?报错-问答-阿里云开发者社区-阿里云...
  3. reactjs组件的生命周期函数:getSnapshotBeforeUpdate更新之前获取快照
  4. 学计算机等级考试电脑版软件,计算机二级考试宝典电脑版
  5. python startswitch_使用python esl 实现FreeSWITCH自动外呼
  6. 命令 结构_只需一个命令!从你的U盘里读出更多内容
  7. 计算机基础应用000018,计算机应用基础第01章计算机基础知识
  8. SpringBoot动态切换数据源-快速集成多数据源的启动器
  9. python语言中包含的标准数据类型有哪些_Python中的标准数据类型
  10. 【python】MAC链接oracle
  11. 华为NP课程笔记23-VRRP
  12. HTML5小试 双人贪吃蛇
  13. 在Microsoft Windows XP中使用NetMeeting
  14. 通过js获取本机的IP地址
  15. mysql中引号的作用是什么_mysql单引号和双引号的用法
  16. 2017小象学院Python数据分析与挖掘
  17. 易经64卦富含的人生哲理
  18. python 读取jpg_Python OpenCV读取png图像转成jpg图像存储的方法
  19. 北京三里屯苹果店悼念乔布斯:“黄牛”也献花
  20. IP地址划分【分类:A类 B类 C类 D类 E类】

热门文章

  1. wndDL课程学习笔记
  2. HTML3D立体城市特效代码
  3. Resource of computer vision, pattern recognition, machine learning etc.
  4. linux电脑关机命令是什么问题,linux下正常关机之命令详解 -电脑资料
  5. 磁盘IO遇到瓶颈时内存Cache的策略
  6. 障碍期权定价 python_Python王牌加速库2:深度学习下的障碍期权定价
  7. 算法训练营学习笔记2
  8. 魔力拍证件照制作小程序
  9. java金额转换函数_将阿拉伯数字转换成人民币大写形式的JAVA工具类
  10. docker 分析cpu占用过高