当前位置: 首页 > 科技观察

Python也能开发出这么漂亮的俄罗斯方块

时间:2023-03-12 12:26:25 科技观察

前言本文文字及图片来源于网络,仅供学习交流之用,不得用于任何商业用途,版权归原作者所有,如有疑问,请及时联系我们处理。最近在找一些Python相关的游戏开发实例。正好在itch.io上闲逛,看到了这个俄罗斯方块项目。我顿时惊呆了。一、游戏介绍先介绍一下用Python编写的俄罗斯方块的具体功能。它共有七种游戏模式:单人模式、普通双人模式、镜像双人模式(即掉落的方块相同)、双人加速模式(每消掉一条线就会加速对手)双人交换控制模式(一次控制自己的方块,控制一次自己的方块)对方的)双人平衡模式(会改变对方的容量)双人单容器模式是的,你被这个丰富的震惊了吗游戏模式?而且这款游戏的界面设计也是相当简洁舒服(而且玩这种Python开源游戏,绝对不会被广告气死):不仅如此,除了wasd还有上下左右键,还支持手柄(只有一个)玩游戏,可以切换两个玩家的按键设置:双人模式类似下面,很适合小情侣之间消磨时光(如果你们都喜欢玩俄罗斯方块),尤其是双人合作模式。也是两个人一起解决问题,增进感情的好方法: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的次数。这个参数的值,我们在main函数中可以看到是600。也就是说这个循环每秒不会超过600次。pygame.event.get()是pygame游戏引擎的事件处理程序。用来处理所有的事件,就好像是开门让所有人进入,然后我们就可以根据事件的不同属性做相应的操作,比如event.type==pgl.KEYDOWN表示当键盘被按下时pressed,执行条件中的语句:pressed_keys.add(event.key)会把它加入到pressed_keys集合中,yield返回生成器,也就是说只要程序没有终止,这个函数就会连续返回四个值:events、time_passed、pressed_keys或{(0,0)}。events是用户触发的事件,time_passed是这些事件的持续时间,pressed_keys是用户按下的键。这样就完成了用户事件的传输,然后后台对用户事件进行处理,并在游戏中展示出来。当然,更复杂的事情还在后头,这里只是简单的事件处理,当然也是事件处理中最重要的部分。