使用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命令行交互提示符的方法
Jan 14 Python
浅谈python数据类型及类型转换
Dec 18 Python
微信跳一跳python代码实现
Jan 05 Python
python用户管理系统
Mar 13 Python
pandas修改DataFrame列名的方法
Apr 08 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
Python与C/C++的相互调用案例
Mar 04 Python
pytorch 带batch的tensor类型图像显示操作
May 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中反射的应用
2013/06/18 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
Python排序算法实例代码
2017/08/10 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Django中Aggregation聚合的基本使用方法
2020/07/09 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python 数据类型强制转换的总结
2021/01/25 Python
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
经济管理专业毕业生推荐信
2013/11/11 职场文书
给交警的表扬信
2014/01/12 职场文书
上班上网检讨书
2014/01/29 职场文书
项目合作协议书范本
2014/04/16 职场文书
国博复兴之路观后感
2015/06/02 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书