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操作列表之List.insert()方法的使用
May 20 Python
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
Windows系统下多版本pip的共存问题详解
Oct 10 Python
机器学习10大经典算法详解
Dec 07 Python
Python使用numpy实现BP神经网络
Mar 10 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
python opencv调用笔记本摄像头
Aug 28 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python函数基本使用原理详解
Mar 19 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
重写javascript中window.confirm的行为
2012/10/21 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
2016/10/30 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
js实现符合国情的日期插件详解
2017/01/19 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
JavaScript实现多个物体同时运动
2020/03/12 Javascript
原生js+canvas实现下雪效果
2020/08/02 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python2.x与Python3.x的区别
2016/01/14 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python实现门限回归方式
2020/02/29 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
收银员岗位职责
2014/02/07 职场文书
离职保密承诺书
2014/05/28 职场文书
建筑安全责任书范本
2014/07/24 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
实习证明格式范文
2015/06/16 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
重阳节简报
2015/07/20 职场文书