使用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 相关文章推荐
linux系统使用python获取cpu信息脚本分享
Jan 15 Python
python实现保存网页到本地示例
Mar 16 Python
pycharm 使用心得(七)一些实用功能介绍
Jun 06 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
python生成密码字典的方法
Jul 06 Python
简单了解python的内存管理机制
Jul 08 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
Sep 03 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
解决python3输入的坑——input()
Dec 05 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
PHP单态模式简单用法示例
2016/11/16 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
2012/03/15 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
解决vue 引入子组件报错的问题
2018/09/06 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
详解Django的CSRF认证实现
2018/10/09 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
python实现单链表的方法示例
2019/09/03 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Python eval函数介绍及用法
2020/11/09 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
护理专业推荐信
2013/11/07 职场文书
干部行政关系介绍信
2014/01/17 职场文书
公司投资建议书
2014/05/16 职场文书
应用心理学专业求职信
2014/08/04 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers