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在不同层级目录import模块的方法
Jan 31 Python
wxpython中自定义事件的实现与使用方法分析
Jul 21 Python
Python实现网站注册验证码生成类
Jun 08 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
python网络爬虫 CrawlSpider使用详解
Sep 27 Python
Django文件上传与下载(FileFlid)
Oct 06 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
django和flask哪个值得研究学习
Jul 31 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 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中require和include路径问题详解
2014/12/25 PHP
PHP合并数组+号和array_merge的区别
2015/06/25 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
文本加密解密
2006/06/23 Javascript
解析arp病毒背后利用的Javascript技术附解密方法
2007/08/06 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
在 webpack 中使用 ECharts的实例详解
2018/02/05 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
python常见的格式化输出小结
2016/12/15 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python使用生成器实现可迭代对象
2018/03/20 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
django的model操作汇整详解
2019/07/26 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
程序员求职信
2014/04/16 职场文书
家庭困难证明
2014/10/12 职场文书
捐助感谢信
2015/01/22 职场文书
薪资证明范本
2015/06/19 职场文书
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL