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使用opencv读取图片的实例
Aug 17 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
Jun 03 Python
浅谈python 中类属性共享的问题
Jul 02 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
使用python绘制温度变化雷达图
Oct 18 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 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
解析ajax事件的调用顺序
2013/06/17 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
CentOS6.5设置Django开发环境
2016/10/13 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
python实现接口并发测试脚本
2019/06/25 Python
实例详解Python模块decimal
2019/06/26 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
Python实现直播推流效果
2019/11/26 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
公司前台接待岗位职责
2013/12/03 职场文书
财产公证书样本
2014/04/04 职场文书
应急管理培训方案
2014/06/12 职场文书
计算机求职信
2014/07/02 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS