使用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实现ping的方法
Jul 06 Python
浅析Python 中整型对象存储的位置
May 16 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
python解析基于xml格式的日志文件
Feb 25 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
在python中用url_for构造URL的方法
Jul 25 Python
python线程中的同步问题及解决方法
Aug 29 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
Python求正态分布曲线下面积实例
Nov 20 Python
Python while循环使用else语句代码实例
Feb 07 Python
Django values()和value_list()的使用
Mar 31 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调用C#开发的dll类库方法
2014/07/28 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
Aptana调试javascript图解教程
2009/11/30 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
python基础之入门必看操作
2017/07/26 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python多进程中的内存复制(实例讲解)
2018/01/05 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
2018/05/26 Python
Python列表对象实现原理详解
2019/07/01 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
wxPython实现带颜色的进度条
2019/11/19 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
日本最大化妆品和美容产品的综合口碑网站:cosme shopping
2019/08/28 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
个人自我剖析材料
2014/09/30 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
员工工作能力评语
2014/12/31 职场文书
小学校长个人总结
2015/03/03 职场文书
护士自我推荐信范文
2015/03/24 职场文书