gpt4 book ai didi

java - 制作纸牌游戏,每次将纸牌添加到玩家牌库时都需要 JTextField 进行更新

转载 作者:行者123 更新时间:2023-12-02 06:23:52 25 4
gpt4 key购买 nike

我正在制作一款纸牌游戏(特别是为那些知道这是什么的人设计的牌组构建游戏!),在整个游戏过程中,玩家将“购买”牌以添加到他们的牌组中,并且每张牌都有一个关联的点值用它。我有一个 JTextField,每次将卡添加到玩家牌库时我都想更新它,但我不太确定如何去做。我尝试添加这个:

    int deckScore = 0;
for (Card d : player_1_deck)
{
deckScore += d.getValue();
}
deckScoreTextBox.setText(Integer.toString(deckScore));

但我不太确定它会起作用(提示:它没有)。然而,如果我将它放在每个卡槽的 mouseClickEvent 下,它确实可以工作。这样做的问题是,其他玩家将能够将牌添加到你的牌组中并拿走牌,这不会立即更新。我的 google-foo 让我认为我需要使用某种监听器,但我仍然是一个菜鸟,不太确定它是如何工作的,并且在理解教程和指南时遇到困难。如果我是正确的并且实际上需要一个听众,那么类似的东西如何工作?如果没有,我还有什么其他选择?

我不确定需要什么 SSCCE,因为这是一个比我的应用程序更广泛的问题,但您可以从上面的代码片段中看到,我的文本框名为 DeckScoreTextBox,并且我使用 DeckScore 作为我的变量。

最佳答案

嗯,这就是 encapsulation 的地方 进去。

假设您的牌组位于数组列表中:

ArrayList<Card> deck = new ArrayList<>();

现在,当您向套牌中添加或删除牌时,您可能只需调用列表的addremove 函数即可。

有一个更好的想法:创建两个函数 addCardremoveCard,这些将是操作牌组中的卡片的唯一方法(以及shuffle 等),并且仅在影响牌数的函数中解决牌组值的重新计算问题。

您还可能想要创建一个单独的类 Deck 并将字段 deck 设为私有(private),这样您就可以 100% 保证每个人(= 如果您单独编程的话)只使用安全函数addCard,...并且不直接调用列表的函数。

它看起来如何:

class Deck {
private ArrayList<Card> deck = new ArrayList<>();
//only this class can see and work with this field

...
//everyone can see and call this method
public void addCard(Card newCard) {
deck.add(newCard);
gui.updateDeckValue(); //or something like that
}
}

关于java - 制作纸牌游戏,每次将纸牌添加到玩家牌库时都需要 JTextField 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768138/

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