问题标签 [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 回答
314 浏览

c# - 在另一个用户控件中移动用户控件

我正在尝试编写一个俄罗斯方块克隆,在做了一些研究之后,我遇到了一个使用小型用户控件来形成块和一个包含网格的更大用户控件的示例。

我写的所有东西似乎都可以正常工作(正在生成块并将其放置在网格上,如果我更改代码,我什至可以将它们放置在其他地方),但我似乎无法让块移动,而程序正在运行。我使用的示例通过更改control.left每个块的属性来做到这一点。我已经尝试过了,对其进行了调试,并且在属性更改时,块不会移动。

我已经搜索了大约4个小时。我是一个新手程序员,所以我知道这可能很愚蠢,但我找不到它是什么。

这是我写的方法:

Shape 实际上是一个仅包含 4 个块的数组列表。Block.cs 是一个部分类,因为它是用户控件背后的代码,即小方块,Shape.cs 将形状从块中取出,俄罗斯方块游戏只是游戏逻辑

按键事件:

0 投票
2 回答
2241 浏览

c# - 如何在 C# 中绘制形状以制作俄罗斯方块克隆?

我首先要指出的是,我在这个小项目中没有使用任何 XNA 或 LINQ。基本上,我想使用 C# windows 应用程序克隆俄罗斯方块。我已经画出了我的网格,我的图片框大小为 250x500,使每个方块为 25 像素 x 25 像素。

现在,我是画形状的业余爱好者。我可以在网格上画线和矩形、圆形、椭圆和多边形,我可以用颜色等填充它们。就是这样。我不能用绘画做很多其他事情。换句话说,基本形状,使用我创建的点来绘制多边形,例如俄罗斯方块中的“T”形。

我的问题是,在制作我的俄罗斯方块形状时,我应该使用 C# 中的绘图方法绘制它们,还是应该创建和导入俄罗斯方块形状的位图图片并使用它们来创建我的俄罗斯方块克隆?

一旦我能弄清楚如何绘制形状,剩下的我就可以自己弄清楚了。另外,在游戏网格上工作时,我是否从我的名为 GameGrid 的类中继承 Picturebox 属性?

0 投票
2 回答
3809 浏览

java - 用俄罗斯方块填充整个二维数组(俄罗斯方块板),没有剩余空间(Java)

假设我有一个 2D int 数组..

0 表示没有棋子 棋子用 1-7 表示;

1 - Z 形

2 - S 形

3 - 线条形状

4 - T 形

5 - 盒子形状

6 - L 形

7 - 向后 L 形

用随机形状填充整个数组并且没有剩余空间的最佳方法是什么。

注意:我的游戏可以运行,我只是在尝试让它适应不同的东西,同时仍在使用俄罗斯方块游戏

0 投票
0 回答
1008 浏览

java - 在多线程环境中使用 java.awt.Robot

我正在开发一个(虚拟)有竞争力的自动俄罗斯方块播放器。

由于游戏具有竞争力,我自然希望我的俄罗斯方块玩家同时按下尽可能多的键。我想出的解决方案是为每种按键分配一个线程(这样,如果发送了两个相同的键,则会有延迟,因为它们在同一个线程上。但是如果发送了两个单独的键,它们的线程也分别执行,导致同时按下两个键)。

但是由于多线程,我担心 java.awt.Robot 不是线程安全的(并且 googles/SO 搜索结果没有关于该主题的信息)。我想避免在我正在使用的 Robot 对象上创建锁——如果我这样做,整个系统将变得毫无意义(因为不会同时有多个按键,每个按键都会一个接一个地出现) .

一种可能性是可能同时使用多个机器人(每个线程一个),但我不太确定它们不会简单地相互冲突。

那么,如何在多线程环境中处理一个Robot对象,从而可以同时执行多个动作呢?

0 投票
1 回答
749 浏览

java - 通过为 JButton 着色的俄罗斯方块 GUI。渲染问题

我正在制作一个俄罗斯方块游戏,对于我的 GUI,我选择为 JButtons 着色以用作我的俄罗斯方块板。我设置了一个 JButton 网格。我计划遍历从返回的俄罗斯方块网格

并根据每个网格元素中的整数为每个 JButton 着色。返回的俄罗斯方块网格是一个整数数组,每个数字代表一种颜色。到目前为止,我没有用户交互,我只是想拥有基本的 GUI,其中块直接下降。

这是来自 Game 类的代码

game.print_Game(); 将网格打印到控制台窗口,以便我可以从文本中看到正在发生的事情。但是 card3.revalidate(); 似乎没有工作,因为 GUI 在打印开始时暂停。如果我将 revalidate 移到 while 循环之前,然后注释掉 while 循环,则 GUI 输出:

在此处输入图像描述

这就是我想要的。但是为了给按钮着色某种颜色,我需要在网格更改时在 while 循环中进行重新验证。

有什么建议么?

0 投票
1 回答
291 浏览

actionscript-3 - 使用 Flashpunk 在 Actionscript 3 中进行俄罗斯方块式碰撞检测

我正在使用 flashpunk 库在 Actionscript 3 中创建俄罗斯方块风格的游戏。除了一些我无法弄清楚的碰撞检测之外,我一切正常。当积木掉落时,它们不会堆叠在一起。有什么想法或建议吗?

0 投票
1 回答
1178 浏览

java - Java Tetris - 使用转置来旋转一块

我正在用 Java 构建俄罗斯方块作为一个有趣的项目,现在正在研究轮换。

我最初对每个旋转都进行了硬编码,这被证明非常乏味。

话虽这么说,然后我打算使用线性代数尝试矩阵旋转,但数学上的某个人建议我尝试转置。所以根据他的描述,我试着画出来。我把图纸弄对了吗?

在此处输入图像描述

从那以后,我并没有尝试对转置进行编码,但现在我完全迷失在我的代码中。

这会输出一个看似正确的转置图?

乙:

乙`:

所以我的问题是:

1)我上面的画是对他描述的正确解释吗?

2)我是否正确生成了转置图?

3)如果是这样,我应该如何绘制旋转的块......我应该用 替换grid[row][col]transpose()

谢谢!

0 投票
4 回答
2125 浏览

c# - 制作俄罗斯方块时卡住了

我正在尝试制作自己的俄罗斯方块游戏版本。到目前为止,我能够展示、旋转它们。但我被困在一个点上,不知道如何继续。

在此处输入图像描述

我有一个

  • BoardClass网格的静态整数数组board。使用不同的整数,我显示不同的颜色。
  • Block具有生成随机块并旋转它们的方法的类。
  • 一个Graphic基于board数组显示颜色的类,以及
  • GameLogic用于开始、暂停游戏的类。

对于当前作品,我采用了一个 4x4 阵列并放置在板上的前四行board

一切正常。但是我如何开始移动东西。如何建立块之间的关系是我卡住的地方。

我的问题

  • 我在正确的轨道上工作吗?
  • 如何使事情自动化,我的意思是,块将如何一个接一个地自动出现。我知道我可以有一个 DispatcherTimer 并在滴答事件中移动块,但绘制和重绘整个网格很慢。我只想重绘游戏网格的一部分。
  • 如果我向左/向右/向下移动我的棋子,整个棋子阵列就会移动,这意味着一个 4x4 棋子在移动,而不仅仅是可能是 1x3 或 2x2 的棋子。
  • 如何知道这件作品是新的还是旧的定居作品。我知道我可以取一个布尔值,但我认为 10x20 的布尔数组会很大。

我知道这些可能不是关于 SO 的好问题,但我被卡住了,任何帮助都将不胜感激。并问我是否想查看任何代码。

0 投票
3 回答
1248 浏览

c# - C#俄罗斯方块游戏性能缓慢

我正在为我的 C# 学校项目编写俄罗斯方块克隆。我正在使用 Microsoft Visual Studio 2012。游戏本身实现为块的二维数组(块列表列表),每个块都有自己的纹理(bmp 图像)。我将整个数组绘制到 PictureBox 控件上,这就是问题的开始。更新 PictureBox 上的图像(移动/旋转活动形状)时,游戏会稍微滞后。我尝试在 Panel 控件上绘图,但结果是一样的。我有一个粗略的想法可能导致滞后,但我不知道如何摆脱它。

这是游戏“网格”的绘制方法:

这是活动四联牌的绘制方法:

然后游戏本身同时使用它们(双缓冲尝试):

"gb"我在类构造函数中只创建一次的私有变量在哪里Bitmap(以减少(不成功)滞后)。

GameDraw每当游戏状态发生变化时,都会调用该方法(例如,移动/旋转活动的 tetromino 和每个“重力”滴答声)

0 投票
1 回答
683 浏览

c - 俄罗斯方块函数在C中向右移动

目前我有左移功能

}

我认为正确的移动将是一个简单的改变,我确信它是,但我不认为它进展得那么顺利。所以很明显我需要检查这件作品是否一直在右边而不是左边,也许它的

向右移动,因为左是 ++ 右,我想?

我在这里和那里尝试了一些更改,但效果不大,所以我开始认为我没有完全理解代码。

有人可以更深入地解释代码在做什么(我可以阅读我想要更深入解释的评论)。

编辑有适当的检查以便向左或向右移动。例如检查一块是否存在