python俄罗斯方块代码idle_Python使用pygame模块编写俄罗斯方块游戏的代码实例

更新时间:2023-06-25 01:29:13 阅读: 评论:0

python俄罗斯⽅块代码idle_Python使⽤pygame模块编写俄罗
斯⽅块游戏的代码实例
⽂章先介绍了关于俄罗斯⽅块游戏的⼏个术语。
边框——由10*20个空格组成,⽅块就落在这⾥⾯。
盒⼦——组成⽅块的其中⼩⽅块,是组成⽅块的基本单元。
⽅块——从边框顶掉下的东西,游戏者可以翻转和改变位置。每个⽅块由4个盒⼦组成。
形状——不同类型的⽅块。这⾥形状的名字被叫做T, S, Z ,J, L, I , O。如下图所⽰:
模版——⽤⼀个列表存放形状被翻转后的所有可能样式。全部存放在变量⾥,变量名字如S_SHAPE_TEMPLATE or
J_SHAPE_TEMPLATE
着陆——当⼀个⽅块到达边框的底部或接触到在其他的盒⼦话,我们就说这个⽅块着陆了。那样的话,另⼀个⽅块就会开始下落。
下⾯先把代码敲⼀遍,试着了解作者意图,体会俄罗斯⽅块游戏的制作过程。
远离危险>微信添加好友代码⼀开始仍是⼀些变量的初始化,我们这⾥还加载了time模块,后⾯会⽤到。BOXSIZE, BOARDWIDTH, BOARDHEIGHT与前⾯贪吃蛇相关初始化类似,使其与屏幕像素点联系起来。
这两个变量的作⽤是这样的,每当游戏者按下左键或右键,下降的⽅块相应的向左或右移⼀个格⼦。然⽽游戏者也可以⼀直按下⽅向左键或右键让⽅块保持移动。MOVESIDEWAYSFREQ这个固定值表⽰如果⼀直按下⽅向左键或右键那么每0.15秒⽅块才会继续移动。
MOVEDOWNFREQ 这个固定值与上⾯的是⼀样的除了它是告诉当游戏者⼀直按下⽅向下键时⽅块下落的频率。
这两句的意思就看下⾯这个图就明⽩了。
然后是⼀些颜⾊值的定义。其中要注意的是COLORS和LIGHTCOLORS,COLORS是组成⽅块的⼩⽅块的颜⾊,⽽LIGHTCOLORS是围绕在⼩⽅块周围的颜⾊,为了强调出轮廓⽽设计的。
接着是定义⽅块了。游戏必须知道每个类型的⽅块有多少种形状,在这⾥我们⽤在列表中嵌⼊含有字符串的列表来构成这个模版,⼀个⽅块类型的模版含有了这个⽅块可能变换的所有形状。⽐如I的模版如下:
TEMPLATEWIDTH = 5和TEMPLATEHEIGHT = 5则表⽰组成形状的⾏和列,如下图所⽰:
在看这段定义。
PIECES这个变量是⼀个字典,⾥⾯储存了所有的不同模版。因为每个⼜有⼀个类型的⽅块的所有变换形状。那就意味着PIECES变量包含了每个类型的⽅块和所有的的变换形状。这就是存放我们游戏中⽤到的形状的数据结构。(⼜加强了对字典的理解)
主函数main()长辈生日送什么礼物好
主函数的前部分主要是创建⼀些全局变量和在游戏开始之前显⽰⼀个开始画⾯。
档案的保管上⾯这段代码中runGame()是程序的核⼼部分。循环中⾸先简单的随机决定采⽤哪个背景⾳乐。然后调⽤runGame(),当游戏失
败,runGame()就会返回到main()函数,这时会停⽌背景⾳乐和显⽰游戏失败的画⾯。
当游戏者按下⼀个键,showTextScreen()显⽰游戏失败的函数就会返回。游戏循环会再次开始然后继续下⼀次游戏。
runGame()
奔腾的河流在游戏开始和⽅块掉落之前,我们需要初始化⼀些跟游戏开始相关的变量。fallingPiece变量被赋值成当前掉落的变量,nextPiece变量被赋值成游戏者可以在屏幕NEXT区域看见的下⼀个⽅块。
这部分包含了当⽅块往底部掉落时的的所有代码。fallingPiece变量在⽅块着陆后被设置成None。这意味着nextPiece变量中的下⼀个⽅块应该被赋值给fallingPiece变量,然后⼀个随机的⽅块⼜会被赋值给nextPiece变量。lastFallTime变量也被赋值成当前时间,这样我们就可以通过fallFreq变量控制⽅块下落的频率。
功放器
来⾃getNewPiece函数的⽅块只有⼀部分被放置在⽅框区域中。但是如果这是⼀个⾮法的位置,⽐如此时游戏⽅框已经被填满(isVaildPostion()函数返回Fal),那么我们就知道⽅框已经满了,游戏者输掉了游戏。当这些发⽣时,runGame()函数就会返回。
中国冬天哪里暖和
事件处理循环
事件循环主要处理当翻转⽅块,移动⽅块时或者暂停游戏时的⼀些事情。
暂停游戏
如果游戏者按下P键,游戏就会暂停。我们应该隐藏掉游戏界⾯以防⽌游戏者作弊(否则游戏者会看着画⾯思考怎么处理⽅块),⽤DISPLAYSURF.fill(BGCOLOR)就可以实现这个效果。注意的是我们还要
保存⼀些时间变量值。
停⽌按下⽅向键或ASD键会把moveLeft,moveRight,movingDown变量设置为Fal.,表明游戏者不再想要在此⽅向上移动⽅块。后⾯的代码会基于moving变量处理⼀些事情。注意的上⽅向键和W键是⽤来翻转⽅块的⽽不是移动⽅块。这就是为什么没有movingUp变量.
当左⽅向键按下(⽽且往左移动是有效的,通过调⽤isVaildPosition()函数知道的),那么我们应该改变⼀个⽅块的位置使其向左移动⼀个通过让rallingPiece['x']减1.isVaildPosition()函数有个参数选项是adjX和adjY.平常,isVaildPostion()函数检查⽅块的位置通过函数的第⼆个参数的传递。然⽽,有时我们不想检查⽅块当前的位置,⽽是偏离当前⽅向⼏个格⼦的位置。
⽐如adjX=-1,则表⽰向左移动⼀个格⼦后⽅块的位置,为+1则表⽰向右移动⼀个格⼦后的位置。adjY同理如此。
movingLeft变量会被设置为True,确保⽅块不会向右移动,此时movingRight变量设置为Fal。同时需要更新lastMoveSidewaysTime 的值。
这个lastMoveSidewaysTime变量设置的原因是这样。因为游戏者有可能⼀直按着⽅向键让其⽅块移动。如果moveLeft被设置为True,程序就会知道⽅向左键已经被按下。如果在lastMoveSidewaysTim
e变量储存的时间基础上,0.15秒(储存在MOVESIDEAYSFREQ变量中)过去后,那么此时程序就会将⽅块再次向左移动⼀个格⼦。
如果⽅向键上或W键被按下,那么就会翻转⽅块。上⾯的代码做的就是将储存在fallingPiece字典中的‘rotation'键的键值加1.然⽽,当增加的'rotation'键值⼤于所有当前类型⽅块的形状的数⽬的话(此变量储存在len(SHAPES[fallingPiece['shape']])变量中),那么它翻转到最初的形状。
如果翻转后的形状⽆效因为其中的⼀些⼩⽅块已经超过边框的范围,那么我们就要把它变回原来的形状通过将fallingPiece['rotation')减去1.
这段代码与上⾯之前的那段代码是⼀个意思,不同的是这段代码是当游戏者按下Q键时翻转⽅块朝相反的⽅向。这⾥我们减去1⽽不是加1.
如果下键被按下,游戏者此时希望⽅块下降的⽐平常快。fallingPiece['y'] += 1使⽅块下落⼀个格⼦(前提是这是⼀个有效的下
落)moveDown被设置为True,lastMoceDownTime变量也被设置为当前时间。这个变量以后将被检查当⽅向下键⼀直按下时从⽽保证⽅块以⼀个⽐平常快的速率下降。
当游戏者按下空格键,⽅块将会迅速的下落⾄着陆。程序⾸先需要找出到它着陆需要下降个多少个格
⼦。其中有关moving的三个变量都要被设置为Fal(保证程序后⾯部分的代码知道游戏者已经停⽌了按下所有的⽅向键)。
这段代码是处理⼀直按下某个⽅向键时的情况。
如果⽤户按住键超过0.15秒。那么表达式(movingLeft or movingRight) and time.time() - lastMoveSidewaysTime > MOVESIDEWAYSFREQ:返回True。这样的话我们就可以移动⽅块向左或向右移动⼀个格⼦。
医院投诉管理办法这个做法是很⽤的,因为如果⽤户重复的按下⽅向键让⽅块移动多个格⼦是很烦⼈的。好的做法是,⽤户可以按住⽅向键让⽅块保持移动直到松开键为⽌。最后别忘了更新lastMoveSideWaysTime变量。
这段代码的意思跟上⾯的代码差不多。
⽅块⾃然下落的速率由lastFallTime变量决定。如果⾃从上个⽅块掉落了⼀个格⼦后过去了⾜够的时间,那么上⾯代码就会再让⽅块移动⼀个格⼦。

本文发布于:2023-06-25 01:29:13,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1053532.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游戏   变量   形状   代码   个格   开始
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图