最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了。作者是 Mikhail ,项目(tetris_for_two)地址是:https://gitlab.com/2pi360/tetris_for_two

1.游戏介绍

下面就给大家介绍一下这个用Python写的俄罗斯方块具体功能。它一共有七个游戏模式:

1. 单人模式2. 普通双人模式3. 镜像双人模式(即掉落方块都一样)4. 双人加速模式(每消去一行都会给对方加速)5. 双人交换控制模式(一次控制自己的方块,一次控制对方的)6. 双人平衡模式(会改变对方的容量)7. 双人单容器模式

没错,是不是被这丰富的游戏模式震惊到了?而且这款游戏的界面设计也是相当简洁舒服(而且玩这样的Python开源游戏,你永远不会被广告气到):

不仅如此,除了wasd和上下左右键,它还支持用游戏手柄(仅一个)进行游戏,并且能切换两个玩家的按键设置:

双人模式类似如下, 非常适合小情侣之间消耗时光哦(如果你们都喜欢玩俄罗斯方块的话)

尤其是双人协作模式,两个人一起解决问题也是增进感情的好方法:

还有其他几种游戏模式,大家可以上 itch 上下载游戏体验,或者在公众号后台回复俄罗斯方块下载完整源代码和游戏包(各个系统都有)。

2.源码剖析

当然,我们首要目的还是学习这款游戏的源代码,下面就给大家介绍一些这款游戏的部分核心代码。下载该开源项目后,你会发现它的py文件分布如下:

│ base.py│ game_modes.py│ main.py│ run_to_release.py│ tetris.py│ ... ....├─assets│ ... ...│└─screens... ...

其中,main.py是程序的入口点,首先看看模块引入,sys的引入是当然的,游戏结束的时候需要调用

sys.exit()

使得Python程序正常退出。这个游戏的引擎使用了pygame,是一个比较老的基于Python的2D游戏引擎,不过也是因为存在时间长,它已经成为一个很成熟且易上手的2D游戏开发库 。

作者自己写了两个模块,一个是base,里面有画布配置、按键配置、玩家配置等等一系列游戏的基础设置。而 game_modes 则是七种游戏模式的逻辑所在模块,里头还引用了tetris.py,这个模块定义了整个俄罗斯方块旋转的方法及其数据结构。

不过由于时间关系,我们重点看看base里的主循环main_loop:

pygame.time.Clock()用于配置游戏的帧数,Clock.tick(frameate) 代表每秒framerate帧运行,也就是说,每秒不会执行超过 framerate 次循环 。这个参数的值,我们可以在主函数里看到是600. 也就是这个循环每秒不会超过600次。

pygame.event.get() 是pygame游戏引擎的事件处理器,它用于处理所有的事件,好像打开大门让所有的人进入,然后我们可以根据事件不同的属性做相应的操作,如 event.type == pgl.KEYDOWN 表示键盘被按下时,执行条件中的语句:

pressed_keys.add(event.key)

便将其加入到pressed_keys集合中,yield返回生成器,也就是说只要程序不被终止,这个函数就会不断地返回四个值: events, time_passed, pressed_keys 或 {(0, 0)}。events就是用户触发的事件,time_passed就是这些事件的时长,pressed_keys即用户按下的键。

这样就完成了一次用户事件的传递,然后再又后端对用户的事件进行处理,展示在游戏当中。当然,更复杂的还在后面,这里只是一个简单的事件处理,当然也是最重要的事件处理部分,如果大家有兴趣的话,可以 在公众号后台回复俄罗斯方块下载完整源代码进行学习。

如果你喜欢今天的Python 教程,请持续关注Python实用宝典,如果对你有帮助,麻烦在下面点一个赞/在看

,有任何问题都可以在下方留言,我们会耐心解答的!

点击下方阅读原文可以获取所有代码和链接哦!

Python实用宝典 (pythondict.com)

不只是一个宝典

欢迎关注公众号:Python实用宝典

python俄罗斯方块落地展示_Python 竟能开发如此精美的俄罗斯方块!相关推荐

  1. Python 竟能开发如此精美的俄罗斯方块!

    最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了.作者是 Mikhail ,项目(tetris_for_two)地址是: https://g ...

  2. Python 竟能开发如此精美的俄罗斯方块!有没有很神奇!

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到 ...

  3. python发送excel文件_Python操作Excel, 开发和调用接口,发送邮件

    接口开发: importflaskimporttoolsimportjson,redisimportrandom server= flask.Flask(__name__)#新建一个服务,把当前这个p ...

  4. 用python画路飞代码_python 全栈开发,Day105(路飞其他数据库表结构,立即结算需求)...

    考试第三部分:Django 16.  列列举你熟悉的Http协议头以及作用.(1分) Accept-Charset: 用于告诉浏览器,客户机采用的编码 Host: 客户机通过这个头告诉服务器,想访问的 ...

  5. python打地鼠游戏代码_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

    如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作.文 ...

  6. python示波器 波形数据_Python在嵌入式开发中的应用——数据示波器

    Python在嵌入式开发中的应用 引言 在嵌入式开发中我们常常要进行数据分析.算法设计.原型验证.自动化测试.辅助工具设计,每个环节的工作效率对整体的开发都非常重要.选用一个好的辅助开发工具是非常必要 ...

  7. python打地鼠游戏教程_Python 0基础开发游戏:打地鼠(详细教程)VS code版本

    如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作.文 ...

  8. python数据分析图表展示_python数据分析——图表

    根据https://www.cnblogs.com/chenqionghe/p/12254085.html编写 为加深记忆,笔者把这位博主的十二种图揣摩一遍.(仅为本人学习所用,所以在原代码里面加入了 ...

  9. python企业微信回调_Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例...

    本文实例讲述了Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息.分享给大家供大家参考,具体如下: 说明:此代码用于接收手机微信端发送的消息 #-*- coding:utf-8 ...

最新文章

  1. 绘制分类界面以及性能曲面中的meshgrid函数
  2. forfiles命令批量删除N天前文件
  3. MATLAB三维曲面绘图你不得不知道的...
  4. Google开源Leak Finder——用于检测内存泄漏的JavaScript工具
  5. 真效率神器,UI稿智能转换成前端代码,准确率极高
  6. leetcode 231. 2 的幂
  7. mysql批量用trim限定_如何使用trim()并更新mysql中的所有行[复制]
  8. python包标准类型和动态导入模块和多态和反射和授权
  9. IEEE最新声明:华为员工不能参与审稿,但是还能继续提供赞助
  10. java怎么录入4位会员号_[Java源码]键盘输入会员卡号,对其格式、位数进行判断,不符合规则会跳转重新输入 | 学步园...
  11. linux下挂载共享目录,linux下挂载windows的共享目录
  12. db2exc_971_WIN_x86,db2数据库下载,不是官方下载,直接可下
  13. LeetCode day11
  14. Longest Palindrome
  15. 小程序 js把本地或取得临时的视频或者图片路径封装成file文件流
  16. linux怎么重复命令,Linux系统中重复执行历史命令的方法有哪些?
  17. QQ邮箱服务器协议,QQ邮箱新功能 IMAP协议支持
  18. 炮轰三国服务器维护,炮轰三国小程序-微信炮轰三国小程序小游戏-游戏宝手游网...
  19. Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Gener
  20. 计算机硬件工程师需要学哪些,嵌入式硬件工程师要求是什么?需要掌握哪些内容...

热门文章

  1. win10系统日志事件ID 10016
  2. Site-to-Site VPN配置和调试实践:构建安全的远程网络连接
  3. JavaScript中如何正确的获取字符串长度
  4. MATLAB激活后还要激活
  5. 软件测试有专门的学校吗,开设软件测试专业学校都有哪些?
  6. 自适应20个广告位视频图片小说源码苹果cmsV10x 源码
  7. 基于python的网络爬虫技术_基于python的网络爬虫技术的研究
  8. 北京区块链规划重点发展海淀朝阳通州等区,加大对代币监管力度
  9. 图像操纵大师Xfermode讲解与实战——Android高级UI
  10. 第7章 - 多无人机系统的协同控制 --> 多无人机协同控制