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

开发 后端
最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了。

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

 

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

最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了。

1.游戏介绍

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

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

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

 

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

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

 

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

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

 

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

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

 

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

2.源码剖析

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

 

  1. │ base.py  
  2. │ game_modes.py  
  3. │ main.py  
  4. │ run_to_release.py  
  5. │ tetris.py  
  6. │ ... ....  
  7. ├─assets 
  8.  │ ... ...  
  9. │  
  10. └─screens  
  11. ... ... 

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

  1. sys.exit() 

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

 

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

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

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

 

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

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

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

  1. pressed_keys.add(event.key

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

这样就完成了一次用户事件的传递,然后再又后端对用户的事件进行处理,展示在游戏当中。当然,更复杂的还在后面,这里只是一个简单的事件处理,当然也是最重要的事件处理部分。

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2015-01-22 15:36:46

游戏源码

2011-06-13 18:21:12

2014-10-08 10:04:14

代码解释俄罗斯方块

2020-02-27 13:43:14

Emacs俄罗斯方块应用

2021-01-12 12:16:55

鸿蒙HarmonyOS游戏

2021-12-29 11:56:16

Linux俄罗斯方块

2014-05-26 10:07:18

Javascript俄罗斯方块

2015-04-28 09:21:28

JSJS俄罗斯方块游戏帝国

2016-06-13 10:21:49

二维码条形码二进制

2023-09-25 12:35:27

Python

2020-12-17 10:02:16

鸿蒙Hi3861开发板

2009-06-08 09:59:24

谷歌俄罗斯方块版权

2023-09-26 08:51:29

PygamePython语言

2012-11-05 10:50:50

程序员万圣节俄罗斯方块

2020-12-11 12:45:04

鸿蒙Hi3861游戏

2014-06-09 12:47:35

俄罗斯方块

2011-11-17 16:14:25

Jscex

2023-10-17 10:20:53

VueReact

2022-11-29 16:35:02

Tetris鸿蒙

2011-07-06 10:12:26

Objective-CCSSJavaScript
点赞
收藏

51CTO技术栈公众号