使用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自动化测试工具Splinter简介和使用实例
May 13 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
Python实现的从右到左字符串替换方法示例
Jul 06 Python
python退出命令是什么?详解python退出方法
Dec 10 Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
Python测试模块doctest使用解析
Aug 10 Python
python实现多线程端口扫描
Aug 31 Python
python+opencv实现视频抽帧示例代码
Jun 11 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
Terran兵种介绍
2020/03/14 星际争霸
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
JavaScript 创建对象
2009/07/17 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python 类的继承实例详解
2017/03/25 Python
Django restframework 源码分析之认证详解
2019/02/22 Python
python的一些加密方法及python 加密模块
2019/07/11 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
python GUI模拟实现计算器
2020/06/22 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
银行实习自我鉴定
2013/10/12 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
思想品德课教学反思
2014/02/10 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
城南旧事电影观后感
2015/06/16 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
python实现局部图像放大
2021/11/17 Python
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫