python实现贪吃蛇游戏


Posted in Python onMarch 21, 2020

本文实例为大家分享了python实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

本文稍作改动,修复一些bug,原文链接:python实现贪吃蛇游戏

#!/usr/bin/env python
#__*__ coding: utf-8 __*__
 
import pygame,sys,time,random
from pygame.locals import *
 
 
redColour = pygame.Color(255,0,0)
blackColour = pygame.Color(0,0,0)
whiteColour = pygame.Color(255,255,255)
greyColour = pygame.Color(150,150,150)
 
def gameOver(playSurface):
 gameOverFont = pygame.font.Font('arial.ttf',72)
 gameOverSurf = gameOverFont.render('Game Over',True,greyColour)
 gameOverRect = gameOverSurf.get_rect()
 gameOverRect.midtop = (320,10)
 playSurface.blit(gameOverSurf,gameOverRect)
 pygame.display.flip()
 time.sleep(5)
 pygame.quit()
 sys.exit()
 
def main():
 pygame.init()
 playSurface = pygame.display.set_mode((640,480))
 fpsClock = pygame.time.Clock()
 pygame.display.set_caption('Snake Liu')
 
 snakePosition = [100,100]
 snakeSegments = [[100,100],[80,100],[60,100]]
 raspberryPosition = [300,300]
 raspberrySpawned = 1
 direction = 'right'
 changeDirection = direction
 while True:
 for event in pygame.event.get():
 if event.type == QUIT:
 sys.exit()
 elif event.type == KEYDOWN:
 if event.key == K_RIGHT or event.key == ord('d'):
  changeDirection = 'right'
 if event.key == K_LEFT or event.key == ord('a'):
  changeDirection = 'left'
 if event.key == K_UP or event.key == ord('w'):
  changeDirection = 'up'
 if event.key == K_DOWN or event.key == ord('s'):
  changeDirection = 'down'
 if event.key == K_ESCAPE:
  pygame.event.post(pygame.event.Event(QUIT))
 # 判断是否输入了反方向,与原文有改动
 if changeDirection == 'right':
 direction = changeDirection
 if changeDirection == 'left':
 direction = changeDirection
 if changeDirection == 'up':
 direction = changeDirection
 if changeDirection == 'down':
 direction = changeDirection
 # 根据方向移动蛇头的坐标
 if direction == 'right':
 snakePosition[0] += 20
 if direction == 'left':
 snakePosition[0] -= 20
 if direction == 'up':
 snakePosition[1] -= 20
 if direction == 'down':
 snakePosition[1] += 20
 # 增加蛇的长度
 snakeSegments.insert(0,list(snakePosition))
 # 判断是否吃掉了树莓
 if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
 raspberrySpawned = 0
 else:
 snakeSegments.pop()
 # 如果吃掉树莓,则重新生成树莓
 if raspberrySpawned == 0:
 x = random.randrange(1,32)
 y = random.randrange(1,24)
 raspberryPosition = [int(x*20),int(y*20)]
 raspberrySpawned = 1
 
 # 刷新pygame显示层
 playSurface.fill(blackColour)
 for position in snakeSegments:
 pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))
 pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))
 pygame.display.flip()
 
 # 判断是否死亡,后面几行和原文有改动
 if snakePosition[0] > 620 or snakePosition[0] < 0:
 gameOver(playSurface)
 if snakePosition[1] > 460 or snakePosition[1] < 0:
 gameOver(playSurface)
 for snakeBody in snakeSegments[1:]:
 if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
 gameOver(playSurface)
 fpsClock.tick(5)
if __name__ == "__main__":
 main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现二分法算法实例
Feb 02 Python
python计算牛顿迭代多项式实例分析
May 07 Python
Python运行报错UnicodeDecodeError的解决方法
Jun 07 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
python利用微信公众号实现报警功能
Jun 10 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
python 穷举指定长度的密码例子
Apr 02 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Django mysqlclient安装和使用详解
Sep 17 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
Python制作动态字符图的实例
Jan 27 #Python
python贪吃蛇游戏代码
Apr 18 #Python
DRF跨域后端解决之django-cors-headers的使用
Jan 27 #Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 #Python
pandas把所有大于0的数设置为1的方法
Jan 26 #Python
python 判断矩阵中每行非零个数的方法
Jan 26 #Python
对python 判断数字是否小于0的方法详解
Jan 26 #Python
You might like
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
php查询内存信息操作示例
2019/05/09 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
我的Node.js学习之路(四)--单元测试
2014/07/06 Javascript
javascript中Function类型详解
2015/04/28 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
原生态js,鼠标按下后,经过了那些单元格的简单实例
2016/08/11 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
Vue的Options用法说明
2020/08/14 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python书单 不将就
2017/07/11 Python
python3.6数独问题的解决
2019/01/21 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
python能自学吗
2020/06/18 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
大学毕业生通用求职信
2013/09/28 职场文书
日语专业个人的求职信
2013/12/03 职场文书
超市工作总结范文2014
2014/12/19 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
最新最全的手机号验证正则表达式
2022/02/24 Javascript