我在一个实验室工作,这是一个四人连接游戏。我在基本概念方面遇到了麻烦,比如类如何相互通信,如何使用私有实例变量,如何使用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).
*/
}
}