当前位置: 首页 > 知识库问答 >
问题:

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

松翔
2023-03-14

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

为了给出一个简单的分类,我有四个类:GUI、游戏、玩家、名称

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

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

例如,表示空白点。

图形用户界面是基于一个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,并且还没有播放棋子,我可以从第7列第6行的最低区域开始,并将其更新为已播放的棋子,红色或黄色,用于相应的玩家。

这是含糊不清的,我怀疑我能取得任何进展,但我非常需要帮助。助教/老师没有多少时间,我相信我非常缺乏完成这个项目的能力。

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

共有1个答案

邢硕
2023-03-14

好的,首先,你应该使用一个枚举数组。数组列表适用于许多项目,并且可以有快速变化的数字。数组旨在将数据存放在某种网格中。由于您使用的是静态板,请使用数组!它们的内存占用也少得多。例如:

//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替换为具有每个图像的JLabels):

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).
        */
    }
}
 类似资料:
  • 我正在制作一个名为SOS的游戏。这是一款3x3的棋盘游戏,与Tic Tac Toe的概念相同,但在这款游戏中,玩家无法选择是以X还是O的身份进行游戏,游戏中唯一的规则是形成“SOS”。 我们的项目应该在所有职位被填补后终止,每个组成的“SOS”将被添加到组成“SOS”的玩家中。 我的问题是关于得分。在第一行输入SOS后,即,我尝试在第二行第一列输入“O”,玩家2将递增。它不应该递增,因为它不满足我

  • 这是我关于堆栈溢出的第一个问题,所以如果我的问题中有一个新手错误,请原谅,请随时更正,因为我计划在未来几个月内更多地使用此网站。 不管怎样,我是高中12年级的学生,我被一个家庭作业问题卡住了。所以基本上我们被分配了一个创建战争游戏(纸牌游戏)的项目,我们被要求每天做一小部分。到目前为止,直到今天一切都很顺利,因此我向你们提出了这个问题。 以下是该项目的内容: 卡片 它有什么: 私有int值:卡的值

  • 很抱歉打扰你们,我是编程新手,一直在这个程序上有问题。 谢了! *********编辑***************我从BMI中删除了int值,但有损转换错误仍然存在。有什么办法解决这个问题吗?

  • 问题内容: 我想我对使用Redis的所有命令都有很好的了解,但是我很难确定使用它的最佳方法。我正在设计一个客户通知系统,当他们的任何电路出现警报时,都会通过他们的首选方法(电子邮件,SNMP,Syslog)通知他们。 这样,我得到一个设备名称和一个端口。我需要将其与一个客户相关联,然后将该客户与一种交付方式相关联。使用关系数据库时,看起来可能像这样: (大大简化了示例)。 我可以看到如何使用列表哈

  • 我正在开发一个基于Java(客户机和服务器)的多人策略游戏。我没有太多的经验在网络游戏,但我做过一些小事情,像一个多功能聊天和2个玩家的抽签tac脚趾与插座。我不是在找人为我编写代码,只是给我一些指导。 游戏经历了多个阶段:首先,用户连接并登录。在他被赋予主持/加入游戏的选择权之后。在他加入一个游戏或者某人加入他的游戏之后,客户端就会继续进入游戏阶段。游戏是1v1的,只需要每隔5秒来回发送数据(如

  • 一 单层神经网络(感知器) 1.结构 下面来说明感知器模型。 在原来MP模型的“输入”位置添加神经元节点,标志其为“输入单元”。其余不变,于是我们就有了下图:从本图开始,我们将权值w1, w2, w3写到“连接线”的中间。 图1 单层神经网络 在“感知器”中,有两个层次。分别是输入层和输出层。输入层里的“输入单元”只负责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。 我