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实现识别相似图片小结
Feb 22 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python 实现12306登录功能实例代码
Feb 09 Python
python将视频转换为全字符视频
Apr 26 Python
python 日志模块 日志等级设置失效的解决方案
May 26 Python
Python使用requests模块爬取百度翻译
Aug 25 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 Python
解决virtualenv -p python3 venv报错的问题
Feb 05 Python
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
Apr 12 Python
基于tensorflow权重文件的解读
May 26 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脚本的10个技巧(2)
2006/10/09 PHP
php数据库抽象层 PDO
2011/05/07 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
常用DOM整理
2015/06/16 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
2019/08/01 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
详解SQL的窗口函数
2022/04/21 Oracle
python实现学生信息管理系统(面向对象)
2022/06/05 Python