- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 Java 中的俄罗斯方 block 游戏作为一个有趣的业余项目。
我的游戏板是一个瓷砖网格:
grid = new Tile[高度][宽度];
在网格内,我创建一个新的 Tile 对象: activetile = new Tile(this,0, 0);//向“此”板添加新图 block
目前:
我能够控制单个图 block - 将其向下、向左和向右移动
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_DOWN) {
checkBottomFull(0,4);
collisionCheck(activetile.getX(),activetile.getY());
checkEndGame(activetile.getX(), activetile.getY());
activetile.setLocation(activetile.getX(), activetile.getY()+1);
System.out.println("coordinates: " + activetile.getX() + ", " + activetile.getY());
repaint();
}
...right key and left key code omitted
checkBottomFull()
将清除底行,如果方 block 击中地板或下面的另一方 block ,collisionCheck()
将生成一个新方 block ,如果方 block 卡在顶部,checkEndGame()
将结束游戏。<小时/>
我正在努力解决以下问题:
要创建一个实际的俄罗斯方 block block ,我想我应该生成另外 3 个 Tile 实例,并根据它是什么 block (L、O、Bar、Z 等),根据 activetile(我可以控制的单个 block )将它们的位置设置在适当的位置,如下所示:
if (piece == "Bar") {
block2 = new Tile(this, activetile.getX(), activetile.getY());
block3 = new Tile(this, activetile.getX()+2, activetile.getY());
block4 = new Tile(this, activetile.getX()+3, activetile.getY());
}
问题是,我对 activetile
的碰撞检测不允许它适当移动,因为它会碰到其他 block 。我尝试通过在设置了 activetile 的新位置后设置 block2、block3、block4
的位置来修复 keyPressed()
中的问题,如下所示:(因此一旦 activetile
向下移动,所有其他的都可以向下移动,这样它们就不会重叠)
activetile.setLocation(activetile.getX(), activetile.getY()+1);
block2.setLocation(activetile.getX(), activetile.getY()+1);
block3.setLocation(activetile.getX(), activetile.getY()+1);
block4.setLocation(activetile.getX(), activetile.getY()+1);
这可能适用于向下移动,但不适用于向左或向右移动,因为图 block 会重叠。
<小时/>那么,我是否通过生成这样的新 block 来正确创建 Bar
片段的新实例?我的想法正确吗?
可执行文件
https://www.dropbox.com/s/oyh26dfbmsvt5c8/my_tetris_test.jar
源代码 zip 链接
https://www.dropbox.com/s/9kt3sl6qqo54amk/Tetris%20Two.rar
谢谢!
最佳答案
我会看一下 Polygon 类:http://docs.oracle.com/javase/6/docs/api/java/awt/Polygon.html
提供的方法可以测试与另一个对象上的点的碰撞(内部)。您还可以使用translate(deltaX, deltaY)
来大大简化对象的“运动”。
关于java 俄罗斯方 block : how to make a tetris piece move as 4 distinct tiles,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15263937/
我在俄罗斯方 block 中清除行时遇到了一些奇怪的事情...... 如果我将板的宽度和高度设置为相同(10 和 10): board = new Board(10, 10, 35); 由以下因素决定
我正在构建俄罗斯方 block 并尝试实现一种方法,该方法遍历图 block 的 grid[][] 并检查每行的每一列,从底部开始,向上工作(认为它会更快检查如果我从底部开始,因为那是需要清除大多数行
我正在用 Java 构建俄罗斯方 block ,并尝试使用线性代数来旋转由 4 个方 block 组成的方 block 。 我的 friend 正在解释这样做的方法是: 他说: "To clarify
我正在用 Java 构建俄罗斯方块作为一个有趣的副项目,现在正在研究轮换。 我最初是硬编码每个旋转,这被证明是非常乏味的。 话虽如此,我当时打算使用线性代数尝试矩阵旋转,但有人在 Mathematic
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
我正在为大学做一个俄罗斯方 block 元素。我有大部分功能可以工作,除了一个。预期流程如下: 带有加载游戏按钮的索引页 点击按钮,游戏开始播放背景音频(现在是示例音频) 暂停/玩游戏时音频也应该停止
我已经研究这个问题一段时间了,并且已经画了一个空白,所以希望得到一些帮助。 我正在使用 Python 和 Pygame 制作一个简单的俄罗斯方块克隆。问题是检测已完成行的过程有时会将克隆行添加到新 G
已锁定。这个问题及其答案是locked,因为这个问题是题外话,但具有历史意义。目前不接受新的答案或互动。 基础知识: 考虑以下四格骨牌和空的比赛 field :
我在编写俄罗斯方 block 时无法抓取当前的片段。现在,当我尝试移动一张四格骨牌时,所有四格骨牌都会移动。我已经被这个问题困扰了一段时间,我非常感谢一些帮助。下面是代码片段,我将整个代码放在 jsf
我刚刚接触 Java,我发现了这个关于创建 Java 俄罗斯方 block 游戏的好教程。 我没有导师或导师来帮助我解决这个问题 - 我一直在寻找一位导师或导师:(所以目前我正在自学 java 和 P
您好,我有一个关于在 C++ 中使用 vector 的问题,我正在研究一个通过随机运动模拟粒子在容器中运动的问题。我需要在粒子满足或不满足特定标准时添加和移除粒子,为此我发现 vector 类非常方便
我想通过按空格键来旋转元素,就像俄罗斯方 block 效果一样。但到目前为止我只能旋转一次,而且 position() 方法似乎不像使用键横向移动时那样工作。任何帮助或提示将不胜感激。这是我拥有的:
虽然我标记了这个作业,但它实际上是我自己免费做的一门类(class)。不管怎样,这门类(class)叫做“从 Nand 到俄罗斯方 block ”,我希望这里有人看过或参加过这门类(class),这样
我正在尝试将 Java 中的俄罗斯方 block 游戏作为一个有趣的业余项目。 我的游戏板是一个瓷砖网格: grid = new Tile[高度][宽度]; 在网格内,我创建一个新的 Tile 对象:
我是一名优秀的程序员,十分优秀!