图片分页网站模板,设计的网站源代码怎么做,有了域名和云主机怎么做网站,如何保持网站中的图片原标题#xff1a;300行Python代码实现俄罗斯方块#xff0c;致敬逝去的童年本文代码基于 python3.6 和 pygame1.9.4。俄罗斯方块是儿时最经典的游戏之一#xff0c;刚开始接触 pygame 的时候就想写一个俄罗斯方块。但是想到旋转#xff0c;停靠#xff0c;消除等操作300行Python代码实现俄罗斯方块致敬逝去的童年本文代码基于 python3.6 和 pygame1.9.4。俄罗斯方块是儿时最经典的游戏之一刚开始接触 pygame 的时候就想写一个俄罗斯方块。但是想到旋转停靠消除等操作感觉好像很难啊等真正写完了发现一共也就 300 行代码并没有什么难的。先来看一个游戏截图有点丑好吧我没啥美术细胞但是主体功能都实现了可以玩起来。本人对于Python学习创建了一个小小的学习圈子为各位提供了一个平台大家一起来讨论学习Python。欢迎各位到来Python学习群960410445一起讨论视频分享学习。Python是未来的发展方向正在挑战我们的分析能力及对世界的认知方式因此我们与时俱进迎接变化并不断的成长掌握Python核心技术才是掌握真正的价值所在。外形俄罗斯方块整个界面分为两部分一部分是左边的游戏区域另一部分是右边的显示区域显示得分、速度、下一个方块样式等。这里就不放截图了看上图就可以。游戏区域跟贪吃蛇一样是由一个个小方格组成的为了看得直观我特意画了网格线。方块接下来就是要定义方块方块的形状一共有以下 7 种I 型O 型T 型S 型Z 型L 型J 型这里我做了多次的更改因为方块最大的长度是长条形的为4格所以我统一用了 4 × 4 的方格来定义。这也是可以的只是后来发现不方便。为了直观直接以一个二维数组来定义方块其中 . 表示空的 0 表示实心的。(用 . 表示空是为了看得直观如果用空格会看不清。)例如 I 行以 4 × 4 方格定义为[.0..,.0..,.0..,.0..]和[....,....,0000,....]方块最难的是需要实现旋转功能比如 I 型就有横和竖两种形态。所谓旋转表面上看是把方块顺时针旋转了 90°但实际做的时候我们并不需要正真的去实现这个“旋转”的效果。最终实现的时候这些图形都是我们画在界面上的而每一次刷新界面上所有内容都会被清空重画所以旋转只是画当前方块的时候不再画之前的形状而是画旋转后的形状。比如这个 I 型定义成了 4 × 4 的形状但实际上只需要 1 × 4 或 4 × 1 就可以了其他剩下的地方都是空的。它不像 T 型T 型不是一个矩形如果用一个矩形来定义必然有 2 个位置是空的。那么I 型真的有必要定义成 4 × 4 吗答案是肯定的。想想看如果是 4 × 1 的一个横条旋转后变成 1 × 4 的竖条这个位置怎么确定好像有点困难。但是如果是 4 × 4 的正方形我们只需要固定起点坐标(左上角)不变把竖条的 4 × 4 直接替换掉横条的 4 × 4 区域是不是就实现旋转了而且位置很容易计算。另外一点在有些情况下是不可以旋转的。比如 I 型的竖条在紧贴左右边框的时候是不可以旋转的。这点我有印象可以肯定。但是对于其他的形状我就不是很确定了我百度搜了下找了个网页版的俄罗斯方块玩了下发现也是不可以的。例如在紧贴右边框的时候是无法旋转的。如果要每一个形状都去判断一下那实在是太烦了。从方块的定义入手就可以很简单的实现。例如竖条行定义是[.0..,.0..,.0..,.0..]竖条是可以贴边的所以当它在最左边的时候X 轴坐标是 -1这是因为定义中左边一竖排是空的。我们只需判定当方块所定义的形状(包括空的部分)完全在游戏区域内时才可以旋转。我之前所说全都定义成 4 × 4 不好原因就在这里对于 T 型等其他形状无法做这个判定。所以对于 T 型等形状我们可以定义成 3 × 3 的格式[.0.,000,...]还有一种情况是无法旋转的就是旋转后的位置已经被别的方块占了。另外下落左右移动都要做这个判断。既然这些是一致的那么就可以用同一个方法来判断。先要定义一个 game_area 变量用于存放整个游戏区域当前的状态game_area [[.] * BLOCK_WIDTHfor_inrange(BLOCK_HEIGHT)]初始状态全是空的所以全部用 . 初始化就可以了。另外需要一些变量定义当前下落方块的状态cur_block None# 当前下落方块cur_pos_x, cur_pos_y 0, 0 # 当前下落方块的坐标方块我们是以二维数组的方式定义的并且存在空行和空列如果我们遍历这个二维数组判断其所在的区域在当前游戏区域内是否已经被别的方块所占这个是可以实现的。我们考虑另外一种情况一个竖条形左边一排是空的这空的一排是可以移出游戏区域的这个怎么判断每次左移的时候都去判断一下左边一排全都是空吗这太麻烦了。并且方块都是固定的所以这些我们可以提前定义好。最终方块定义如下方块需要包含两个方法获取随机一个方块和旋转时获取旋转后的方块判断是否可以旋转下落移动的方法也很容易实现了停靠最后一个问题是停靠当方块下落到底或者遇到别的方块之后就不能在下落了。我将此称之为“停靠”有个名字说起来也方便一点。首先是要判断是否可以停靠停靠发生之后就是将当前方块的非空点画到游戏区域上说白了就是将 cur_block 的非空点按对应位置复制到 game_area 里去。并且计算是否有一排被全部填满了全部填满则消除。至此整个俄罗斯方块的主体功能就算是完成了。这里很多参数是可以调的例如觉得旋转别扭可以直接调整方块的定义而无需去改动代码逻辑。返回搜狐查看更多责任编辑