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在Windows8下获取本机ip地址的方法
Mar 14 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
python套接字流重定向实例汇总
Mar 03 Python
Python数据类型详解(二)列表
May 08 Python
Python 3中的yield from语法详解
Jan 18 Python
Python 多线程的实例详解
Sep 07 Python
浅谈python可视化包Bokeh
Feb 07 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
详解Python sys.argv使用方法
May 10 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
如何使用python进行pdf文件分割
Nov 11 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 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
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
php 文件上传实例代码
2012/04/19 PHP
PHP写日志的实现方法
2014/11/05 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
PHP钩子实现方法解析
2019/05/21 PHP
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
跟混乱的页面弹窗说再见
2019/04/11 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python调用windows api锁定计算机示例
2014/04/17 Python
python格式化字符串实例总结
2014/09/28 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
介绍一下Python下range()函数的用法
2013/11/07 面试题
PyQt QMainWindow的使用示例
2021/03/24 Python
操行评语大全
2014/04/30 职场文书
杨善洲电影观后感
2015/06/04 职场文书
Vue接口封装的完整步骤记录
2021/05/14 Vue.js
windows server 2012安装FTP并配置被动模式指定开放端口
2022/06/10 Servers