使用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使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Django 跨域请求处理的示例代码
May 02 Python
Python unittest单元测试框架总结
Sep 08 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
python 三元运算符使用解析
Sep 16 Python
python装饰器原理与用法深入详解
Dec 19 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 Python
Pytorch 卷积中的 Input Shape用法
Jun 29 Python
python如何求圆的面积
Jul 01 Python
python map比for循环快在哪
Sep 21 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php中函数前加&amp;符号的作用分解
2014/07/08 PHP
Symfony2联合查询实现方法
2016/03/18 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
js 数组操作代码集锦
2009/04/28 Javascript
javascript DOM编程实例(智播客学习)
2009/11/23 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
DOM 事件流详解
2015/01/20 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
详解AngularJS验证、过滤器、指令
2017/01/04 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
分析python服务器拒绝服务攻击代码
2014/01/16 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python 读写文件的操作代码
2018/09/20 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
Python Django view 两种return的实现方式
2020/03/16 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
幼儿园门卫制度
2014/01/29 职场文书
行政主管职责范本
2014/03/07 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书