在我玩完游戏(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++;
}
}
我希望游戏能够正常运行,并在游戏需要完成之前一直显示所有卡片。谢谢!
答案 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
)。