整个甲板通过后,卡消失了。我的for循环或arraylist中的什么地方应该更改,以使它们不会消失?

时间:2019-03-25 21:21:17

标签: java eclipse project 2d-games playing-cards

在我玩完游戏(52回合)后,纸牌消失了。但是,使游戏运行的代码仍然有效,但是我看不到绘制的纸牌。

我尝试查看代码调试,查看类以及以前的分配,但似乎没有任何效果。抱歉,第一篇文章,我不确定如何格式化,如果需要的话我还可以提供更多代码

ArrayList<Cards> cards = new ArrayList<Cards>();
ArrayList<Deck1> deck1 = new ArrayList<Deck1>();
ArrayList<Deck2> deck2 = new ArrayList<Deck2>();
ArrayList<Play> play = new ArrayList<Play>(); // the cards played

//将纸牌随机分为两个副牌

    for (int i = 0; i < 52; i++) {
        int j = (int) (Math.random() * (51 - i) + 0);
        if (i % 2 == 0) {
            deck1.add(new Deck1(cards.get(j).getFile(), cards.get(j).getPV()));
            cards.remove(j);
            f.add(deck1.get(b).getIcon());
            b++;
        } else if (i % 2 == 1) {
            deck2.add(new Deck2(cards.get(j).getFile(), cards.get(j).getPV()));
            cards.remove(j);
            f.add(deck2.get(a).getIcon());
            a++;
        }
    }

我希望游戏能够正常运行,并在游戏需要完成之前一直显示所有卡片。谢谢!

1 个答案:

答案 0 :(得分:0)

int j = (int) (Math.random() * (51 - i) + 0);

问题在于,Math.random()会生成一个介于0(含)到1(不含)之间的数字,所以j <= 50 - i意味着您将永远不会选择牌组中的最后一张纸牌。

将51更改为52。

或者,更简单:

int j = (int) (Math.random() * cards.size());

或更不重复:

Cards card = cards.remove((int) (Math.random() * cards.size()));

现在只需使用card而不是重复cards.get(j)cards.remove(j)

(请注意,您的Cards类应该称为Card)。

或者,再次简化:

Collections.shuffle(cards);
deck1.addAll(cards.subList(0, cards.size() / 2));
deck2.addAll(cards.subList(cards.size() / 2, cards.size()));

(尽管您随后必须以某种方式将这些卡替换成f)。