使用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开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
Python建立Map写Excel表实例解析
Jan 17 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
Python学习小技巧总结
Jun 10 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
Django实现文件上传和下载功能
Oct 06 Python
python实现串口通信的示例代码
Feb 10 Python
什么是python的id函数
Jun 11 Python
pandas之分组groupby()的使用整理与总结
Jun 18 Python
virtualenv介绍及简明教程
Jun 23 Python
Python中Qslider控件实操详解
Feb 20 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 结果集的分页实现代码
2009/03/10 PHP
学习php笔记 字符串处理
2010/10/19 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JavaScript获取Url里的参数
2014/12/18 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
Cython 三分钟入门教程
2009/09/17 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
matplotlib中legend位置调整解析
2017/12/19 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
python读取文本中的坐标方法
2018/10/14 Python
学习python分支结构
2019/05/17 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
django教程如何自学
2020/07/31 Python
python 用struct模块解决黏包问题
2020/11/07 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
收银出纳员岗位职责
2014/02/23 职场文书
给校长的建议书
2014/03/12 职场文书
代收款委托书范本
2014/10/01 职场文书
小平您好观后感
2015/06/09 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
Python OpenGL基本配置方式
2022/05/20 Python