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

algorithm - 俄罗斯方块旋转算法

表示和旋转俄罗斯方块游戏的最佳算法(和解释)是什么?我总是觉得作品旋转和表示方案令人困惑。

大多数俄罗斯方块游戏似乎在每次旋转时都使用天真的“重新制作方块数组”:

http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=俄罗斯方块

但是,有些使用预先构建的编码数字和位移来表示每个部分:

http://www.codeplex.com/wintris

有没有一种方法可以使用数学来做到这一点(不确定是否可以在基于单元的板上工作)?

0 投票
5 回答
4457 浏览

matrix - 围绕枢轴旋转坐标?(俄罗斯方块)

我正在尝试设计我自己的俄罗斯方块克隆,但在形状旋转方面遇到了一点问题。我有一个表示 10 x 20 游戏网格和单个形状对象的二维数组,这些对象在初始化时包含网格上形状将从哪里开始下降的坐标。例如,当用户将形状向下移动时,每个坐标的 y 值都会递减,并且这种变化会反映在网格上。

我似乎无法弄清楚使用此实现处理形状旋转的有效方法。有什么办法可以在指定的枢轴周围使用这些坐标的矩阵?

任何建议将不胜感激,

谢谢你。

0 投票
3 回答
315 浏览

artificial-intelligence - 确定在进化算法中要权衡哪些输入

我曾经写过一个玩得很好的俄罗斯方块 AI。我使用的算法(在本文中描述)是一个两步过程。

第一步,程序员决定跟踪对问题“感兴趣”的输入。在俄罗斯方块中,我们可能对跟踪连续有多少间隙感兴趣,因为最小化间隙有助于更容易地放置未来的碎片。另一个可能是平均柱高,因为如果你即将失败,冒险冒险可能是个坏主意。

第二步是确定与每个输入相关的权重。这是我使用遗传算法的部分。只要根据结果随时间调整权重,任何学习算法都可以。这个想法是让计算机决定输入与解决方案的关系。

使用这些输入及其权重,我们可以确定采取任何行动的价值。例如,如果将直线形状一直放在右列将消除 4 个不同行的间隙,那么如果它的权重很高,那么这个动作可以得到很高的分数。同样,将其平放在顶部实际上可能会导致间隙,因此该动作会得到低分。

我一直想知道是否有一种方法可以将学习算法应用于第一步,在那里我们可以找到“有趣”的潜在输入。似乎可以编写一个算法,让计算机首先学习哪些输入可能有用,然后应用学习来衡量这些输入。以前有过这样的事情吗?它是否已经在任何人工智能应用程序中使用?

0 投票
2 回答
3680 浏览

c++ - 俄罗斯方块:类的布局

我已经编写了一个有效的俄罗斯方块克隆,但它的布局非常混乱。我能否获得有关如何重组我的课程以使我的编码更好的反馈。我专注于让我的代码尽可能通用,试图让它更像一个只使用块的游戏引擎。

每个块在游戏中单独创建。我的游戏有 2 个 BlockList(链表):StaticBlocks 和 Tetroid。StaticBlocks 显然是所有不动块的列表,而 tetroid 是当前 tetroid 的 4 个块。

  1. 主要是创建了一个世界。

  2. 首先由 (NewTetroid) 创建一个新的 tetroid(Tetroid 列表中的 4 个块)

  3. 碰撞由 (***Collide) 函数检测,通过使用 (If*****) 函数将每个 Tetroid 与所有静态块进行比较。

  4. 当 tetroid 停止(击中底部/块)时,它被复制(CopyTetroid)到 StaticBlocks 并且 Tetroid 为空,然后通过使用(SearchY)搜索 StaticBlocks 对完整行进行测试,破坏/丢弃块等。

  5. 创建了一个新的 tetroid。

(TranslateTetroid) 和 (RotateTetroid) 对 Tetroid 列表中的每个块一一执行操作(我认为这是不好的做法)。

(DrawBlockList) 只是遍历一个列表,为每个块运行 Draw() 函数。

当调用 (NewTetroid) 时,通过设置相对于 Tetroid 中第一个块的旋转轴来控制旋转。我的每个块的旋转功能(旋转)围绕轴旋转,使用输入 +-1 进行左/右旋转。RotationModes 和 States 用于以 2 或 4 种不同方式旋转的块,定义它们当前处于什么状态,以及它们应该向左还是向右旋转。我对这些在“世界”中的定义不满意,但我不知道将它们放在哪里,同时仍然保持我的 (Rotate) 函数对每个块通用

我的课程如下

抱歉,如果这有点不清楚或啰嗦,我只是在寻找一些帮助重组。

0 投票
2 回答
4531 浏览

c# - C# 控制台俄罗斯方块编程。让碎片移动?

我正在尝试制作我的第一款游戏,一款控制台俄罗斯方块。我有一个类 Block,它包含 x 和 y 整数。然后我有一堂课Piece : List<Block>,一堂课Pieces : List<Piece>

我已经可以随机生成碎片,并让它们每秒掉落一排。我仍然没有进行碰撞检测,但我想我以后已经知道如何解决了。问题是我不知道如何控制这些碎片。我已经阅读了一些关于键盘挂钩的内容并查看了一些俄罗斯方块教程,但其中大部分都是针对 Windows 窗体的,这确实简化了事件处理等。

所以...你能指出我在控制台上控制部件的路径的开始吗?谢谢!

0 投票
4 回答
3007 浏览

c# - 如何使用 C# 在 XNA 中创建俄罗斯方块块?

我正在使用 XNA 在 C# 中制作俄罗斯方块克隆,但我不确定如何实际实现这些块。

我不认为将形状制作为图像会起作用(因为在形成线条时会移除部分),所以我有块来组成像这样的碎片。

不幸的是,我不知道如何实际定义块来制作碎片,也不知道如何操纵它们以使它们旋转等。

编辑:我也需要学习如何制作俄罗斯方块网格的帮助。

0 投票
4 回答
1159 浏览

c# - 目前可以在不使用 XNA 的情况下制作俄罗斯方块吗?使用 C#?

我有一台过时的计算机,目前无法运行某些 XNA 组件。我是这方面的初学者,所以我希望在获得一台可以运行 XNA 和其他一切的新计算机之前完成一些其他的编程工作。但是没有 XNA,俄罗斯方块容易制作吗?

0 投票
4 回答
3770 浏览

rotation - 俄罗斯方块旋转

对于大学我们应该写一个游戏(语言是 modula2 你知道的机会很小)。每个 tetromino 都是通过一个中心部分和 3 个相关部分定义的,现在当涉及到旋转时,我只需旋转相关块(线性代数)。

我问自己的是如何处理用户在棋子已经“着陆”时所做的旋转,因为用户还有一点时间可以将他的馅饼快速移动到所需的位置,但是在整个网络上的俄罗斯方块版本中,你可以“旋转”其他部分,但我的旋转似乎没有得到它。

我需要旋转哪一块?有指导方针吗?谢谢

0 投票
2 回答
1376 浏览

python - python列表索引超出范围错误

我正在开发一个 python 俄罗斯方块游戏,我的教授为编程课概念的最终项目分配了该游戏。在这一点上,我已经得到了他想要做的所有事情,但我对其中的一部分有一点小问题。每当我开始左右移动部件时,我都会不断收到“索引超出范围错误”。这只发生在它对着一块时。以下是让我感到悲伤的罪魁祸首。

我不想让任何人为我修复它,我只是在寻找有关如何自己修复它的提示。提前感谢您提供的任何帮助。

0 投票
3 回答
1773 浏览

algorithm - 如何生成所有 Tetrominos 的列表?

如何生成所有 Tetrominos 的列表?或者,更一般地说,我怎样才能生成仅限于多个单元格的多联骨牌子集?