pthon贪吃蛇游戏详细代码


Posted in Python onJanuary 27, 2019

本文实例为大家分享了pthon贪吃蛇游戏的具体代码,供大家参考,具体内容如下

在写Python游戏项目时,最重要的时python中的pygame库。安装pygame库和用法在我CSDN博客另一篇文章上。这里就不详细说了,下边时运行游戏界面。

pthon贪吃蛇游戏详细代码

下边是详细的代码和注释

import pygame,sys,random,time
from pygame.locals import * #从pygame模块导入常用的函数和常量
#定义颜色变量
black_colour = pygame.Color(0,0,0)
white_colour = pygame.Color(255,255,255)
red_colour = pygame.Color(255,0,0)
grey_colour = pygame.Color(150,150,150)
#定义游戏结束函数
def GameOver(gamesurface):
 #设置提示字体的格式
 GameOver_font = pygame.font.SysFont("MicrosoftYaHei", 16)
 #设置提示字体的颜色
 GameOver_colour = GameOver_font.render('Game Over',True,grey_colour)
 #设置提示位置
 GameOver_location = GameOver_colour.get_rect()
 GameOver_location.midtop = (320,10)
 #绑定以上设置到句柄
 gamesurface.blit(GameOver_colour,GameOver_location)
 #提示运行信息
 pygame.display.flip()
 #休眠5秒
 time.sleep(5)
 #退出游戏
 pygame.quit()
 #退出程序
 sys.exit()
#定义主函数
def main():
 #初始化pygame,为使用硬件做准备
 pygame.init()
 pygame.time.Clock()
 ftpsClock = pygame.time.Clock()
 #创建一个窗口
 gamesurface = pygame.display.set_mode((640,480))
 #设置窗口的标题
 pygame.display.set_caption('tanchishe snake')
 #初始化变量
 #初始化贪吃蛇的起始位置
 snakeposition = [100,100]
 #初始化贪吃蛇的长度
 snakelength = [[100,100],[80,100],[60,100]]
 #初始化目标方块的位置
 square_purpose = [300,300]
 #初始化一个数来判断目标方块是否存在
 square_position = 1
 #初始化方向,用来使贪吃蛇移动
 derection = "right"
 change_derection = derection
 #进行游戏主循环
 while True:
  #检测按键等pygame事件
  for event in pygame.event.get():
   if event.type==QUIT:
    #接收到退出事件后,退出程序
    pygame.quit()
    sys.exit()
   elif event.type==KEYDOWN:
    #判断键盘事件,用w,s,a,d来表示上下左右
    if event.key==K_RIGHT or event.key==ord('d'):
     change_derection = "right"
    if event.key==K_LEFT or event.key==ord('a'):
     change_derection = "left"
    if event.key==K_UP or event.key==ord('w'):
     change_derection = "up"
    if event.key==K_DOWN or event.key==ord('s'):
     change_derection = "down"
    if event.key==K_ESCAPE:
     pygame.event.post(pygame.event.Event(QUIT))
  #判断移动的方向是否相反
  if change_derection =='left'and not derection =='right':
   derection = change_derection
  if change_derection =='right'and not derection =='left':
   derection = change_derection
  if change_derection == 'up' and not derection =='down':
   derection = change_derection
  if change_derection == 'down' and not derection == 'up':
   derection = change_derection
  #根据方向,改变坐标
  if derection == 'left':
   snakeposition[0] -= 20
  if derection == 'right':
   snakeposition[0] += 20
  if derection == 'up':
   snakeposition[1] -= 20
  if derection == 'down':
   snakeposition[1] += 20
  #增加蛇的长度
  snakelength.insert(0,list(snakeposition))
  #判断是否吃掉目标方块
  if snakeposition[0]==square_purpose[0] and snakeposition[1]==square_purpose[1]:
   square_position = 0
  else:
   snakelength.pop()
  #重新生成目标方块
  if square_position ==0:
   #随机生成x,y,扩大二十倍,在窗口范围内
   x = random.randrange(1,32)
   y = random.randrange(1,24)
   square_purpose = [int(x*20),int(y*20)]
   square_position = 1
  #绘制pygame显示层
  gamesurface.fill(black_colour)
  for position in snakelength:
   pygame.draw.rect(gamesurface,white_colour,Rect(position[0],position[1],20,20))
   pygame.draw.rect(gamesurface,red_colour,Rect(square_purpose[0],square_purpose[1],20,20))
  #刷新pygame显示层
  pygame.display.flip()
  #判断是否死亡
  if snakeposition[0]<0 or snakeposition[0]>620:
   GameOver(gamesurface)
  if snakeposition[1]<0 or snakeposition[1]>460:
   GameOver(gamesurface)
  for snakebody in snakelength[1:]:
   if snakeposition[0]==snakebody[0] and snakeposition[1]==snakebody[1]:
    GameOver(gamesurface)
  #控制游戏速度
  ftpsClock.tick(5)
 
if __name__ == "__main__":
 main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
Python解析nginx日志文件
May 11 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
Aug 30 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
python入门学习关于for else的特殊特性讲解
Nov 20 Python
只需7行Python代码玩转微信自动聊天
Jan 27 #Python
python实现贪吃蛇游戏
Mar 21 #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
You might like
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
jquery中checkbox全选失效的解决方法
2014/12/26 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
2016/09/04 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
vue跨域解决方法
2017/10/15 Javascript
Vue中使用Sortable的示例代码
2018/04/07 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
vscode调试node.js的实现方法
2020/03/22 Javascript
python实现机器人行走效果
2018/01/29 Python
Python星号*与**用法分析
2018/02/02 Python
python-opencv颜色提取分割方法
2018/12/08 Python
在PyCharm下使用 ipython 交互式编程的方法
2019/01/17 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
python3对接mysql数据库实例详解
2019/04/30 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
生产部岗位职责范文
2014/02/07 职场文书
《盘古开天地》教学反思
2014/02/28 职场文书
就职演讲稿范文
2014/05/19 职场文书
质量承诺书怎么写
2014/05/24 职场文书
先进个人总结范文
2015/02/15 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
JavaScript流程控制(循环)
2021/12/06 Javascript