位置: 编程技术 - 正文

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

  • 海关完税凭证是交给海关么
  • 实收资本印花税如何申报
  • 开出已验旧的发票怎么办
  • 有限公司能否申请破产
  • 收到损坏赔偿款怎么入账
  • 销售退货时发票已认证怎么办
  • 交易性金融资产和其他权益工具投资的区别
  • 优惠券抵扣账务处理流程
  • 拆迁房视同销售成本可以抵减吗?
  • 员工迟到扣款该怎么处理
  • 减半征收政策
  • 增值税普通发票和专用发票有什么区别
  • 个税合理避税的意义
  • 简易计税方法适用范围
  • 资产负债表和利润表在哪里查
  • 购入土地使用权增值税税率
  • 对子公司计提减值准备影响合并利润吗
  • 员工奖励专项基金怎么填
  • apple ID怎么解绑设备
  • 增值税年末结转是结转全年吗
  • 苹果手机上传速度很慢
  • php运用于哪些领域
  • php多维数组合并相同key
  • 工程施工与工程结算会计科目
  • 贷款支付的本息如何记账
  • 解决烧心最快方法
  • 税前扣除的比例
  • php数组求最大值
  • 用html语言完成以下内容
  • 挥别2020逐梦2021
  • mysql封装函数
  • 代发工资范围
  • 增量留抵税额退还举例
  • 注销公司怎么搞
  • 织梦自定义模型调用
  • 工会经费按每月
  • 投资性房地产在建期间需要摊销吗
  • 电子承兑对方拒绝签收多久能到账
  • 个体工商户季度超过9万怎么交税
  • 收到服务费发票怎么做账
  • 销售成品油的税率
  • 会计学营业利润
  • 支付员工经济补偿金会计处理方式
  • 银行承兑汇票如何签收
  • 营改增后房地产企业如何开票
  • 化妆品消费税纳税标准
  • 公司转给其他公司的投资款
  • 以前年度多计提了费用
  • 收到垫付款计入什么科目
  • 采用公允价值模式计量的投资性房地产不需要计提折旧
  • 货代代缴增值税关税如何做账
  • 返利开红字发票怎么做账
  • 营业外支出会导致所有者权益减少吗
  • 退资本金现金流量表走哪一项
  • 主营业务成本怎么结转本年利润
  • 管理费用结转有余额吗
  • 记账凭证模板
  • 进入四大会计师事务所怎么样
  • 记账凭证制作流程
  • mysql5.7.29安装
  • sql实用教程
  • 在windows七中
  • windowsxp收藏夹在哪
  • linux怎么操作
  • win7系统每次开机都要选择用户
  • 怎么禁止电脑qq自动启动
  • win7小技巧
  • tf-idf例题
  • 第三章之一、使用二手设备降低生产成本读后感
  • android 图片
  • 家字取名男孩名字
  • unity3d的游戏
  • 利用python做一个文字小游戏
  • 如何用jquery
  • [置顶]游戏名:chivalry2
  • javascript教学视频
  • JavaScript中的复杂数据类型又称为
  • 玩转兽世:兽夫,亲一个
  • jQuery插件安装教程
  • 交契税可以用现金吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设