使用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脚本将Bing的每日图片作为桌面的教程
May 04 Python
用Python写一个无界面的2048小游戏
May 24 Python
Python中XlsxWriter模块简介与用法分析
Apr 24 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
pytorch训练imagenet分类的方法
Jul 27 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
Jun 17 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
JavaScript Math.round() 方法
2015/12/18 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
js getBoundingClientRect使用方法详解
2019/07/17 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
深入理解Python中变量赋值的问题
2017/01/12 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
2020/02/17 Python
Python importlib动态导入模块实现代码
2020/04/16 Python
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
Zalando Lounge瑞士:时尚与生活方式购物俱乐部
2020/03/12 全球购物
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
化工专业应届生求职信
2013/11/08 职场文书
听课评语大全
2014/04/30 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
如何在Python项目中引入日志
2021/05/31 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL