位置: 编程技术 - 正文

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

  • 一般纳税人没有开票要交税吗
  • 一个季度超过30万怎么做账
  • 其他应收款和其他应付款可以通用吗
  • 营改增利息收入不能抵扣
  • 财务将利润表已申报还能修改吗
  • 公司刻一套章子多少钱
  • 收到服务费发票摘要怎么写
  • 发生销售折让可以不开具
  • 建筑施工企业检查的内容包括什么
  • 为什么要开增值税
  • 没有房产证应该找谁
  • 特许权使用费如何确认收入
  • 一般纳税人的主表
  • 融资性售后回租和融资租赁的区别
  • 怎么查企业的增值税纳税额
  • 营改增后城建税怎么算
  • 框架采购合同如何计贴印花税?
  • 出口0税率是免抵退还是免税
  • win 10动态锁是什么
  • 一次性收取一年租金
  • 出差人员差旅费作细的说明叫什么
  • linux下4种kill某个用户所有进程的方法
  • 个人通讯费可以税前扣除吗
  • php静态页面实现搜索功能
  • 求源代码
  • 琼斯的大海怪
  • html的论文
  • 坏账准备的借贷方向表示什么意思
  • php中session什么意思
  • css文字显示一行
  • 基于stm32的毕业设计
  • websocket怎么读
  • 递延收益和其他应付款的区别
  • 采矿权如何进行融资
  • 国外商贸公司
  • phpcms v9安装教程
  • mysql中事务的作用
  • 一般纳税人的账户可以随便转账到私人账户吗
  • 分公司可以独立签约吗
  • 无偿调入的固定资产其贷方应计入
  • sqlserver数据库中进行查询所使用的语言为
  • 个体工商营业执照注销需要缴费吗
  • 公司房租发票是法人名字能入账吗安全吗
  • 技术人员工资计入生产成本吗
  • 印花税如何申请退税
  • 城投公司政府购买服务
  • 废品收入该如何开票
  • 收到承兑的账务处理
  • 收到投资款如何申报印花税
  • 纳税期限与申报期限的区别
  • 收款人是否应当承担还款责任
  • 退货销售折让会计分录
  • 外聘人员差旅费用无票调增
  • 应交税费借方余额填列资产负债表
  • 开红字发票如何做分录?
  • 固定资产的入账价值包括增值税吗?
  • 年初速动比率怎么算
  • 会计凭证中阿拉伯数字如何书写
  • 商品销售成本的计算可以采用逆算成本法,其操作方法是
  • mysql实时监控工具
  • 数码相机无线连接手机
  • linux 禁用root
  • win8系统如何查看文件浏览痕迹记录
  • 桌面上有desktop.ini文件
  • win10盘符怎么看
  • cocos 2d x
  • SQLite -- 嵌入式关系型数据库
  • 判断输入的日期是一年中第几天
  • 客齐是什么意思
  • jqgrid获取选中行
  • linux启动过程流程图
  • js字符串的操作方法
  • 砂石需要缴纳资源税吗
  • 深圳国税网上申报流程图
  • 如何查询企业是小规模还是一般
  • 国家税务总局遴选拟录取名单
  • 新疆维吾尔自治区民族团结进步工作条例
  • 电信追缴欠费的工作方案有哪些
  • 给税务局说明怎写
  • 大宗物流服务平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设