专栏首页程序源代码【程序源代码】python像素贪吃蛇

【程序源代码】python像素贪吃蛇

关键字:python 游戏 贪吃蛇

正文 | 内容

介绍

python像素贪吃蛇小游戏,可以通过上下左右键控制蛇头转向,点击回车键开始游戏。简单好玩

软件架构

基于python3.0以上版本 基于pygame模块开发

安装教程

  1. 基于python3.0以上版本开发.开发时使用的是python3.7版本。

使用说明

  1. 基于python3.0以上版本开发,开发时使用的是python3.7版本。建议开发前本地安装pygame/random/sys模块
  2. 用pycharm打开源文件(一般pycharm会自动提示需要安装的插件或者模块)
  3. 点击retroSnaker.py,直接运行即可

游戏截图

  1. 游戏开始
  1. 游戏中
  1. 游戏结束

02

【一条蛇】

"""功能:python像素贪吃蛇作者:程序源代码时间:2020-07-15"""# 导入相关模块与函数import randomimport pygameimport sysfrom pygame.locals import *# 初始化pygamepygame.init()# 表明四个全局变量global Speedglobal Trackingtimeglobal Displayobjectglobal WindowTypefaceSpeed = 8Trackingtime = pygame.time.Clock() # 创建跟踪时间对象Displayobject = pygame.display.set_mode((640, 480)) # 设置窗口高宽640*480WindowTypeface = pygame.font.SysFont('Calibri.ttf', 25) # 创建Typeface对象并设置字体和字号pygame.display.set_caption('像素贪吃蛇') # 设置窗口标题backgroundcolor = (255, 255, 255) # 设置窗口底色为纯白色# 侦测键盘操作def CheckKeyboardPress(): if len(pygame.event.get(QUIT)) > 0: pygame.quit() sys.exit() keyUpEvents = pygame.event.get(KEYUP) if len(keyUpEvents) == 0: return None return keyUpEvents[0].key# 游戏开始界面设计def DesignStartScreen(): global Speed titleTypeface1 = pygame.font.SysFont('Calibri.ttf', 200) titleTypeface2 = pygame.font.SysFont('Calibri.ttf', 60) titleContent1 = titleTypeface1.render('RETRO SNAKER', True, (0, 0, 0), (0, 0, 0)) # 设置主界面文字和大小 titleContent2 = titleTypeface2.render('RETRO SNAKER', True, (255, 0, 0)) KeyboardContent = WindowTypeface.render('Press any key to start', True, (0, 0, 0)) Displayobject.fill(backgroundcolor) revolveContent1 = pygame.transform.rotate(titleContent1, 0) revolveRect1 = revolveContent1.get_rect() revolveRect1.center = (640 / 2, 480 / 2) Displayobject.blit(revolveContent1, revolveRect1) revolveContent2 = pygame.transform.rotate(titleContent2, 0) revolveRect2 = revolveContent2.get_rect() revolveRect2.center = (640 / 2, 480 / 2) Displayobject.blit(revolveContent2, revolveRect2) # 获得一个对象的rect,以便于设置其坐标位置 KeyboardRect = KeyboardContent.get_rect() KeyboardRect.topleft = (640 - 200, 480 - 30) Displayobject.blit(KeyboardContent, KeyboardRect.topleft) pygame.display.update() Trackingtime.tick(Speed) while True: if CheckKeyboardPress(): pygame.event.get() # 清除事件队列 return# 游戏结束界面设计def DesignGameOverScreen(): gameOverTypeface = pygame.font.SysFont('Calibri.ttf', 100) gameoverContent = gameOverTypeface.render('Game Over', True, (0, 0, 0)) KeyboardContent = WindowTypeface.render('Press any key to restart', True, (0, 0, 0)) gameoverRect = gameoverContent.get_rect() gameoverRect.center = (640 / 2, 480 / 2) Displayobject.blit(gameoverContent, gameoverRect) # 获得一个对象的rect,以便于设置其坐标位置 KeyboardRect = KeyboardContent.get_rect() KeyboardRect.topleft = (640 - 220, 480 - 30) Displayobject.blit(KeyboardContent, KeyboardRect.topleft) pygame.display.update() pygame.time.wait(600) while True: if CheckKeyboardPress(): pygame.event.get() # 清除事件队列 return# 贪吃蛇蛇身设计def DesignRetroSnaker(RetroSnakerCoords): for coord in RetroSnakerCoords: x = coord['x'] * 20 # 规定每行单元格的大小为20 y = coord['y'] * 20 RetroSnakerSegmentRect = pygame.Rect(x, y, 20, 20) pygame.draw.rect(Displayobject, (0, 0, 255), RetroSnakerSegmentRect) RetroSnakerInnerSegmentRect = pygame.Rect(x + 4, y + 4, 20 - 8, 20 - 8) pygame.draw.rect(Displayobject, (173, 216, 230), RetroSnakerInnerSegmentRect)# 苹果设计def DesignApple(coord): x = coord['x'] * 20 # 规定单元格的大小为20 y = coord['y'] * 20 appleRect = pygame.Rect(x, y, 20, 20) pygame.draw.rect(Displayobject, (255, 0, 0), appleRect)# 得分分数设计def DesignScore(score): scoreContent = WindowTypeface.render('Score: %s' % (score), True, (0, 0, 0)) scoreRect = scoreContent.get_rect() scoreRect.topleft = (640 - 100, 10) Displayobject.blit(scoreContent, scoreRect)# 边框线设计def DesignBorderline(): for x in range(0, 640, 640 - 1): # 绘制垂直线 pygame.draw.line(Displayobject, (0, 0, 0), (x, 0), (x, 480), 5) for y in range(0, 480, 480 - 1): # 绘制平行线 pygame.draw.line(Displayobject, (0, 0, 0), (0, y), (640, y), 5)# 设置游戏主要运行机制def GameRunning(): global Speed # 设置随机起点 startx = random.randint(5, 26) # 初始单元格位置横向在(5, 26)范围中选一个随机数 starty = random.randint(5, 18) # 初始单元格位置纵向在(5, 18)范围中选一个随机数 RetroSnakerCoords = [{'x': startx, 'y': starty}, {'x': startx - 1, 'y': starty}, {'x': startx - 2, 'y': starty}] # RetroSnakerCoords:列表,贪吃蛇坐标位置 direction = 'right' # 初始方向朝右 # 设置苹果在一个随机位置 apple = {'x': random.randint(0, 31), 'y': random.randint(0, 23)} while True: # 游戏主循环 # 判断键盘事件 for event in pygame.event.get(): # 事件处理循环 if event.type == KEYDOWN: if event.key == K_LEFT and direction != 'right': direction = 'left' elif event.key == K_RIGHT and direction != 'left': direction = 'right' elif event.key == K_UP and direction != 'down': direction = 'up' elif event.key == K_DOWN and direction != 'up': direction = 'down' # 根据方向改变蛇头的坐标 if direction == 'up': m = {'x': RetroSnakerCoords[0]['x'], 'y': RetroSnakerCoords[0]['y'] - 1} elif direction == 'down': m = {'x': RetroSnakerCoords[0]['x'], 'y': RetroSnakerCoords[0]['y'] + 1} elif direction == 'left': m = {'x': RetroSnakerCoords[0]['x'] - 1, 'y': RetroSnakerCoords[0]['y']} elif direction == 'right': m = {'x': RetroSnakerCoords[0]['x'] + 1, 'y': RetroSnakerCoords[0]['y']} # 通过向贪吃蛇移动的方向添加一个单元格来加长贪吃蛇 RetroSnakerCoords.insert(0, m) # 侦测贪吃蛇是否吃到苹果 if RetroSnakerCoords[0]['x'] == apple['x'] and RetroSnakerCoords[0]['y'] == apple['y']: apple = {'x': random.randint(0, 31), 'y': random.randint(0, 23)} # 在随机位置放置一个苹果 Speed = Speed + 0.2 else: del RetroSnakerCoords[-1] # 去除贪吃蛇的尾段 # 侦测贪吃蛇是否触碰到窗口边缘或自身 if RetroSnakerCoords[0]['x'] == -1 or RetroSnakerCoords[0]['x'] == 32 or RetroSnakerCoords[0]['y'] == -1 or \ RetroSnakerCoords[0]['y'] == 24: return # 游戏结束 for RetroSnakerBody in RetroSnakerCoords[1:]: if RetroSnakerCoords[0]['x'] == RetroSnakerBody['x'] and RetroSnakerCoords[0]['y'] == RetroSnakerBody['y']: return # 游戏结束 # 绘制相关角色在窗口中 Displayobject.fill(backgroundcolor) DesignRetroSnaker(RetroSnakerCoords) DesignApple(apple) DesignScore(len(RetroSnakerCoords) - 3) DesignBorderline() pygame.display.update() # 让绘制的东西显示在屏幕上 Trackingtime.tick(Speed)# 主函数if __name__ == '__main__': DesignStartScreen() # 初始化游戏开始界面 while True: GameRunning() # 游戏开始 DesignGameOverScreen() # 游戏结束

03

最近疫情期,自己憋在家里除了日常的活动外,没有其它事情要做,感觉时间都浪费掉了。同时由于疫情经济和情感上压力也有些大。为了排解压力让自己充实起来,我决定自己用一个月的时候自学一个新语言,选来选去决定学习python。在学习的过程中接有时感觉特别累,每天总体上也坚持自学至少三个小时。学习中发现了一个比较好的软件xmind,通过xmind这个思维导图软件制作了一些自学笔记,把每节的重点整理成图形的方式,很容易直观理解和掌握。最近整理出来一些图例分享给大家一起学习,希望大家能喜欢。自学确实不容易,贵在坚持!

本文分享自微信公众号 - 程序源代码(itcode),作者:程序源代码

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【程序源代码】python 贪吃蛇

    今天这篇文章主要是介绍: 贪吃蛇游戏是一款休闲益智类游戏,既简单又耐玩。游戏通过控制蛇头方向吃苹果,从而使得蛇变得越来越长。

    程序源代码
  • 【程序源代码】python贪吃蛇小游戏

    在网络还不发达,没有平板电脑和手机的童年;电视机里的动画片和小游戏曾经陪伴我们度过了欢乐的时光.扫雷、贪吃蛇、俄罗斯方块、58坦克大战、超级玛丽、魂斗罗...每...

    程序源代码
  • 【程序源代码】各类大屏展示模板持续更新中...

    https://gitee.com/lvyeyou/DaShuJuZhiDaPingZhanShi

    程序源代码
  • 【程序源代码】python 贪吃蛇

    今天这篇文章主要是介绍: 贪吃蛇游戏是一款休闲益智类游戏,既简单又耐玩。游戏通过控制蛇头方向吃苹果,从而使得蛇变得越来越长。

    程序源代码
  • 算法笔记(九):二分查找

    1、例如:抱着一堆书走出图书馆的时候,检测器突然响了(其中一本书没有消磁),现在要检查哪一本书没有消磁。

    free赖权华
  • 本体技术视点 | 央行数字货币模型的简单认识

    上周,关于央行数字货币 DC/EP 的消息接踵而来,引爆了整个朋友圈。先是传出央行数字货币 DC/EP 在中国农业银行开始内测,首批试点地区为中国深圳、雄安、成...

    本体Ontology
  • SQL Server 验证身份证合法性函数(使用VBScript.RegExp)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1148526
  • 1-8 数组循环左移 (20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • 【Netty】心跳机制与断线重连

    在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.

    用户3467126
  • 微信开发如何保证access_token/jsapi_ticket长期有效

    为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口等,...

    似水的流年

扫码关注云+社区

领取腾讯云代金券