文字游戏-董事会实施?


12

我正在使用libgdx开发适用于android的Boggle类型游戏。向用户显示一个4x4的字母网格,用户必须通过在其字母上拖动手指来找到单词。

我不喜欢笨拙,我希望用过的字母消失。其余字母将掉落(固定到板子的底部,屏幕方向固定),然后从顶部重新装满板子。用户可以旋转电路板,以通过战略性的单词选择来尝试在更好的位置使用难于使用的字母。

一个例子:

d g a o
u o r T
h v R I
d G n a

如果我选择单词GRIT,则这些字母将消失,其余字母将掉下来:

d
u g a
h o r o
d v n a

然后换成新字母

d w x y
u g a z
h o r o
d v n a

我一直在努力弄清楚如何代表木板和瓷砖。

我尝试将电路板表示为矩阵,以跟踪所选的图块和有效的移动以及矩阵中存储的图块,以便进行轻松映射。这可行,但是我不得不编写一些复杂的代码来旋转电路板。

其他游戏如何处理此问题?

编辑:所以考虑一下,我真的应该根据电路板的旋转来处理我的接触点,以便单元保持恒定。附上我的想法的图像。处理屏幕触摸,使电路板方向永不变


1
您是说字母落入的方向取决于设备的方向?您能否也详细解释一下“我要旋转瓷砖时拧紧”是什么意思。
Petr Abdulin 2014年

我的意思是,一旦旋转,我从木板位置到瓷砖位置的映射就变得非常复杂。但是,如果我认为电路板围绕坐标系的原点旋转而不是改变所有瓷砖的位置,那么我可以解决这个问题……
andy mcevoy 2014年

感谢更新。通常最好更新问题本身,这样其他人就无需深入评论以获取有价值的信息。对我来说,目前尚不清楚如何进行旋转(现在),旋转的结果以及如何使跟踪变得困难。尚不清楚整板是旋转的还是仅单个砖。通常,添加代码片段对于理解该问题很有帮助。
Petr Abdulin 2014年

我认为我要解决的问题全错了,按照旋转方式处理用户的接触点将使我将电路板视为静态对象。
andy mcevoy 2014年

如果您已找到解决问题的方法,请回答该问题并接受您的回答;否则,如果您仍不确定100%,可以将其保持打开状态。描述您提出的解决方案的术语是“空间转换”,即您在屏幕空间和(旋转的)电路板空间之间转换触摸点。
工程师

Answers:


1

我根本不会使用数组,因为管理它会变得越来越复杂。使用引用其邻居的节点创建自定义的Board数据结构。这本质上是一个多维的节点LinkedList。这样,如果删除节点的字母,其他节点可以以封装的方式查看它。这样避免了复杂的数组运算。您将需要一个大功能来正确连接所有组件,但是一旦链接,逻辑就应该更容易使用。

您的边缘节点将邻居设置为null,因此请确保在需要引用邻居的Node类的方法中进行相应的处理。

我已经使用这种方法实现了Conway的《人生游戏》,一旦设置好它,就大大降低了添加逻辑的复杂度,该逻辑基于邻居改变了Node的状态。

根据您操纵板中节点的方式,您可能需要一种板方法来迭代并确定下一个状态或动作并将其保存在每个节点中。然后,通过迭代并将每个节点提交到新状态来执行此操作。这避免了节点通过查看已更改的节点来确定其下一个状态。

在此处输入图片说明


-2

是的,解决方案是您从矩阵或数组中获取值并为临时数组或矩阵设置该值,然后从此处设置值,这将向您显示旋转值网格。我在下面添加了代码,我认为它可以帮助您

    int MAX_GRID = 4;
    int[][] main_array = new int[MAX_GRID][MAX_GRID];
    int[][] temp_array = new int[MAX_GRID][MAX_GRID];

    /** This method for clockwise **/
    int mainRow = MAX_GRID - 1;
    for (int c = 0; c < MAX_GRID; c++) {
        for (int r = 0; r < MAX_GRID; r++) {
            temp_array [mainRow][c] = main_array [r][c];
            Log.i("TAG", "R C : [ " + mainRow + " " + c + " ]" + " => [ "
                    + r + " " + c + " ]");
            mainRow--;
        }
    }
    main_array = temp_array;

    /** This method for anti-clockwise **/
    int mainCol = 0;
    for (int c = MAX_GRID - 1; c >= 0; c--) {
        for (int r = MAX_GRID - 1; r >= 0; r--) {
            temp_array [r][mainCol] = main_array [c][r];
            Log.i("TAG", "R C : [ " + r + " " + mainCol + " ]" + " => [ "
                    + c + " " + r + " ]");
        }
        mainCol++;
    }
    main_array = temp_array;

    // Now you can set main_array value then its rotate
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.