使用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实现类似ftp传输文件的网络程序示例
Apr 08 Python
Python中join和split用法实例
Apr 14 Python
总结Python编程中函数的使用要点
Mar 20 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python入门之三角函数atan2()函数详解
Nov 08 Python
wxPython之解决闪烁的问题
Jan 15 Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Matplotlib.pyplot 三维绘图的实现示例
Jul 28 Python
python从ftp获取文件并下载到本地
Dec 05 Python
Python 制作自动化翻译工具
Apr 25 Python
Python自动化实战之接口请求的实现
May 30 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
2019/10/30 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Python如何在windows环境安装pip及rarfile
2020/06/15 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
2014/01/27 HTML / CSS
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
包装类的功能、种类、常用方法
2012/01/27 面试题
行政专员岗位职责说明书
2014/09/01 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技