gpt4 book ai didi

java 俄罗斯方 block : how to make a tetris piece move as 4 distinct tiles

转载 作者:太空宇宙 更新时间:2023-11-04 07:46:06 25 4
gpt4 key购买 nike

我正在尝试将 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
    • 从 keyPressed 方法中可以看出,如果方 block 已满,checkBottomFull() 将清除底行,如果方 block 击中地板或下面的另一方 block ,collisionCheck() 将生成一个新方 block ,如果方 block 卡在顶部,checkEndGame() 将结束游戏。

enter image description here

<小时/>

我正在努力解决以下问题:

  • 要创建一个实际的俄罗斯方 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com