用java ArrayList集合编写扑克牌洗牌与发牌

用java ArrayList集合编写扑克牌洗牌与发牌,第1张

import javautilArrayList;
import javautilRandom;
public class PokerDemo {
ArrayList<Card> poker = new ArrayList<Card>();
Player[] players;
int n = 4;
String[] name = {"Wang", "Zhang", "Li", "Yuan"};
public PokerDemo() {
players = new Player[n];
for(int i = 0; i < playerslength; i++)
players[i] = new Player(name[i]);
for(int i = 0; i < 4; i++)
for(int j = 0; j < 13; j++)
pokeradd(new Card(i, j));
Systemoutprintln("洗牌前: " + poker);
xipai();
Systemoutprintln("洗牌后: " + poker);
fapai();
Systemoutprintln("发牌后: ");
for(int i = 0; i < playerslength; i++)
Systemoutprintln(players[i]);
}
public void xipai() {
Random r = new Random();
ArrayList<Card> tmp = new ArrayList<Card>();
while(!pokerisEmpty()) {
int index = rnextInt(pokersize());
Card card = pokerget(index);
tmpadd(card);
pokerremove(index);
}
poker = new ArrayList<Card>(tmp);
}
public void fapai() {
int p = 0;
while(!pokerisEmpty()) {
Card card = pokerget(0);
players[p]add(card);
p = (p + 1) % n;
pokerremove(0);
}
}
public static void main(String[] args) {
new PokerDemo();
}
}
class Card {
int val, sty;
final String[] value = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
final String[] style = {"黑桃", "红心", "梅花", "方块"};
public Card(int s, int v) {
sty = s;
val = v;
}
public String toString() {
return style[sty]+ " " + value[val];
}
}
class Player {
ArrayList<Card> cards = new ArrayList<Card>();
String name;
public Player(String n) {
name = n;
}
public void add(Card card) {
cardsadd(card);
}
public String toString() {
return name + ":\t" + cards;
}
}

public class PokerDemo {
public static void main(String[] args) {
// 创建一个HashMap集合
HashMap<Integer, String> hm = new HashMap<Integer, String>();
// 创建一个ArrayList集合
ArrayList<Integer> array = new ArrayList<Integer>();
// 创建花色数组和点数数组
// 定义一个花色数组
String[] colors = { "♠", "♥", "♣", "♦" };
// 定义一个点数数组
String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"K", "A", "2", };
// 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
int index = 0;
for (String number : numbers) {
for (String color : colors) {
String poker = colorconcat(number);
hmput(index, poker);
arrayadd(index);
index++;
}
}
hmput(index, "小王");
arrayadd(index);
index++;
hmput(index, "大王");
arrayadd(index);
// 洗牌(洗的是编号)
Collectionsshuffle(array);
// 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
TreeSet<Integer> fengQingYang = new TreeSet<Integer>();
TreeSet<Integer> linQingXia = new TreeSet<Integer>();
TreeSet<Integer> liuYi = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<Integer>();
for (int x = 0; x < arraysize(); x++) {
if (x >= arraysize() - 3) {
diPaiadd(arrayget(x));
} else if (x % 3 == 0) {
fengQingYangadd(arrayget(x));
} else if (x % 3 == 1) {
linQingXiaadd(arrayget(x));
} else if (x % 3 == 2) {
liuYiadd(arrayget(x));
}
}
// 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
lookPoker("风清扬", fengQingYang, hm);
lookPoker("林青霞", linQingXia, hm);
lookPoker("刘意", liuYi, hm);
lookPoker("底牌", diPai, hm);
}
// 写看牌的功能
public static void lookPoker(String name, TreeSet<Integer> ts,
HashMap<Integer, String> hm) {
Systemoutprint(name + "的牌是:");
for (Integer key : ts) {
String value = hmget(key);
Systemoutprint(value + " ");
}
Systemoutprintln();
}
}

随便写点,不是很满意,也是因为对题目有点莫名。其实有些牌不是每个人一样多牌的,比如斗地主。但是题目既然要求一个int来记录每个玩家牌的数量,那也行。但是这样就可以让父类来处理所有的发牌 *** 作,又何必将deal写作抽象方法
enum Suit {
SPADE { public String toString() { return "Spade"; } },
HEART { public String toString() { return "Heart"; } },
CLUB { public String toString() { return "Club"; } },
DIAMOND { public String toString() { return "Diamond"; } }
}
enum Face {
ACE { public String toString() { return "A"; } },
DEUCE { public String toString() { return "2"; } },
THREE { public String toString() { return "3"; } },
FOUR { public String toString() { return "4"; } },
FIVE { public String toString() { return "5"; } },
SIX { public String toString() { return "6"; } },
SEVEN { public String toString() { return "7"; } },
EIGHT { public String toString() { return "8"; } },
NINE { public String toString() { return "9"; } },
TEN { public String toString() { return "10"; } },
JACK { public String toString() { return "J"; } },
QUEEN { public String toString() { return "Q"; } },
KING { public String toString() { return "K"; } }
}
class Card {
private final Suit suit;
private final Face face;

public Card(Suit suit, Face face) {
thissuit = suit;
thisface = face;
}

public String toString() {
return suittoString() + " " + facetoString();
}
}
class Deck {
private Card[] cards = new Card[52];
private int currentCardIndex = 0;

public Deck() {
int index = 0;
for (Suit suit : Suitvalues()) {
for (Face face : Facevalues()) {
cards[index++] = new Card(suit, face);
}
}
}

public void shuffle() {
javautilRandom random = new javautilRandom();
for (int i = 0; i < cardslength; ++i) {
ArrayUtilitiesswap(cards, i, randomnextInt(cardslength));
}
}

public Card deal() {
if (currentCardIndex > cardslength)
return null;
Card card = cards[currentCardIndex];
cards[currentCardIndex++] = null;
return card;
}
}
class CardPlayer {
private javautilList<Card> cards;

public CardPlayer() {
cards = new javautilArrayList<Card>();
}

public void getCard(Card card) {
cardsadd(card);
}

public void showCards() {
Systemoutprintln(cards);
}
}
abstract class CardGame {
protected Deck deck;
protected int numberOfCard;
protected int numberOfPlayer;

protected CardGame(int numberOfCard, int numberOfPlayer) {
deck = new Deck();
thisnumberOfCard = numberOfCard;
thisnumberOfPlayer = numberOfPlayer;
}

public void shuffle() {
deckshuffle();
}

public abstract void displayDescription();
public abstract void deal(CardPlayer player);
}
class CardGameA extends CardGame {
protected CardGameA() {
super(5, 4);
}
public void deal(CardPlayer player) {
for (int i = 0; i < 5; ++i) {
playergetCard(deckdeal());
}
}
public void displayDescription() {
Systemoutprintln("Card Game A");
}

}
class CardGameB extends CardGame {
protected CardGameB() {
super(13, 4);
}
public void deal(CardPlayer player) {
for (int i = 0; i < 13; ++i) {
playergetCard(deckdeal());
}
}
public void displayDescription() {
Systemoutprintln("Card Game B");
}

}
public class PlayCardGames {
public static void main(String[] args) {
testCardGame(new CardGameA());
testCardGame(new CardGameB());
}

static void testCardGame(CardGame game) {
CardPlayer[] players = {new CardPlayer(), new CardPlayer(),
new CardPlayer(), new CardPlayer(), };
gameshuffle();
for (CardPlayer player : players) {
gamedeal(player);
}
gamedisplayDescription();
for (CardPlayer player : players) {
playershowCards();
}
}
}
class ArrayUtilities {
public static <T> void swap(T[] array, int i1, int i2) {
T temp = array[i1];
array[i1] = array[i2];
array[i2] = temp;
}
}

洗牌过程?一句话就完成洗牌过程了!!
代码如下:
import javaioIOException;
import javautilArrayList;
import javautilCollections;
import javautilList;
public class CardGame {

public static void main(String[] args) throws IOException {
String[] types={"黑桃","草花","红心","方块"};
String[] value={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
String[] king={"JOKER","joker"};
List<String> cards=new ArrayList<String>();//将一副牌54张放入待洗牌的集合中
for(int i=0;i<typeslength;i++){
for(int j=0;j<valuelength;j++){
cardsadd(types[i]+value[j]);//每个花色的2-A
}
}
cardsadd(king[0]);//大鬼
cardsadd(king[1]);//小鬼
int m=0;
Systemoutprintln("洗牌之前----------------------------------------------------\n");
for(String str:cards)
{
Systemoutprint(str+"\t");
m++;
if(m%13==0)
Systemoutprintln();
}
Collectionsshuffle(cards);//洗牌动作
m=0;
Systemoutprintln("\n\n洗牌之后-----------------------------------------------------\n");
for(String str:cards)//输出洗牌后的结果
{
Systemoutprint(str+"\t");
m++;
if(m%13==0)
Systemoutprintln();
}

}
}
我在这里把所有的花色都加入一起洗牌了,楼主可根据需要进行特殊花色的洗牌!!你多执行几次就会发现每次洗牌后的牌的位置都不是一样的!!关键在一个洗牌动作的方法!!

public class card{
private String color;
private String count;
private String face;
/
@return the color
/
public String getColor() {
return color;
}
/
@param color the color to set
/
public void setColor(String color) {
thiscolor = color;
}
/
@return the count
/
public String getCount() {
return count;
}
/
@param count the count to set
/
public void setCount(String count) {
thiscount = count;
}
/
@return the face
/
public String getFace() {
return face;
}
/
@param face the face to set
/
public void setFace(String face) {
thisface = face;
}

}

public class Test {
public static void main(String args[]){

int puke[][] = new int[52][2];

for(int i = 0 ; i < 52; i++){
puke[i][0] = i+1;//牌面
puke[i][1] = 0;//0表示正面,1表示背面
}
for(int i = 2; i <= 52 ;i++){
for(int j = 0 ; j < 52; j++){
if(puke[j][0]%i==0){
puke[j][1]=Mathabs(puke[j][1]-1);//1为0,0为1;
}
}
}
for(int i = 0 ; i < 52; i++){
if(puke[i][1]==0)//为正面打印
Systemoutprintln(puke[i][0]);
}
}
}
结果为:1,4,9,16,25,36,49


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13369329.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存