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的Django框架中创建和使用模版
Jul 15 Python
Python实现多线程抓取妹子图
Aug 08 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
python如何通过实例方法名字调用方法
Mar 21 Python
Python实现基于POS算法的区块链
Aug 07 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Python基于requests实现模拟上传文件
Apr 21 Python
Python批量处理csv并保存过程解析
May 16 Python
python:HDF和CSV存储优劣对比分析
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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
jquery模拟SELECT下拉框取值效果
2013/10/23 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
jquery中map函数遍历数组用法实例
2015/05/18 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
vue-router:嵌套路由的使用方法
2017/02/21 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
django 信号调度机制详解
2019/07/19 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
介绍一下mysql的日期和时间函数
2013/03/28 面试题
会计电算化专业毕业生求职信范文
2013/12/10 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
员工安全生产承诺书
2014/05/22 职场文书
质量承诺书怎么写
2014/05/24 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
MySQL批量更新不同表中的数据
2022/05/11 MySQL