gpt4 book ai didi

java - 如何让两个子类在游戏中相互通信

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:49:21 24 4
gpt4 key购买 nike

链接:Using MouseListener to select a range of cells in a grid

我正在创建一个战舰游戏,有两个网格。用户将他们的飞船放在一个网格上,然后轰炸另一个网格。

我有一个名为 Grid 的抽象类,它创建一个 10x10 的单元格网格(它扩展了 JPanel 类)。它为每个单元格提供一个监听器,如下所示:

public Grid() {
setPreferredSize(new Dimension(300, 300));
setLayout(new GridLayout(GRID_SIZE,GRID_SIZE));

for (int x = 0; x < GRID_SIZE; x++)
for (int y = 0; y < GRID_SIZE; y++) {
final Cell cell = new Cell(x, y);
cellArray[x][y] = cell;
add(cell);
cell.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
mouseClick(e, cellArray);
}

@Override
public void mouseEntered(MouseEvent e) {
mouseEnter(e, cellArray);
}

@Override
public void mouseExited(MouseEvent e) {
mouseExit(e, cellArray);
}

@Override
public void mousePressed(MouseEvent e) {
mousePress(e, cellArray);
}

@Override
public void mouseReleased(MouseEvent e) {
mouseRelease(e, cellArray);
}
});
}
}

因此可以从两个子类访问这些监听器,监听器调用另一个方法,如上面的代码所示。这些方法包含在构造函数下并且都是抽象的:

public abstract void mouseClick(MouseEvent e, Cell[][] cellArray);
public abstract void mouseEnter(MouseEvent e, Cell[][] cellArray);
public abstract void mouseExit(MouseEvent e, Cell[][] cellArray);
public abstract void mousePress(MouseEvent e, Cell[][] cellArray);
public abstract void mouseRelease(MouseEvent e, Cell[][] cellArray);

然后我有两个具体的子类 - 一个用于“玩家网格”,另一个用于“计算机网格”。主要区别在于,在 Player 网格中,听众会立即用于放置船只。在计算机网格中,船舶是自动放置的(在构造该类的对象时完成)。

这意味着 Computer 网格类中的监听器仅用于响应用户轰炸方 block 的尝试。放置船只后,Player Grid 应该会被计算机自动轰炸。

这是我遇到困难的地方。我在 PlayerGrid 类中编写了一个名为 computerAttack() 的方法 - 但我不知道如何从类外部访问它。如何让两个子类进行通信?此外,这是否是正确的方法,还是我想在这两个类(class)中做太多?我已尽力在此处提供尽可能多的信息,但如果需要这两个子类的实际内容,我可以提供。

最佳答案

这是一个典型的应用程序,其中的模式如 MVC被应用。一种方法是单独实现游戏逻辑并用于常见用途,其中包含诸如 computerAttack() 之类的方法。因此,游戏逻辑将包含对网格/玩家的引用,并且还将实现网格/玩家的事件接口(interface)。这样,网格不需要相互了解。

M - 网格状态的内部表示(船/水,轰炸/未轰炸,...)

V - GUI 组件(网格、按钮、UI 事件监听器接口(interface)...)

C - 游戏逻辑(在单独的类或包中实现)

关于java - 如何让两个子类在游戏中相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16254367/

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