使用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字符串处理的七种技巧
Mar 31 Python
python编程实现归并排序
Apr 14 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
Python动态赋值的陷阱知识点总结
Mar 17 Python
Python的matplotlib绘图如何修改背景颜色的实现
Jul 16 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
pytorch 预训练层的使用方法
Aug 20 Python
Django中间件拦截未登录url实例详解
Sep 03 Python
基于python读取.mat文件并取出信息
Dec 16 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 Python
Python基于jieba, wordcloud库生成中文词云
May 13 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
js图片处理示例代码
2014/05/12 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
2016/03/09 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
Vue实现web分页组件详解
2017/11/28 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
2018/01/08 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
[02:05:03]完美世界DOTA2联赛循环赛 LBZS VS Matador BO2 10.28
2020/10/28 DOTA
Python实例一个类背后发生了什么
2016/02/09 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
2019/10/24 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
构造器Constructor是否可被override?
2013/08/06 面试题
网吧消防安全制度
2014/01/28 职场文书
协会周年庆活动方案
2014/08/26 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript