问题标签 [tetris]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
710 浏览

c# - Naive Gravity for Tetris 游戏使用 2D 数组作为运动场

我正在编写俄罗斯方块克隆,并且正在使用 C# 进行原型设计。最终代码应该在嵌入式系统上运行(使用 8 位 CPU 和非常少的 RAM),所以我尝试使用一种简单的算法来清除行。

现在,我的运动场是一个二维数组:

(其中TetrominoType是一个枚举,表示 None 或 7 种类型之一,用于着色块)

当一行被清除时,我想就地修改这个数组,这就是我的问题所在。举个例子:

我已经确定需要删除第 5、7 和 8 行,因此其他行应该掉下来,让我的状态位于右侧。

我天真的方法是向后迭代并复制清除的行上方的行,基本上:

这里的问题是上面的行也可能被清除(例如,如果iy == 8我不想复制第 7 行而是第 6 行),而且我需要清除复制的行 ( iy-1) - 或复制该行上面的行这反过来又需要向上涓涓细流。

我试着计算我已经跳过了多少行,但这只有在我创建一个新数组然后将它们换出时才有效,但我无法获得就地修改运动场数组的数学工作。

这可能真的很简单,但我只是没有看到算法。有谁知道我该怎么做?

0 投票
1 回答
1798 浏览

java - 在 Java 中创建俄罗斯方块形状作为扩展区域或形状的类

我正在使用 Java 自己编写俄罗斯方块游戏。我没有使用任何已经包含代码的教程,因为我想尝试自己分解它,看看我能走多远。

到目前为止,不太好。我偶然发现了 Shapes 上的创作。我的想法是: 1. 将每个基本形状(如 L、立方体、船)作为单独的类扩展或实现 Area 或 Shape,以便我可以将其用作g2.fill(LShape). 2. 每个类都有某种描述旋转位置的状态变量,但这是下一个挑战,找出旋转..

所以对于第 1 步,到目前为止,我已经编写了以下 LShape 类的草稿:

草案 a):

在我调用paint()方法的主类中: g2.fill(lShape); // where lShape is a LShape object; 问题是抛出了一个关于getPathIterator()

或草案 b):

在这种情况下,当我调用时,g2.fill(lShape)没有异常并且 Shape 被绘制,只是我不知道如何移动它。区域的一部分是矩形的 Brick 对象,所以我可以尝试访问setLocation区域中每个 Brick 的方法,但我不知道如何访问它。

所以我想我需要帮助来弄清楚如何使俄罗斯方块形状的形状实现不抛出异常,这意味着实现所有必需的方法并实际显示在 JPanel 上......然后我会担心旋转。或者弄清楚如何使俄罗斯方块形状的区域扩展移动。

谢谢,

0 投票
3 回答
271 浏览

java - 俄罗斯方块程序的 GUI 出现故障

我正在开发俄罗斯方块程序。我正在重用一个功能完善的 Tron 程序来实现它。在 Tron 程序中,GUI 运行良好,但在俄罗斯方块程序中,我无法弹出任何 GUI 窗口,甚至连网格都没有。我还需要弹出另一个窗口来告诉设置控件。如果您尝试,非常感谢。下面,我将为您提供两组程序

俄罗斯方块

}

} }

0 投票
1 回答
149 浏览

java - My KeyListener doesn't respond to my JPanel

I'm writing a Tetris game and most of my mechanism is done. I tried to input my keyboard interaction creating a new KeyListener, but it simply doesn't seem to work, as I press the buttons the pieces just keep falling instead of changing their position. Could anybody help me please?

GUI Class:

Library class:

0 投票
1 回答
2323 浏览

python - How to create automated Tetris bot in Python?

So I've written a tetris bot in python, and it uses the pygame events to respond to keyboard input. Now I'm trying to create an AI to play this game. So I want to basically determine what the best move is, given a piece, and a board. I want to iterate over every possible move, and evaluate the board state (I have a method to evaluate how good a given board is), and pick the move that creates the best board state. My current main method is below.

How do I figure out what a state would look like without actually modifying the state/rewriting a bunch of code? I can provide more code as needed. The purpose of this is so that I may use a genetic algorithm to train a neural network, to play tetris.

0 投票
1 回答
782 浏览

javascript - 在 JavaScript 俄罗斯方块中绘制新的 tetrominos

我正在尝试在 JavaScript 中绘制 tetrominos,但遇到了一些麻烦。我认为我的代码 this.blocks = i.blocks[b][c] 不正确,但可能更多。现在我的眼睛开始疼了,我决定寻求帮助。this.blocks = i.blocks[b][c] 因为 this.blocks 不能存储数组而不起作用?还是有其他问题。感谢您的帮助。

这是 jsfiddle 链接:http: //jsfiddle.net/8aS9E/

这是代码:

谢谢!

0 投票
1 回答
3385 浏览

c - C中的俄罗斯方块块

我有一个大学项目,使用动态分配的板来创建俄罗斯方块,该板用.. 我想用它们的每个部分单独创建块,例如

俄罗斯方块中的块将在 2d 动态分配的矩阵中描述,如下所示:

所以我的问题是:

  • 那效率高吗?

  • 还有另一种更容易制作块并将它们移动到板矩阵内的方法吗?

使用我的块解决方案,我很难找到让它们像一个整体一样掉落的方法,就像绘制俄罗斯方块一样。

另外,我被告知要包含一个硬模式,即俄罗斯方块从板上的一些块或块部分开始,这对我的解决方案来说是困难的。

这是我第一次发帖,所以如果您需要有关我的问题的更多信息,请告诉我。感谢您的时间。

0 投票
1 回答
793 浏览

java - GridWorld 中的俄罗斯方块无法编译

我有一个 AP 计算机科学任务,使用 GridWorld 制作俄罗斯方块。我必须做 4 个类,TetrisBug, TetrisGame,TetrisBlockTetrisBlockO.
以下是按顺序排列的代码:

俄罗斯方块虫.java

俄罗斯方块游戏.java

俄罗斯方块块.java

俄罗斯方块O.java

我遇到的第一个问题是在TetrisGame. 准确地说,是最后一种方法。该grid.length语句拒绝编译,当我添加一个Grid grid = new Grid();语句时,它说它是抽象方法,无法实例化。编译它们中的任何一个都会给我一个编译器警告,

第二个问题是与中的rotate方法有关TetrisBlock。我不确定它是否有效,因为TetrisGame不会编译。我无法测试它,但我的一个朋友一直告诉我这是错误的,尽管 IDK 是否相信他。一些验证会很好。

无论如何,我对此没有实际时间限制,但我真的很想完成它。谢谢。

~基伦

更新:感谢 user3580294 我解决了网格问题。但我发现了另一个,网格没有长度方法......我知道我试图做的事情会起作用,但除了 grid.length 之外,我找不到办法,这是无效的。有人可以给我一个成功删除已完成行的方法吗?我真的被困在这里......我想进入下一个项目......

0 投票
1 回答
6443 浏览

c - 如何在C中向下移动二维数组元素

在C中实现俄罗斯方块时,我试图将二维数组的内容向下移动。这是为了向下移动块。该代码有效,但它只移动一次元素,请参见问题的图像(左上角的数字是确定块类型的随机数)。任何帮助表示赞赏。下面是数组移位代码:

http://i61.tinypic.com/xlb58g.jpg

0 投票
0 回答
68 浏览

.net - Visual Basic .Net 正在为我更改变量,并在我的程序中抛出错误

我是来自澳大利亚的 11 年级 IPT(编程)学生。我有一个任务,我需要制作一个老式游戏。我选择制作俄罗斯方块,几乎完成了,但有一些问题。

我在使用 Visual Basic .Net (2008) 时遇到问题。该程序正在更改一个变量而没有被编程这样做。它在一个模块中,并且 Sub 是变量存在的唯一位置。

基本上,变量(称为 intLineFilled)保存了比赛场地内某条水平线上的方格数。然后我有一个 IF 语句来测试它是否等于一行中的正方形总数。(游戏面板的宽度除以方块的宽度。)发生这种情况时,意味着将布尔值更改为 true 以表示有一条线。

我的问题是:调试时,在放置第一个块后(有时是第二个或第三个,取决于运气),当它到达上述 IF 语句时,该值只有 1、2 或 3,具体取决于块类型。但是 IF 语句仍然运行,并且在 IF 语句期间或之后测试变量 intLineFilled 的值告诉我它的值是 16(这是它需要达到一行的值)。由此,我收到一个错误,其中程序告诉我表单上有 5 行,这会引发我稍后使用的数组的错误。代码一开始工作得很好,但现在不行了。

如果有人想查看,我的项目位于以下链接的 zip 文件中: https ://www.dropbox.com/s/99btww63qpl0pjm/Tetris.zip

比赛需要在明天之前完成,但在我解决这个问题之前我无法进行其他任何事情。