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

时间:2013-12-25 00:41:07

标签: java swing listener

我正在制作纸牌游戏(特别是那些知道那是什么的牌游戏!)并且在整个游戏中,玩家将“购买”卡片添加到他们的牌组中,并且每张牌都有一个点值相关联用它。我有一个JTextField,我想每次将卡添加到播放器套牌时更新,我不确定如何去做。我尝试添加这个:

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

但我不确定它会起作用(提示:它没有)。但是,如果我把它放在每个卡槽的mouseClickEvent下面,它确实有效。这个问题是,其他玩家将能够将牌添加到你的牌组并取走牌,这不会立即更新。我的google-foo让我认为我需要使用某种类型的监听器,但我仍然是一个菜鸟,并且不确定它是如何工作的,并且我无法理解教程和指南。如果我是正确的,并且听众实际上是必要的,那么这样的事情会怎么样?如果没有,我还有其他选择吗?

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

1 个答案:

答案 0 :(得分:2)

嗯,这是 encapsulation 进入的地方。

假设您的套牌在数组列表中:

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

现在,当您在卡组中添加卡片或从卡片组中删除卡片时,您可以只调用列表中的addremove功能。

有一个更好的主意:创建两个函数addCardremoveCard,这些将是使用卡片(和shuffle等)处理卡片的唯一方法,并解决重新计算仅在影响卡数的函数中使用套牌值。

您还可以创建一个单独的类Deck并将字段deck设为私有,这样您就可以100%保证每个人(如果您单独编程,则为=)仅使用安全函数{{1不直接调用list的函数。

它看起来如何:

addCard