位置: 编程技术 - 正文

Python使用pygame模块编写俄罗斯方块游戏的代码实例(python pygame模块详解)

编辑:rootadmin

推荐整理分享Python使用pygame模块编写俄罗斯方块游戏的代码实例(python pygame模块详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python pygame模块详解,python pygame模块详解,pythonpygame模块,python pygame模块详解,pycharm pygame,python pygame模块详解,pygame模块的介绍,python pygame模块详解,内容如对您有帮助,希望把文章链接给更多的朋友!

文章先介绍了关于俄罗斯方块游戏的几个术语。

边框——由*个空格组成,方块就落在这里面。 盒子——组成方块的其中小方块,是组成方块的基本单元。 方块——从边框顶掉下的东西,游戏者可以翻转和改变位置。每个方块由4个盒子组成。 形状——不同类型的方块。这里形状的名字被叫做T, S, Z ,J, L, I , O。如下图所示:

模版——用一个列表存放形状被翻转后的所有可能样式。全部存放在变量里,变量名字如S_SHAPE_TEMPLATE or J_SHAPE_TEMPLATE着陆——当一个方块到达边框的底部或接触到在其他的盒子话,我们就说这个方块着陆了。那样的话,另一个方块就会开始下落。下面先把代码敲一遍,试着了解作者意图,体会俄罗斯方块游戏的制作过程。

代码一开始仍是一些变量的初始化,我们这里还加载了time模块,后面会用到。BOXSIZE, BOARDWIDTH, BOARDHEIGHT与前面贪吃蛇相关初始化类似,使其与屏幕像素点联系起来。

这两个变量的作用是这样的,每当游戏者按下左键或右键,下降的方块相应的向左或右移一个格子。然而游戏者也可以一直按下方向左键或右键让方块保持移动。MOVESIDEWAYSFREQ这个固定值表示如果一直按下方向左键或右键那么每0.秒方块才会继续移动。MOVEDOWNFREQ 这个固定值与上面的是一样的除了它是告诉当游戏者一直按下方向下键时方块下落的频率。

这两句的意思就看下面这个图就明白了。

然后是一些颜色值的定义。其中要注意的是COLORS和LIGHTCOLORS,COLORS是组成方块的小方块的颜色,而LIGHTCOLORS是围绕在小方块周围的颜色,为了强调出轮廓而设计的。接着是定义方块了。游戏必须知道每个类型的方块有多少种形状,在这里我们用在列表中嵌入含有字符串的列表来构成这个模版,一个方块类型的模版含有了这个方块可能变换的所有形状。比如I的模版如下:

TEMPLATEWIDTH = 5和TEMPLATEHEIGHT = 5则表示组成形状的行和列,如下图所示:

在看这段定义。

PIECES这个变量是一个字典,里面储存了所有的不同模版。因为每个又有一个类型的方块的所有变换形状。那就意味着PIECES变量包含了每个类型的方块和所有的的变换形状。这就是存放我们游戏中用到的形状的数据结构。(又加强了对字典的理解)主函数main()主函数的前部分主要是创建一些全局变量和在游戏开始之前显示一个开始画面。

Python使用pygame模块编写俄罗斯方块游戏的代码实例(python pygame模块详解)

上面这段代码中runGame()是程序的核心部分。循环中首先简单的随机决定采用哪个背景音乐。然后调用runGame(),当游戏失败,runGame()就会返回到main()函数,这时会停止背景音乐和显示游戏失败的画面。当游戏者按下一个键,showTextScreen()显示游戏失败的函数就会返回。游戏循环会再次开始然后继续下一次游戏。runGame()

在游戏开始和方块掉落之前,我们需要初始化一些跟游戏开始相关的变量。fallingPiece变量被赋值成当前掉落的变量,nextPiece变量被赋值成游戏者可以在屏幕NEXT区域看见的下一个方块。

这部分包含了当方块往底部掉落时的的所有代码。fallingPiece变量在方块着陆后被设置成None。这意味着nextPiece变量中的下一个方块应该被赋值给fallingPiece变量,然后一个随机的方块又会被赋值给nextPiece变量。lastFallTime变量也被赋值成当前时间,这样我们就可以通过fallFreq变量控制方块下落的频率。来自getNewPiece函数的方块只有一部分被放置在方框区域中。但是如果这是一个非法的位置,比如此时游戏方框已经被填满(isVaildPostion()函数返回False),那么我们就知道方框已经满了,游戏者输掉了游戏。当这些发生时,runGame()函数就会返回。事件处理循环事件循环主要处理当翻转方块,移动方块时或者暂停游戏时的一些事情。暂停游戏

如果游戏者按下P键,游戏就会暂停。我们应该隐藏掉游戏界面以防止游戏者作弊(否则游戏者会看着画面思考怎么处理方块),用DISPLAYSURF.fill(BGCOLOR)就可以实现这个效果。注意的是我们还要保存一些时间变量值。

停止按下方向键或ASD键会把moveLeft,moveRight,movingDown变量设置为False.,表明游戏者不再想要在此方向上移动方块。后面的代码会基于moving变量处理一些事情。注意的上方向键和W键是用来翻转方块的而不是移动方块。这就是为什么没有movingUp变量.

当左方向键按下(而且往左移动是有效的,通过调用isVaildPosition()函数知道的),那么我们应该改变一个方块的位置使其向左移动一个通过让rallingPiece['x']减1.isVaildPosition()函数有个参数选项是adjX和adjY.平常,isVaildPostion()函数检查方块的位置通过函数的第二个参数的传递。然而,有时我们不想检查方块当前的位置,而是偏离当前方向几个格子的位置。比如adjX=-1,则表示向左移动一个格子后方块的位置,为+1则表示向右移动一个格子后的位置。adjY同理如此。movingLeft变量会被设置为True,确保方块不会向右移动,此时movingRight变量设置为False。同时需要更新lastMoveSidewaysTime的值。这个lastMoveSidewaysTime变量设置的原因是这样。因为游戏者有可能一直按着方向键让其方块移动。如果moveLeft被设置为True,程序就会知道方向左键已经被按下。如果在lastMoveSidewaysTime变量储存的时间基础上,0.秒(储存在MOVESIDEAYSFREQ变量中)过去后,那么此时程序就会将方块再次向左移动一个格子。

如果方向键上或W键被按下,那么就会翻转方块。上面的代码做的就是将储存在fallingPiece字典中的‘rotation'键的键值加1.然而,当增加的'rotation'键值大于所有当前类型方块的形状的数目的话(此变量储存在len(SHAPES[fallingPiece['shape']])变量中),那么它翻转到最初的形状。

如果翻转后的形状无效因为其中的一些小方块已经超过边框的范围,那么我们就要把它变回原来的形状通过将fallingPiece['rotation')减去1.

这段代码与上面之前的那段代码是一个意思,不同的是这段代码是当游戏者按下Q键时翻转方块朝相反的方向。这里我们减去1而不是加1.

如果下键被按下,游戏者此时希望方块下降的比平常快。fallingPiece['y'] += 1使方块下落一个格子(前提是这是一个有效的下落)moveDown被设置为True,lastMoceDownTime变量也被设置为当前时间。这个变量以后将被检查当方向下键一直按下时从而保证方块以一个比平常快的速率下降。

当游戏者按下空格键,方块将会迅速的下落至着陆。程序首先需要找出到它着陆需要下降个多少个格子。其中有关moving的三个变量都要被设置为False(保证程序后面部分的代码知道游戏者已经停止了按下所有的方向键)。

这段代码是处理一直按下某个方向键时的情况。如果用户按住键超过0.秒。那么表达式(movingLeft or movingRight) and time.time() - lastMoveSidewaysTime > MOVESIDEWAYSFREQ:返回True。这样的话我们就可以移动方块向左或向右移动一个格子。这个做法是很用的,因为如果用户重复的按下方向键让方块移动多个格子是很烦人的。好的做法是,用户可以按住方向键让方块保持移动直到松开键为止。最后别忘了更新lastMoveSideWaysTime变量。

这段代码的意思跟上面的代码差不多。

方块自然下落的速率由lastFallTime变量决定。如果自从上个方块掉落了一个格子后过去了足够的时间,那么上面代码就会再让方块移动一个格子。

一波神奇的Python语句、函数与方法的使用技巧总结 显示有限的接口到外部当发布python第三方package时,并不希望代码中所有的函数或者class可以被外部import,在__init__.py中添加__all__属性,该list中填写可以i

使用Python编写简单的画图板程序的示例教程 从这次开始,我会由简单到困难(其实也不会困难到哪里去)讲几个例程,每一个例程都是我自己写(或者修改,那样的话我会提供原始出处)的,都

Python操作MySQL数据库9个实用实例 在Windows平台上安装mysql模块用于Python开发用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示。下边是打包了与版本。MySQL-python-1.2.

标签: python pygame模块详解

本文链接地址:https://www.jiuchutong.com/biancheng/379934.html 转载请保留说明!

上一篇:用Python抢过年的火车票附源码(python写抢购教程)

下一篇:一波神奇的Python语句、函数与方法的使用技巧总结(python神奇的小海龟)

  • 购买需要安装的设备会计分录
  • 小规模纳税人如何做账
  • 房产税与土地使用税如何申报
  • 一般纳税人劳务费税率是多少
  • 发票没有纳税人识别号能开吗
  • 其他应收款账户期初借方余额为35400
  • 权责发生制和收付实现制是会计基础吗
  • 发票现金支付的做账增值税
  • 出口退税进项发票稽核
  • 单位发生的业务怎么做账
  • 福利费专票不抵税可以吗
  • 开了专票是否交文化事业建设费?
  • 2017年个税税率表及个税计算公式
  • 房地产企业所得税核定征收率
  • 以货抵债会计处理
  • 注册了店面没有营业执照
  • 苗木公司经营理念
  • 企业房租收入如何申报
  • 英雄联盟登录失效怎么回事
  • 投资回报期限
  • 财务里计提是什么意思
  • win11 pin失效
  • 中秋福利发放现金怎么做表
  • 分公司收到总公司拨款怎么做分录
  • 八个与cpu相关的字符
  • 金融企业贷款损失准备金计提比例
  • 气泡星云图片
  • 多交税款的退还
  • 计提未支付的费用
  • 当月计算的增值税怎么算
  • phppublic function
  • 销项税和进项税抵扣的会计分录
  • 未确认融资费用账务处理
  • transformers document
  • 金蝶专业版固定资产初始数据录入
  • 微信小程序slot
  • php如何入门
  • 外地工程预缴税款怎么入账啊
  • 关于专利技术转让的说法
  • 什么是行政规费和税费
  • 所有者权益合计等于什么
  • 非公司员工可以举报公司不交社保吗
  • 企业所得税的征税对象和纳税人分别负有的纳税义务
  • 发票领购簿用完了怎么领取
  • 海外工作工资税收问题
  • android 矩阵运算
  • 房产税城镇土地使用税申报期限
  • 车辆保险发票一般在哪开
  • 公司因担保产生损失
  • 单位购买公文包合法吗
  • 收款单属于什么科目
  • 2020年账簿印花税减免政策
  • 公司入账是什么意思
  • 食堂的电费能分两次交吗
  • mysql 备份和恢复
  • 经典sql查询语句50条
  • mysql5.7版本下载
  • rtm平台全称
  • linux系统中怎么全选
  • linux 匹配字符
  • rhel6.5安装教程
  • putty连接ubuntu
  • windows8.1rt
  • centos7.6有线连接
  • rtvscn95.exe - rtvscn95是什么进程 有什么用
  • ixapplet.exe - ixapplet是什么进程 有何作用
  • win7系统在电源选项找不到屏幕亮度
  • Win7安装VPN软件后无法上网是什么原因如何解决
  • win10电脑补丁 kb5000802
  • 华为nova7耳机怎么戴
  • GLSL Tessellation Shader的编程入门介绍
  • unity字符串
  • js设计模型
  • jquery增加
  • 税务稽查条例操作规程
  • 南京电费余额查询
  • 建筑业按多少税收
  • 汽车购车发票开完票能更改名字吗?
  • 调研基本情况介绍范文
  • 一般纳税人选择简易计税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设