python简单贪吃蛇开发


Posted in Python onJanuary 28, 2019

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

import sys
import random
import pygame
from pygame.locals import *
 
# 目标方块的颜色 红色
redColor = pygame.Color(255, 0, 0)
# 游戏界面的背景颜色 纯黑色
blackColor = pygame.Color(0, 0, 0)
# 贪吃蛇的颜色 白色
whiteColor = pygame.Color(255, 255, 255)
 
 
# 定义游戏结束的函数
def gameOver():
  pygame.quit()
  sys.exit()
 
 
# 定义main函数
def main():
  # 初始化pygame
  pygame.init()
  # 定义一个控制速度的函数
  fpsClock = pygame.time.Clock()
  # 创建显示层
  playSurface = pygame.display.set_mode((640,480))  # 界面的大小
  pygame.display.set_caption('贪吃蛇')
  # 初始化蛇的位置
  snake_position=[100,100]
 
  # 初始化蛇的长度
  snake_body = [[100,100],[80,100],[60,100]]
 
  # 初始化目标方块的位置
  target_position = [300,300]
 
  # 目标方块的状态
  target_flag = 1
 
  # 初始化一个方向
  direction = 'right'
  # 定义蛇的方向变量
  changeDirection = direction
 
  while True:
    # pygame的交互模块和事件队列
    for event in pygame.event.get():
      # 是否推出
      if event.type == QUIT:
        pygame.quit()
        sys.exit()
      # 判断键盘事件
      elif event.type == KEYDOWN:
        if event.key == K_RIGHT:
          changeDirection = 'right'
        if event.key == K_LEFT:
          changeDirection = 'left'
        if event.key == K_UP:
          changeDirection = 'up'
        if event.key == K_DOWN:
          changeDirection = 'down'
        if event.key == K_SPACE:
          pygame.event.post(pygame.event.Event(QUIT))
 
    # 根据键盘反应确定方向
    if changeDirection == 'left' and not direction == 'right':
      direction = changeDirection
 
    if changeDirection == 'right' and not direction == 'left':
      direction = changeDirection
 
    if changeDirection == 'up' and not direction == 'down':
      direction = changeDirection
 
    if changeDirection == 'down' and not direction == 'up':
      direction = changeDirection
 
 
    # 根据方向移动蛇头的坐标
    if direction == 'right':
      snake_position[0] += 20
 
    if direction == 'left':
      snake_position[0] -= 20
 
    if direction == 'up':
      snake_position[1] -= 20
 
    if direction == 'down':
      snake_position[1] += 20
 
    # 蛇与自身的碰撞检测
    for body in snake_body:
      if snake_position[0] == body[0] and snake_position[1] == body[1]:
        gameOver()
 
    # 蛇移动
    snake_body.insert(0,list(snake_position))
 
 
 
    if snake_position[0] == target_position[0] and snake_position[1] == target_position[1]:
      target_flag = 0
    else:
      # 如果没吃到,蛇尾弹出栈
      snake_body.pop()
 
    # 如果吃掉目标方块,重新生成一个目标方块
    if target_flag == 0:
      x = random.randrange(1,32)
      y = random.randrange(1,24)
      # 20*20的像素为一个小矩形
      target_position = [int(x*20),int(y*20)]
      target_flag = 1
 
    # 绘制显示层
    playSurface.fill(blackColor)
 
    # 绘制蛇
    for position in snake_body:
      pygame.draw.rect(playSurface, redColor, Rect(position[0],position[1],20,20))
 
    # 画目标方块
    pygame.draw.rect(playSurface, whiteColor, Rect(target_position[0], target_position[1], 20, 20))
 
    pygame.display.flip()
 
    # 判断死亡
    if snake_position[0] > 620 or snake_position[1] < 0:
      gameOver()
    elif snake_position[1] > 460 or snake_position[1] < 0:
      gameOver()
 
    # 控制游戏的速度
    fpsClock.tick(5)
 
if __name__ == '__main__':
  main()

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

Python 相关文章推荐
Python写的PHPMyAdmin暴力破解工具代码
Aug 06 Python
python登录豆瓣并发帖的方法
Jul 08 Python
Pycharm学习教程(3) 代码运行调试
May 03 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
Python MySQL 日期时间格式化作为参数的操作
Mar 02 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Python如何实现自带HTTP文件传输服务
Jul 08 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 #Python
python使用正则筛选信用卡
Jan 27 #Python
pthon贪吃蛇游戏详细代码
Jan 27 #Python
只需7行Python代码玩转微信自动聊天
Jan 27 #Python
python实现贪吃蛇游戏
Mar 21 #Python
Python制作动态字符图的实例
Jan 27 #Python
python贪吃蛇游戏代码
Apr 18 #Python
You might like
PHP 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
2014/04/08 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php两种无限分类方法实例
2015/04/21 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
javascript new后的constructor属性
2010/08/05 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
vue实现商城购物车功能
2017/11/27 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
使用matplotlib画散点图的方法
2018/05/25 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
社团活动总结报告
2014/06/27 职场文书
2014年话务员工作总结
2014/11/19 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
如何书写授权委托书?
2019/06/25 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
Python 可迭代对象 iterable的具体使用
2021/08/07 Python