位置: 编程技术 - 正文

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神奇的小海龟)

  • 企业中秋晚会活动方案
  • 职工教育经费申请事由
  • 税金及附加借贷科目
  • 企业自产的产品转为自用
  • 装修行业小规模纳税人增值税专票
  • 公司油票怎么抵扣
  • 长期股权投资其他综合收益借贷方向
  • 季度不超过9万
  • 增值税普通发票和普通发票的区别怎么交税
  • 存货置换固定资产
  • 房地产企业城建税预缴可以抵扣吗
  • 企业所得税调增项目有哪些
  • 退休人员返聘工资交个人所得税标准
  • 开具的增值税发票丢失最新处理办法
  • 印花税这个月没交怎么办
  • 失控进项发票转出 补税做账
  • 房产税应当计入什么科目
  • 收代扣代收代征手续费会计分录
  • 代扣代缴增值税如何申报抵扣
  • 建筑劳务公司的会计账务处理
  • 资本公积 税务
  • 如何正确使用好薪酬调查结果
  • 公司借银行款会计分录
  • qtaet2s.exe - qtaet2s是什么进程 有什么用
  • 如何利用命令符复制文件
  • 政府补助开票怎么申报增值税
  • 员工聚餐费用计入
  • 代办税务需要什么资质
  • 企业租赁房屋怎么开发票
  • linux子网掩码自动变成24
  • 电脑桌面调出键盘
  • fpx是什么文件
  • 售后回租融资租赁案例
  • 购买农产品没有发票入帐怎么办
  • 购买财务软件报什么科目
  • 一岁宝宝喝红糖姜水
  • vue table导出excel
  • 本地部署gpt4
  • program status
  • 从业人数啥意思
  • 现金流量表要填满吗
  • vue实现注册
  • 海关进口增值税专用缴款书如何抵扣
  • db2udb
  • 公司全部股权转让流程
  • 什么叫做印花??
  • 房地产增值税抵减
  • 保险补偿多久到账
  • 坏账准备计提方法一经确定不得随意变更这种做法体现了
  • 个税申报工资比实发工资高
  • 进项税已入账未认证申报表怎么填
  • 社保逾期滞纳金和利息
  • 税后扣税
  • 亏损股东现金补偿怎么算
  • 发票怎么打印的出来
  • 一年以内到期的长期借款属于
  • 外贸内销业务哪个部门管
  • 出售固定资产属于什么收入
  • mysql实现合并同一ID对应多条数据的方法
  • mysql5624安装教程
  • win7系统摄像头打不开
  • win10出现
  • win102009发布日期
  • windows无法启动怎么解决
  • xp系统自动升级win7
  • 苹果电脑连不上网络但是wifi正常
  • win8无法识别存档文件
  • win10如何打开ie8
  • win7thin
  • dmg是啥文件
  • Extjs中通过Tree加载右侧TabPanel具体实现
  • 电脑qq清理
  • Python实现Mysql数据库连接池实例详解
  • js中的$是什么意思
  • django forloop
  • python 线程教程
  • 增值税计税依据含运费吗
  • 财产转让所得适用税率
  • 财税方面的问题有什么
  • 税务筹划企业所得税案例分析题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设