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实现将doc转化pdf格式文档的方法
Jan 19 Python
python定向爬虫校园论坛帖子信息
Jul 23 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
对python3标准库httpclient的使用详解
Dec 18 Python
python Tkinter版学生管理系统
Feb 20 Python
详解python持久化文件读写
Apr 06 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Python 下载及安装详细步骤
Nov 04 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
python speech模块的使用方法
Sep 09 Python
基于OpenCV的路面质量检测的实现
Nov 04 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
Feb 04 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/11/24 PHP
php中关于普通表单多文件上传的处理方法
2011/03/25 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
[05:14]辉夜杯主赛事第二日 RECAP精彩回顾
2015/12/27 DOTA
Python函数中定义参数的四种方式
2014/11/30 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
使用pip发布Python程序的方法步骤
2018/10/11 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
用友笔试题目
2016/10/25 面试题
初中生操行评语大全
2014/04/24 职场文书
求职信结尾怎么写
2014/05/26 职场文书
现役军人家属慰问信
2015/03/24 职场文书
中秋节随笔
2015/08/15 职场文书
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
Python道路车道线检测的实现
2021/06/27 Python