java如何将一副牌一分为二?
我想创造一个非常简单的战争游戏。用户和计算机每回合抽一张牌,他们要么赢,要么平,要么输。牌一出,游戏就结束了。我有四节课。我的战争课我主要是在测试甲板上的情况是否正常。我需要做的是把牌分成两半,这样每个玩家每回合抽一张牌(游戏结束时总共26张),我不知道怎么做。我猜我需要一个for循环,但除此之外,我不知道如何给每个玩家一张牌。忽略类战中的用户输入,就像我说的,我只是在测试。我在这里展示了三个类,我的最后一个是JApplet,这里不需要,所以我没有包括它
编辑:感谢大家的帮助。我还有最后一个问题,那我应该很好。我想展示卡片。toString在我的JApplet类中,但当我调用Card Card=new Card()时;它拒绝工作。我猜这是因为构造器。我该如何让toString显示,或者绕过构造函数
编辑:把一切弄清楚,谢谢大家的帮助
import java.util.ArrayList;
import java.util.Random;
public class Card {
private int suit, number;
String [] suits = {"Heart" , "Diamond" , "Spade" , "Club"}; //suits
String [] numbers = { "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" ,
"Jack" , "Queen" , "King" , "Ace" }; //card values
String card = "";
public Card(int suits, int numbers)
{
suit = suits;
number = numbers;
}
public String toString() //displays card suit/value
{
String finalCard = numbers[number] + " of " + suits[suit];
return finalCard;
}
}
import java.util.ArrayList;
import java.util.Random;
public class FullDeck {
private ArrayList<Card> cards = new ArrayList<Card>();//card array list
public FullDeck()
{
for(int a =0; a<=3; a++) //loops through suits
{
for(int b =0; b<=12;b++) //loops through values
{
cards.add(new Card(a,b)); //creates adds cards to list
}
}
}
public Card drawRandomCard()
{
Random generator = new Random(); //picks random card
int index = generator.nextInt(cards.size());
return cards.remove(index); //removes card from list
}
public String toString()
{
String result = "Cards remaining in deck: " + cards; //not currently used
return result;
}
}
import java.util.Scanner;
public class War {
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Card C;
FullDeck hand1 = new FullDeck();
FullDeck hand2 = new FullDeck();
System.out.println("Enter number of cards to be dealt: ");
int numberCards = scan.nextInt();
System.out.println("Cards drawn: ");
for (int i = 0; i < numberCards; i++) {
C = hand1.drawRandomCard();
System.out.println(C.toString());
}
}
}
# 1 楼答案
将
FullDeck
类重命名为Deck
是有意义的然后,为
Deck
包含一个构造函数,该构造函数将ArrayList
作为参数。为Deck
包含一个方法,该方法返回一个Deck
对象,称为类似splitDeck
的东西在内部,
splitDeck
将Deck
中的一半卡从该对象的cards
中移除,并将它们添加到新的临时ArrayList
。然后,它创建并返回一个使用这个临时ArrayList
构建的甲板对象现在,调用该方法的
Deck
对象包含半个组,返回的Deck
对象包含另一半假设您将该类重命名为
Deck
(只是因为这样更有意义),并保留相同的默认构造函数:# 2 楼答案
创建两个
ArrayList<Card>
,然后做一个for
循环,循环52次确保在
FullDeck
中添加一个getCards()
方法,它只返回cards
通过这种方式,所有的牌都会随机出现在每个玩家的手中,所以你可以把它们按顺序排列
编辑:不过,最简单的解决方案是Daniel Gabriel所说的,只需连续两次调用
drawRandomCard()