位置: 编程技术 - 正文

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

  • 纳税人离线开票时间的文件
  • 疫情期间社保单位不交个人吃亏吗
  • 加工承揽属于劳务关系吗
  • 民办学校房屋要求
  • 销户之后可以重新申请吗
  • 工程销项税率
  • 支付境外软件服务怎么用
  • 红字发票科目入进项税额还是进项税额转出
  • 公司的车辆赠送公司
  • 收到分包工程发票怎么做分录
  • 开完红字发票后,正数发票如何开具?
  • 企业外购的房屋建筑物是否属于非房地产企业
  • 集体土地上的不动产能符合异议28条规定吗
  • 技术服务合同在北京由哪个法院管辖
  • 调整以前年度应交税费分录
  • 代购商品委托书怎么写
  • 多计提的冲回如何记账?
  • 1697510768
  • 汇算清缴中的科目怎么填
  • 在win7系统中怎样为另外一块硬盘安装系统
  • 多结转成本会导致什么
  • php实现查询功能
  • win10组策略关闭defender
  • linux 硬盘满了
  • Win11 Build 22000.160(KB5005189)预览版发布,更新了哪些内容
  • hpptd.exe
  • mini program是什么
  • 股权转让怎么交印花税2019年最新
  • 豁免债权如何做账
  • Joomla调用系统自带编辑器的实现方法
  • vue.js前端
  • tar -xvf命令
  • 取得专票怎么做账
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • 公司有一个残疾人
  • 银行存款利息应记什么科目
  • 销售旧货和销售使用过的固定资产
  • 企业净利润率是多少好
  • 房地产企业预缴增值税会计处理
  • 个体户转账到法人账户要交税吗
  • 电子承兑汇票到期怎么收款
  • 金税盘密码和口令是多少
  • 数据源suspended
  • day11-Servlet01
  • mysql一次io
  • mysql常用优化方案
  • 企业付美金外汇要交税吗
  • mongodb数据库语句
  • 税前列支的项目
  • 固定资产资本化后续支出
  • 差旅费报销会计分录题目
  • 其他应付款如何清零
  • 社保缓缴政策2020
  • 公司股权作价转让会计分录案例
  • 餐饮业燃气费计入什么科目
  • 土地需要摊销嘛?
  • 零工发生事故算工伤吗
  • 什么情况下使用for循环
  • 怎么验证触发器的执行
  • centos安装类型选择
  • pps影音怎么没有了
  • win10预览版选哪个
  • 如何查看windows8.1版本
  • mac使用vim
  • 360安全卫士windows7
  • win10预览版21277下载
  • linux强大的网络功能
  • win7 安装系统
  • 安卓百分百
  • js domcontentloaded
  • python opencv
  • cocos3.0
  • jQuery Ajax请求后台数据并在前台接收
  • android 系统app权限
  • 每天一篇经济学人
  • android如何防止js注入
  • 河南省国税电子普通发票发票真伪查询系统
  • 国家税务总局商洛市税务局
  • 车船税填表说明
  • 重庆车牌号申请
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设