使用Python第三方库pygame写个贪吃蛇小游戏


Posted in Python onMarch 06, 2020

今天看到几个关于pygame模块的博客和视频,感觉非常有趣,这里照猫画虎写了一个贪吃蛇小游戏,目前还有待完善,但是基本游戏功能已经实现,下面是代码:

# 导入模块
import pygame
import random
 # 初始化
pygame.init()
w = 720   #窗口宽度
h = 600   #窗口高度
ROW = 30  #行数
COL = 36  #列数
#将所有的坐标看作是一个个点,定义点类
class Point:   
  row = 0
  col = 0
  def __init__(self, row, col):
    self.row = row
    self.col = col
  def copy(self):
    return Point(row = self.row,col = self.col)
#显示窗口和标题
size = (w, h)
window = pygame.display.set_mode(size)
pygame.display.set_caption('贪吃蛇')
#定义蛇头坐标
head = Point(row = ROW/2, col = COL/2)
#蛇身体
snake_list = [
  Point(row = head.row,col = head.col+1),
  Point(row = head.row,col = head.col+2),
  Point(row = head.row,col = head.col+3)
]
#产生食物
def pro_food():
  #食物不能与蛇重叠
  while True:
    pos = Point(row=random.randint(1,ROW-2), col=random.randint(1,COL-2))
    is_coll = False
    if head.row == pos.row and head.col == pos.col:
      is_coll = True
    for snake in snake_list:
      if snake.col == pos.col and snake.row == pos.row:
        is_coll = True
        break
    if not is_coll:
      return pos
food = pro_food()
#定义颜色
bg_color = (255, 255, 255)
head_color = (0, 128, 128)
food_color = (255, 255, 0)
snake_color = (200,200,200)
#给定初始方向
dire = 'left'
def rect(point, color):
  cell_width = w/COL
  cell_height = h/ROW
  left = point.col*cell_width
  top = point.row*cell_height
  pygame.draw.rect(
    window, color,
    (left,top,cell_width, cell_height, )
  )
  pass
# 游戏循环
quit = True
clock = pygame.time.Clock()
while quit:
  for event in pygame.event.get():
    #退出方式
    if event.type == pygame.QUIT:
      quit = False
    elif event.type == pygame.KEYDOWN:
      #键盘控制
      if event.key == 273 or event.key == 119:
        if dire == 'left' or dire == 'right':
          dire = 'up'
      elif event.key == 274 or event.key == 115:
        if dire == 'left' or dire == 'right':
          dire = 'down'
      elif event.key == 276 or event.key == 97:
        if dire == 'up' or dire == 'down':
          dire = 'left'
      elif event.key == 275 or event.key == 100:
        if dire == 'up' or dire == 'down':
          dire = 'right'
  #吃
  eat=(head.row == food.row and head.col == food.col)
  if eat:
    food = pro_food()
  #处理身体
  #1.原来的头换到身体最前端
  snake_list.insert(0,head.copy())
  #2.删除身体最后一个
  if not eat:
    snake_list.pop()
  #移动
  if dire == 'left':
    head.col -= 1
  elif dire == 'right':
    head.col += 1
  elif dire == 'up':
    head.row -= 1
  elif dire == 'down':
    head.row += 1
  #检测:
  dead=False
  #1.撞墙
  if head.col < 0 or head.row< 0 or head.col >= COL or head.row >= ROW:
    dead=True
  #2.撞自己
  for snake in snake_list:
    if head.col == snake.col and head.row == snake.row:
      dead=True
      break
  if dead:
    print('dead')
    quit = False
  #绘制背景
  pygame.draw.rect(window, bg_color, (0, 0, w, h))
  #蛇头
  rect(head, head_color)
  #食物
  rect(food,food_color)
  #蛇身
  for snake in snake_list:
    rect(snake,snake_color)
  pygame.display.flip()
  #游戏帧数
  clock.tick(20)

效果:

使用Python第三方库pygame写个贪吃蛇小游戏

总结

到此这篇关于使用Python第三方库pygame写个贪吃蛇小游戏的文章就介绍到这了,更多相关python 贪吃蛇游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用Python的Twisted框架编写简单的网络客户端
Apr 16 Python
在Python中使用matplotlib模块绘制数据图的示例
May 04 Python
python通过函数属性实现全局变量的方法
May 16 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
ipython和python区别详解
Jun 26 Python
python设置环境变量的作用和实例
Jul 09 Python
python实现简单银行管理系统
Oct 25 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
深入理解Python 多线程
Jun 16 Python
Python修改列表值问题解决方案
Mar 06 #Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 #Python
python-xpath获取html文档的部分内容
Mar 06 #Python
关于python中的xpath解析定位
Mar 06 #Python
Python网络爬虫信息提取mooc代码实例
Mar 06 #Python
appium+python adb常用命令分享
Mar 06 #Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 #Python
You might like
PHP中动态显示签名和ip原理
2007/03/28 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
Django中通过定时任务触发页面静态化的处理方式
2018/08/29 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
2019/12/03 PHP
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
jQuery ztree实现动态树形多选菜单
2016/08/12 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Web服务器框架 Tornado简介
2014/07/16 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
Django多数据库的实现过程详解
2019/08/01 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
2019/10/24 Python
在服务器上安装python3.8.2环境的教程详解
2020/04/26 Python
python 贪心算法的实现
2020/09/18 Python
python lambda的使用详解
2021/02/26 Python
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
高中美术教学反思
2016/02/17 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
Python几种酷炫的进度条的方式
2022/04/11 Python