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制作检测Linux运行信息的工具的教程
Apr 01 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
Python输入二维数组方法
Apr 13 Python
python 处理数字,把大于上限的数字置零实现方法
Jan 28 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
python numpy库np.percentile用法说明
Jun 08 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
Python爬虫抓取论坛关键字过程解析
Oct 19 Python
Python paramiko使用方法代码汇总
Nov 20 Python
Pycharm 解决自动格式化冲突的设置操作
Jan 15 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 5.3.0 安装分析心得
2009/08/07 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php数组去重实例及分析
2013/11/26 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
php进程间通讯实例分析
2016/07/11 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
深入理解vue $refs的基本用法
2017/07/13 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python中文件遍历的两种方法
2014/06/16 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
实习生体会的自我评价范文
2013/11/28 职场文书
精彩的英文自荐信
2014/01/30 职场文书
暑期研修感言
2014/02/17 职场文书
2014年绿化工作总结
2014/12/09 职场文书
收入证明怎么写
2015/06/12 职场文书
社团招新宣传语
2015/07/13 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
mysql批量新增和存储的方法实例
2021/04/07 MySQL
python实现三阶魔方还原的示例代码
2021/04/28 Python
Python 发送SMTP邮件的简单教程
2021/06/24 Python