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装饰器decorator用法实例
Nov 10 Python
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
python一键升级所有pip package的方法
Jan 16 Python
Python协程的用法和例子详解
Sep 09 Python
python深度优先搜索和广度优先搜索
Feb 07 Python
Python迭代器定义与简单用法分析
Apr 30 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
在python3中实现更新界面
Feb 21 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
只用50行Python代码爬取网络美女高清图片
Jun 02 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
一个简单的域名注册情况查询程序
2006/10/09 PHP
Apache2 httpd.conf 中文版
2006/11/17 PHP
php 正则匹配函数体
2009/08/25 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
javascript 对象的定义方法
2007/01/10 Javascript
javascript一点特殊用法
2008/05/28 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
Javascript字符串常用方法详解
2016/07/21 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
PHP webshell检查工具 python实现代码
2009/09/15 Python
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python功能点实现:函数级/代码块级计时器
2019/01/02 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
学习决心书
2014/03/11 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
2014年服务员工作总结
2014/11/18 职场文书
三行辞职书范文
2015/02/26 职场文书
教师个人自我评价
2015/03/04 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript