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 异常处理实例详解
Mar 12 Python
解析Python中的二进制位运算符
May 13 Python
python类继承用法实例分析
May 27 Python
Python语言描述最大连续子序列和
Dec 05 Python
python生成特定分布数的实例
Dec 05 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
Jan 04 Python
Python列表list操作相关知识小结
Jan 29 Python
Python socket连接中的粘包、精确传输问题实例分析
Mar 24 Python
python属于软件吗
Jun 18 Python
零基础学python应该从哪里入手
Aug 11 Python
Python 微信公众号文章爬取的示例代码
Nov 30 Python
Python列表元素删除和remove()方法详解
Jan 04 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
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
JavaScript 指导方针
2007/04/05 Javascript
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
2011/07/26 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
jQuery 弹出层插件(推荐)
2016/05/24 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
JS FormData上传文件的设置方法
2017/07/05 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
Python pip安装模块提示错误解决方案
2020/05/22 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
STRATHBERRY苏贝瑞包包官网:西班牙高级工匠手工打造
2020/11/10 全球购物
党员思想汇报范文
2013/12/30 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
小学大队委竞选口号
2015/12/25 职场文书
《夜莺的歌声》教学反思
2016/02/22 职场文书
Go各时间字符串使用解析
2021/04/02 Golang
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers