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中列表的一些基本操作知识汇总
May 20 Python
Python二分查找详解
Sep 13 Python
Python检测网络延迟的代码
May 15 Python
Django中使用第三方登录的示例代码
Aug 20 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python设计tcp数据包协议类的例子
Jul 23 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
python异步Web框架sanic的实现
Apr 27 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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 日期时间处理函数小结
2009/12/18 PHP
php中的比较运算符详解
2013/10/28 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP递归实现层级树状展开
2016/04/01 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
JavaScript使用正则表达式获取全部分组内容的方法示例
2017/01/17 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
Nodejs实现WebSocket代码实例
2020/05/19 NodeJs
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
Python赋值语句后逗号的作用分析
2015/06/08 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python按行读取文件,去掉每行的换行符\n的实例
2018/04/19 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
Python通过类的组合模拟街道红绿灯
2020/09/16 Python
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
自我评价中英文语句
2013/11/30 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
班主任开场白
2015/06/01 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android