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写个下载teahour音频的小脚本
May 08 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
使用python3实现操作串口详解
Jan 01 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
django框架创建应用操作示例
Sep 26 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
使用Djongo模块在Django中使用MongoDB数据库
Jun 20 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
基于对象合并功能的实现示例
2017/10/10 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
ORM Django 终端打印 SQL 语句实现解析
2019/08/09 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python库安装速度过慢解决方案
2020/07/14 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
公司活动策划方案
2014/01/13 职场文书
小学教师个人总结
2015/02/05 职场文书
学习保证书100字
2015/02/26 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python