java - Java纸牌游戏“Skat”
问题描述
我尝试用Java实现纸牌游戏“Skat”
规则:
有 32 张卡片。每张卡在游戏中只存在一次。
颜色是:梅花、黑桃、红心、菱形
值是:Ace、King、Queen、Jack、10、9、8、7
这些牌被洗牌。有三个玩家
第一轮:每人发3张牌。然后将 2 张牌放入 Skat。
第二轮:每个玩家再发4张牌。
第三轮:每位玩家再发3张牌。
期望的输出:每个玩家的牌显示(每张牌应该存在一次)
我的输出:钻石七(32次)
我的代码:
班级卡:
package skat;
public class Card
{
private static String color, value;
public static String getColor()
{
return color;
}
public static void setColor(String color)
{
Card.color = color;
}
public static String getValue()
{
return value;
}
public static void setValue(String value)
{
Card.value = value;
}
@Override
public String toString()
{
return color + " " + value;
}
}
主类:
package skat;
import java.util.Random;
public class Main
{
public static void main(String[] args)
{
Card[] game = new Card[32];
genCardDeck(game);
shuffleCardDeck(game);
Card[] player1 = new Card[10];
Card[] player2 = new Card[10];
Card[] player3 = new Card[10];
Card[] skat = new Card[2];
dealCards(game,player1,player2,player3,skat);
printCardDeck(game);
}
public static void genCardDeck(Card[] deck) //Generate the deck
{
final String colors[] = {"Clubs","Spades","Hearts","Diamonds"};
final String values[] = {"Ace","King","Queen","Jack","Ten","Nine","Eight","Seven"};
int i = 0;
for (String f : colors)
{
for (String w : values)
{
deck[i] = new Card();
deck[i].setColor(f);
deck[i].setValues(w);
i++;
}
}
}
public static void printCardDeck(Card[] deck) //Print out the deck
{
for (Card c : deck)
{
System.out.println(c);
}
}
public static void shuffleCardDeck(Card[] deck) //Shuffle the card deck
{
Random rand = new Random();
for (int i = 0; i < deck.length; i++) {
int randomNum = rand.nextInt(deck.length);
Card temp = deck[i];
deck[i] = deck[randomNum];
deck[randomNum] = temp;
}
}
public static void dealCards(Card[] deck, Card[] player1,
Card[] player2, Card[] player3, Card[] skat) //Deal the cards
{
//Round 1
int i;
for(i=0;i<9;i++)
{
if(i<3)
player1[i]=deck[i]; //Player 1
else if(i<6)
player2[i-3]=deck[i]; //Player 2
else
player3[i-6]=deck[i]; //Player 3
}
for(i=0;i<2;i++)
{
skat[i]=deck[i]; //Skat
}
//Round 2
for(i=0;i<12;i++)
{
if(i<4)
player1[i]=deck[i+3]; //Player 1
else if(i<8)
player2[i-4]=deck[i+3]; //Player 2
else
player3[i-8]=deck[i+3]; //Player 3
}
//Round 3
for(i=0;i<9;i++)
{
if(i<3)
player1[i]=deck[i+7]; //Player 1
else if(i<6)
player2[i-3]=deck[i+7]; //Player 2
else
player3[i-6]=deck[i+7]; //Player 3
}
}
}
解决方案
我修好了它。现在它按预期工作。
固定代码:
班级卡:
package skat;
public class Card
{
private String color, value;
public String getColor()
{
return color;
}
public void setColor(String color)
{
this.color = color;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
@Override
public String toString()
{
return color + " " + value;
}
}
主类:
package skat;
import java.util.Random;
public class Main
{
public static void main(String[] args)
{
Card[] game = new Card[32];
genCardDeck(game);
shuffleCardDeck(game);
Card[] player1 = new Card[10];
Card[] player2 = new Card[10];
Card[] player3 = new Card[10];
Card[] skat = new Card[2];
dealCards(game,player1,player2,player3,skat);
printCardDeck(game,player1,player2,player3,skat);
}
public static void genCardDeck(Card[] deck) //Generate the deck
{
final String colors[] = {"Clubs","Spades","Hearts","Diamonds"};
final String values[] = {"Ace","King","Queen","Jack","Ten","Nine","Eight","Seven"};
int i = 0;
for (String f : colors)
{
for (String w : values)
{
deck[i] = new Card();
deck[i].setColor(f);
deck[i].setValues(w);
i++;
}
}
}
public static void printCardDeck(Card[] deck, Card[] player1,
Card[] player2, Card[] player3, Card[] skat) //Print out the deck
{
System.out.print("Player 1: "); //Print player 1
for (Card p1 : player1)
{
System.out.print(p1 + ", ");
}
System.out.println("\n");
System.out.print("Player 2: "); //Print player 2
for (Card p2 : player2)
{
System.out.print(p2 + ", ");
}
System.out.println("\n");
System.out.print("Player 3: "); //Print player 3
for (Card p3 : player3)
{
System.out.print(p3 + ", ");
}
System.out.println("\n");
System.out.print("Skat: "); //Print Skat
for (Card sk : skat)
{
System.out.print(sk + ", ");
}
}
public static void shuffleCardDeck(Card[] deck) //Shuffle the card deck
{
Random rand = new Random();
for (int i = 0; i < deck.length; i++) {
int randomNum = rand.nextInt(deck.length);
Card temp = deck[i];
deck[i] = deck[randomNum];
deck[randomNum] = temp;
}
}
public static void dealCards(Card[] deck, Card[] player1,
Card[] player2, Card[] player3, Card[] skat) //Deal the cards
{
//Round 1
int i;
for(i=0;i<9;i++)
{
if(i<3)
player1[i]=deck[i]; //Player 1
else if(i<6)
player2[i-3]=deck[i]; //Player 2
else
player3[i-6]=deck[i]; //Player 3
}
for(i=9;i<11;i++)
{
skat[i-9]=deck[i]; //Skat
}
//Round 2
for(i=11;i<23;i++)
{
if(i<15)
player1[i-8]=deck[i]; //Player 1
else if(i<19)
player2[i-12]=deck[i]; //Player 2
else
player3[i-16]=deck[i]; //Player 3
}
//Round 3
for(i=23;i<32;i++)
{
if(i<26)
player1[i-16]=deck[i]; //Player 1
else if(i<29)
player2[i-19]=deck[i]; //Player 2
else
player3[i-22]=deck[i]; //Player 3
}
}
}
推荐阅读
- amazon-web-services - 如何列出具有策略类型的角色:“AWS 托管策略”?
- arrays - 使用excel公式根据条件按顺序获取数组
- android-studio - 尝试在android上构建应用程序时如何解决“无法解析结果路径字符串:”?
- spring - Spring Data Elasticsearch 2.2.3.RELEASE中如何配置Rest高级客户端的socket超时
- string - 在 Bash 中将变量写入文件时添加了额外的新行
- c++ - read() 函数被卡住并冻结而没有响应
- android - Android - 辅助功能“对讲”使系统大声朗读图像单词;为图像添加“图像”后缀
- symfony - Symfony 5 在用户注销后保留会话属性
- java - 计算长数中的设置位数
- ruby-on-rails - Rails:无法在生产中启动 Rails 控制台