问题标签 [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 投票
1 回答
772 浏览

wpf - WPF俄罗斯方块索引超出范围异常

我很新,也很缺乏经验。我已经从 MSDN 下载了 WPF 版本的俄罗斯方块来查看代码并尝试查看发生了什么,但程序中有错误,我不确定是什么原因造成的。异常详情如下:

部分源代码如下...

部分源代码如下...

还有更多代码,但这是我认为错误所在的部分。如果需要任何其他信息,请随时询问。

0 投票
4 回答
5444 浏览

java - 为什么要创建新对象 - Java Tetris Tutorial

我刚接触 Java,我发现了这个创建 Java 俄罗斯方块游戏的好教程。

我没有导师或导师来帮助我 - 我一直在寻找一个 :( 所以目前我正在自学 Java 和 PHP :)

无论如何继承我发现的网站:http: //zetcode.com/tutorials/javagamestutorial/tetris/

我在Shape.java课堂上没有得到的程序的一种方法:

如果已经可以从变量Shape result = new Shape();中获取当前部分,为什么我们需要创建一个新对象?pieceShape

0 投票
1 回答
2296 浏览

java - 在数组上存储 Piece 对象 - java Tetris Tutorial

我刚接触 Java,我发现了这个创建 Java 俄罗斯方块游戏的好教程。

我没有导师或导师来帮助我 - 我一直在寻找一个 :( 所以目前我正在自学 java 和 PHP :)

无论如何继承人我发现的网站http://zetcode.com/tutorials/javagamestutorial/tetris/

有人可以从教程中解释这种方法是如何工作的吗?

我知道它是从 Paint() 方法中调用的

据我了解 - 它在棋盘的每个方格处循环并确定是否有一个形状(枚举)存储在 board[] 数组中。

我只需要有人向我解释这部分是如何绘制所有形状的,或者是形状的剩余部分,已经掉到了板子的底部?

以及如何在 board[] 数组中记住所有方块?

谢谢

0 投票
4 回答
3460 浏览

java - Java俄罗斯方块旋转

我知道这已经被问了很多,但我想知道如何旋转俄罗斯方块?我已经提出了一个漫长而糟糕的解决方案(大约 170 行代码),但应该有更简单的方法来做到这一点。

我的俄罗斯方块由 4 个块组成,它们都知道它们在矩阵中的位置(行和列)。矩阵本身是字符型的,所以 4 个块都是字母。例如,它看起来像这样:

我试图通过计算中间行和列并将其用作原始矩阵来模拟我的矩阵作为坐标系,然后尝试应用我发现的这个简单算法:90 度旋转 (x,y) = (-y,x)

看来只有当我的作品位于矩阵的中心时它才有效。我不知道该怎么办,我整天都在想这个。这是我的方法:

0 投票
4 回答
587 浏览

python - 俄罗斯方块时间问题

我正在用 PyGame 编写俄罗斯方块程序,遇到了一个有趣的问题。

在我问这个问题之前,这是伪代码:

问题在于,由于代码的“等待 0.4 秒”部分,人类控制的部分只能每 0.4 秒移动一次。我希望方块移动的速度与人类按键的速度一样快,同时方块每 0.4 秒掉落一次。我如何安排代码以便它可以做到这一点?谢谢!

0 投票
1 回答
493 浏览

java - 在俄罗斯方块游戏中正确使用 wait()/notify()


我正在为 Android 编写一个类似俄罗斯方块的游戏,我正在尝试实现“实时部分”。我有一些似乎可行的东西,但我想确保我的实现是正确的。

我想要的是:

  • 形状以固定的速率下降(假设每次形状的y递减时我想等待n毫秒)

  • 玩家可以随时放下形状,等待n毫秒的计时器必须立即中断,并且只为下一个形状重新开始

  • 当形状下降或形状不能再下降时,游戏会等待m毫秒,然后再创建另一个形状

  • 系统必须能够随时停止线程

我正在做的事情如下(系统可以用 停止线程interrupt()):

特别是,这部分synchronized(this) { wait(n); }看起来很有趣,因为如果我理解正确,这将锁定this并立即释放它。

但是wait()需要在一个synchronized(this)块中使用(为什么?)并且我不能同步整个run()方法,因为如果我在调用期间尝试丢弃三倍的形状sleep(m),那么接下来的三个形状将被自动丢弃(这不是什么我想)。

这对你来说是否正确?
您有任何更正、建议或评论吗?

谢谢 :-)

0 投票
1 回答
690 浏览

java - 在我的 Java Tetris 游戏中找不到错误

我和我的朋友用 Java 制作了一个类似俄罗斯方块的游戏,它运行了一段时间,然后突然出现每次大约相同数量的总块数的错误。例如,它可能会出现一次 42 件错误,下一次是 46 件,然后是 44 件。

以上是错误发生之前的示例。不要试图过多地阅读上面的示例,因为错误不依赖于棋子位置等。

这是错误发生后网格的样子......

注意到这两个一直到网格的顶部吗?这就是正在发生的事情。

这就是事情变得有趣的地方。我们将其限制为特定的功能和特定的代码行。

上面的代码行是被认为导致问题的确切代码行。问题是那行代码没有任何问题。我已经调试整个程序大约一周了,每次更改后我都会让它记录网格。

上面两个网格之间的区别是对该行的一次调用。它应该不可能分配网格中的所有其他单元格。调试日志说变量是:

这些是影响上面第二个网格的变量。错误的代码行应该是:

我们是否有可能在 Java 本身中发现了一个错误?我花了好几个小时调试这段代码,但我从来没有遇到过我找不到的错误(我通常用 python 编写代码,不过……Java 对我来说相当新)

此外,似乎该错误受网格大小的影响。如果我将网格的高度设置为较低的数字,则导致错误所需的碎片更少。同样,如果我制作更高的网格,它需要更多的碎片。

希望那里的 Java 专家可以帮助阐明这种情况。

ps 我正在使用 JRE JVM 1.6 在 Mac 上的 Eclipse 中编程。我也尝试了 JRE JVM 1.4 并且发生了同样的事情。

附加信息:

上面的代码是创建网格的时候。网格是一个类:

这是大量调试日志代码的一部分...这是打印基于文本的网格的函数。

变量 'line' 并不重要,它只是告诉我们调用 printGrid() 函数的行号。

让我知道你们是否需要更多信息。

更多附加信息:

这是该程序的所有文件。

哦,这是调试日志的摘录,可为您提供更多信息。

http://pastebin.com/9VKhF8CR

它包括成功放置一块(放置在错误之前的最后一块),然后显示正在发生的错误。该函数的所有变量都被打印出来,没有一个出现不合适的地方。该错误发生在放置在网格上任何位置的任何一块上。每次调用我上面谈到的行后,都会打印网格。让我知道你们是否需要更多信息。我想把这个虫子压扁。

0 投票
1 回答
107 浏览

javascript - 足够好的动态对象打包

使用 javascript,我的目标是将一组设置大小的对象打包到给定水平宽度的容器中,同时保持大致的初始顺序。空白不是一个特别的问题,但目的是尽量减少它。

手动,我可以为少量对象完成这种俄罗斯方块样式。

我的 javascript 是合理的,但我希望有一些示例代码或算法来作为我的实现的基础。我意识到这可能就在那里,我只是不确定要寻找什么。

— 哈罗德

0 投票
2 回答
1266 浏览

cocos2d-iphone - CCMoveBy 行为

我被困在为我的俄罗斯方块克隆实现一些 Cocos2D 动画(效果很好,没有逻辑错误,我只想在删除行时执行一些平滑的动画)。

当前代码(无动画)只是丢弃块位置,如下所示:

这发生在经典俄罗斯方块编程的 for 循环中。但是当我尝试制作动画时,像这样:

有些块只向下移动一次,即使是艰难的动作也可能会为同一个块多次调用(例如,当打破多行时)......

为什么会这样?我知道这有点令人困惑,但关键是我正在做同样的事情并得到不同的结果......我可以发布更多代码来帮助澄清!

谢谢!

0 投票
2 回答
2546 浏览

algorithm - 遗传算法和俄罗斯方块

我使用遗传算法创建了一个俄罗斯方块播放器,并面临一些问题。我已经阅读了很多相关的作品,但他们没有给我足够的关于 GA 的细节。

问题是我的代理似乎很快就卡住了……我使用评估函数涵盖了 4 个特征:高度、覆盖的孔、平整度和清除的行数。我读了一些使用相同评估的论文,并且能够执行数千行。

在 600 代之后,拥有 100 名智能体,最好的智能体平均只能做 260 行,这是蹩脚的。所有代理都在演奏相同的乐曲序列。

我的 GA 的详细信息:

世代:600 人口:100

基因:4 个浮点值的数组,介于 0 和 1 之间。

均匀交叉以一定的概率发生,并以一定的概率在两个父母之间交换基因。

突变以一定的概率发生,在这里我尝试了 3 种不同的方法:交换基因,用随机值替换基因,或向基因添加一些噪声值。

我有 50% 的精英率,并注意到一些优秀的特工被选中并生出更差的特工,污染了人口。

选择是轮盘赌...

如果有人能给我关于交叉和变异的最佳方法的详细信息,我很感激!

谢谢,很抱歉这么长的帖子!