连接四个Java游戏项目,需要帮助的基本概念



我在一个实验室工作,这是一个四人连接游戏。我在基本概念方面遇到了麻烦,比如类如何相互通信,如何使用私有实例变量,如何使用ArrayList,如何比较jlabel或将它们设置为可比较的东西……

我有四个类,GUI, Game, Player, Name

我可以通过使用两个四个循环来创建GUI,游戏是一个有7列6块的网格。作品是图像,

JLabel Piece = new JLabel("images/blank.png");
例如

来表示一个空的点。

GUI基于JFrame,单个内容窗格和四个面板,一个用于指示谁在玩和谁赢的标题,另一个用于伴随7行的7个按钮,网格本身可能的地方被播放,然后一个按钮面板,给你选择重播。

我缺少很多概念。例如,重播按钮应该在游戏结束后才出现。

我不明白如何使用数组列表。我试着用

ArrayList<ArrayList<JLabel>> myList = new ArrayList<ArrayList<JLabel>>(); 

当我通过运行两个for循环创建GUI时,像这样

For ( c = 0 ; c<8 ; c++) {
ArrayList<JLabel> column = new ArrayList<JLabel>();
For ( r = 0 ; r<7 ; r++) {
ArrayList<JLabel> row = new ArrayList<JLabel>();
JLabel empty = new JLabel("images/blank.png");
row.add(empty);
}
column.add(row);
}

即使是这一小步我都已经糊涂了。我知道上面的两个for循环是不正确的特别是ArrayList。我不知道如何创建数组列表并使用它们。

使用类似

的内容
column.get().get();
myList.get().get();

以获得特定的部分。

我不知道如何将其传递给参数,例如,如果我为第7列按下按钮7,但还没有棋子被玩过,我可以从第6行第7列最低的区域开始,并将其更新为合适玩家的红色或黄色棋子。

这是模糊的,我怀疑我将得到任何地方,但我迫切需要帮助。助教/老师给我的时间不多了,我认为我的时间不够用,无法完成这个项目。

我明白它是如何工作的/我必须做什么,但在应用Java代码方面…我很感激任何帮助。

首先,您应该使用一个枚举数组。数组列表用于存储大量的项目,并且这些项目的数字可能会快速变化。数组旨在将数据存储在某种类型的网格中。由于您使用的是静态板,请使用数组!它们占用的内存也少得多。例子:

//Note you should use [column][row] as that is common practice.
States[][] grid = new States[7][6];
//And initialize it:
for(int i = 0; i < grid.length; i++)
    for(int o = 0; o < grid[i].length; o++)
        grid[i][o] = EMPTY_JLABEL;

然后声明一个枚举(这是一个新类)(注意:替换FULL_PLAYER_ONE_JLABEL和FULL_PLAYER_TWO_JLABEL为每个jlabel有图像):

public enum States {
    FULL_PLAYER_ONE(FULL_PLAYER_ONE_JLABEL), FULL_PLAYER_TWO(FULL_PLAYER_TWO_JLABEL), EMPTY(EMPTY_JLABEL);
    //The image of the appropriate state.
    private JLabel label;
    //Enum constructors must be private
    private States(JLabel label) {
        this.label = label;
    }
    public JLabel getLabel() {
        return label;
    }
}

在你的GUI中,有一个JButton只在游戏结束时添加到帧中。还可以添加一个按钮来指示玩家何时点击每个列。

JButton button = new JButton();
//Initialize JButton and add to frame...
//Anytime before the frame is set to visible:
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        /* Perform tests for for what should happen.
           For example test whose turn it is then call a method to add a piece to that column.  Then call a checker to see if someone has won.  If so, display the replay button, otherwise do nothing (allow other player to move).
        */
    }
}

相关内容

  • 没有找到相关文章

最新更新