为了账号安全,请及时绑定邮箱和手机立即绑定

正在回答

1 回答

自己写的程序,能实现要求,有些啰嗦,欢迎大家指教!!!
package com.marvin.java3_7_1;

import java.util.List;

/**
 * 玩家类 包含玩家的ID,姓名,手牌的信息
 * 
 * @author Prague
 *
 */

public class Player {

	private String id;
	private String name;
	private List<PlayCard> handCard;

	public Player(String id, String name) {
		this.id = id;
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<PlayCard> getHandCard() {
		return handCard;
	}

	public void setHandCard(List<PlayCard> handCard) {
		this.handCard = handCard;
	}

}

package com.marvin.java3_7_1;

/**
 * 扑克类 包含扑克的花色、数字(或字母)
 * 
 * @author Prague
 *
 */

public class PlayCard {

	private String color;// 记录花色,黑桃>红桃>梅花>方片
	private String character;// 记录牌面的数字的
	private int realNum;// 记录牌面数字的实际大小的,3<4<5<6<7<8<9<10<J<Q<K<A<2
	private int num; // 一副扑克牌每张扑克的唯一标示
	private int realColor; // 记录牌面花色的实际大小,黑桃(3)>红桃(2)>梅花(1)>方片(0)

	public PlayCard(String color, String character, int realNum, int realColor, int num) {
		this.color = color;
		this.character = character;
		this.realNum = realNum;
		this.realColor = realColor;
		this.num = num;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getCharacter() {
		return character;
	}

	public void setCharacter(String character) {
		this.character = character;
	}

	public int getRealNum() {
		return realNum;
	}

	public void setRealNum(int realNum) {
		this.realNum = realNum;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getRealColor() {
		return realColor;
	}

	public void setRealColor(int realColor) {
		this.realColor = realColor;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + num;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PlayCard other = (PlayCard) obj;
		if (num != other.num)
			return false;
		return true;
	}
	
	

}

package com.marvin.java3_7_1;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 创建两名玩家 从键盘输入玩家的ID和姓名
 * 
 * @author Prague
 *
 */
public class CreatePlayer {

	private List<Player> listPlayer = new ArrayList<Player>();

	public List<Player> getListPlayer() {
		return listPlayer;
	}

	/**
	 * 创建两名玩家,从键盘输入玩家信息
	 */
	@SuppressWarnings("resource")
	public void createPlayer() {
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 2; i++) {
			System.out.println("请输入玩家的ID:");
			Player p1 = new Player(null, null);
			p1.setId(sc.next());
			System.out.println("请输入玩家的姓名:");
			p1.setName(sc.next());
			listPlayer.add(p1);
		}
	}

}

package com.marvin.java3_7_1;

import java.util.ArrayList;
import java.util.List;

/**
 * 创建一副扑克牌
 * 
 * @author Prague
 *
 */

public class CreatePlayCard {

	private List<PlayCard> listPlayCard = new ArrayList<PlayCard>();
	final String[] character = { "3", "4", "5", "6", "7", "8", "9", "10", "J",
			"Q", "K", "A", "2" };
	final String[] color = { "黑桃", "红桃", "梅花", "方片" };

	public List<PlayCard> getListPlayCard() {
		return this.listPlayCard;
	}

	// 创建扑克牌
	public void createPlayCard() {
		int num = 0;
		for (int i = 0; i < 13; i++) {
			for (int j = 0; j < color.length; j++) {
				PlayCard pc = new PlayCard(color[j], character[i], i, (3 - j),
						num++);
				if (pc != null) {
					listPlayCard.add(pc);
				}
			}
		}
	}

}

package com.marvin.java3_7_1;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 洗牌 将之前创建的扑克牌打乱顺序
 * 
 * @author Prague
 *
 */
public class Shuffle {

	private List<PlayCard> shufflePlayCard = new ArrayList<PlayCard>();

	public List<PlayCard> getShufflePlayCard() {
		return shufflePlayCard;
	}

	/**
	 * 将输入的扑克牌的顺序打乱,返回洗牌后的扑克牌集合
	 */
	public void shuffle(List<PlayCard> listPlayCard) {
		Random random = new Random();
		while (shufflePlayCard.size() < 52) {
			int num = random.nextInt(52);
			if (!shufflePlayCard.contains(listPlayCard.get(num))) {
				shufflePlayCard.add(new PlayCard(listPlayCard.get(num)
						.getColor(), listPlayCard.get(num).getCharacter(),
						listPlayCard.get(num).getRealNum(), listPlayCard.get(
								num).getRealColor(), listPlayCard.get(num)
								.getNum()));

			} else {
				continue;
			}
		}
	}

}

package com.marvin.java3_7_1;

import java.util.ArrayList;
import java.util.List;

/**
 * 发牌
 * 
 * @author Prague
 *
 */

public class DistributePlayCard {

	public void distribute(Player p1, Player p2, List<PlayCard> playCard) {
		// p1.setHandCard(handCard);
		List<PlayCard> p1HandCard = new ArrayList<PlayCard>();
		List<PlayCard> p2HandCard = new ArrayList<PlayCard>();
		p1HandCard.add(new PlayCard(playCard.get(0).getColor(), playCard.get(0)
				.getCharacter(), playCard.get(0).getRealNum(), playCard.get(0)
				.getRealColor(), playCard.get(0).getNum()));
		p2HandCard.add(new PlayCard(playCard.get(1).getColor(), playCard.get(1)
				.getCharacter(), playCard.get(1).getRealNum(), playCard.get(1)
				.getRealColor(), playCard.get(1).getNum()));
		p1HandCard.add(new PlayCard(playCard.get(2).getColor(), playCard.get(2)
				.getCharacter(), playCard.get(2).getRealNum(), playCard.get(2)
				.getRealColor(), playCard.get(2).getNum()));
		p2HandCard.add(new PlayCard(playCard.get(3).getColor(), playCard.get(3)
				.getCharacter(), playCard.get(3).getRealNum(), playCard.get(3)
				.getRealColor(), playCard.get(3).getNum()));
		p1.setHandCard(p1HandCard);
		p2.setHandCard(p2HandCard);
	}

}

package com.marvin.java3_7_1;

/**
 * 根据扑克牌面实际大小找出扑克集合的最大值
 * 
 * @author Prague
 *
 */

public class FindMaxPlayCard {

	public static int findMaxPlayCard(PlayCard pc1, PlayCard pc2) {
		if (pc1.getRealNum() > pc2.getRealNum()) {
			return 0;
		} else if (pc1.getRealNum() < pc2.getRealNum()) {
			return 1;
		} else if (pc1.getRealNum() == pc2.getRealNum()) {
			if (pc1.getRealColor() > pc2.getRealColor()) {
				return 0;
			} else if (pc1.getRealColor() < pc2.getRealColor()) {
				return 1;
			} 
//			else if (pc1.getRealColor() == pc2.getRealColor()) {
//				return -1;// 牌面包括花色和数字都相等
//			}
		}
		return -1;
	}

}

package com.marvin.java3_7_1;

import java.util.ArrayList;
import java.util.List;

/**
 * 洗牌发牌Easy版 功能描述: 1、创建一副扑克牌 包括四种花色:黑桃、红桃、梅花、方片 十三种点数:2-10,J、Q、K、A,不考虑大小王
 * 2、创建两名玩家 玩家至少要有ID、姓名、手牌等属性,手牌为扑克牌的集合 3、洗牌 将之前创建的“一副扑克牌”打乱顺序 4、发牌
 * 将洗牌之后的扑克牌集合,从第一张开始,发给两名玩家,按照一人一张的方式,每人发两张。
 * 5、游戏比较两名玩家手中的扑克牌,规则为:取两人各自手中点数最大的牌进行比较
 * ,点数大的赢;若两人各自的点数最大的牌相等,则再按花色进行比较,按照黑桃>红桃>梅花>方片的顺序进行比较。
 * 
 * @author Prague
 *
 */

public class PlayCardGame {

	List<PlayCard> listPlayCard = new ArrayList<PlayCard>();
	List<Player> listPlayer = new ArrayList<Player>();

	public static void main(String[] args) {
		PlayCardGame pcg = new PlayCardGame();
		CreatePlayCard cpc = new CreatePlayCard();
		System.out.println("---------------创建一副扑克牌--------------------");
		cpc.createPlayCard(); // 创建一副扑克并输出创建结果
		pcg.listPlayCard = cpc.getListPlayCard();
		// if (pcg.listPlayCard != null) {
		// for (PlayCard pc : pcg.listPlayCard) {
		// System.out.println(pc.getColor() + "  " + pc.getCharacter()
		// + "  " + pc.getRealNum() + "  " + pc.getNum());
		// }
		// }

		CreatePlayer cp = new CreatePlayer();
		cp.createPlayer(); // 创建两名玩家
		pcg.listPlayer = cp.getListPlayer();
		if (pcg.listPlayer != null) {
			for (Player p : pcg.listPlayer) {
				System.out.println(p.getId() + "  " + p.getName());
			}
		}

		System.out.println("--------------洗牌后--------------------");
		Shuffle sh = new Shuffle();
		sh.shuffle(pcg.listPlayCard);
		List<PlayCard> lp = new ArrayList<PlayCard>();
		lp = sh.getShufflePlayCard();
		// if (lp != null) {
		// for (PlayCard playCard : lp) {
		// System.out.println(playCard.getColor() + "  "
		// + playCard.getCharacter() + "  "
		// + playCard.getRealNum() + "  " + playCard.getNum());
		// }
		// }

		System.out.println("---------------玩家的手牌--------------------");
		DistributePlayCard dpc = new DistributePlayCard();
		dpc.distribute(pcg.listPlayer.get(0), pcg.listPlayer.get(1), lp);
		System.out.println("玩家1第一张手牌:"
				+ pcg.listPlayer.get(0).getHandCard().get(0).getColor() + "  "
				+ pcg.listPlayer.get(0).getHandCard().get(0).getCharacter());
		System.out.println("玩家1第二张手牌:"
				+ pcg.listPlayer.get(0).getHandCard().get(1).getColor() + "  "
				+ pcg.listPlayer.get(0).getHandCard().get(1).getCharacter());
		System.out.println("玩家2第一张手牌:"
				+ pcg.listPlayer.get(1).getHandCard().get(0).getColor() + "  "
				+ pcg.listPlayer.get(1).getHandCard().get(0).getCharacter());
		System.out.println("玩家2第二张手牌:"
				+ pcg.listPlayer.get(1).getHandCard().get(1).getColor() + "  "
				+ pcg.listPlayer.get(1).getHandCard().get(1).getCharacter());

		// 找出每个玩家中最大的手牌
		PlayCard player1Max = new PlayCard(null, null, 0, 0, 0);
		PlayCard player2Max = new PlayCard(null, null, 0, 0, 0);
		if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0).getHandCard()
				.get(0), pcg.listPlayer.get(0).getHandCard().get(1)) == 0) {
			player1Max = pcg.listPlayer.get(0).getHandCard().get(0);
		} else if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(0)
				.getHandCard().get(0),
				pcg.listPlayer.get(0).getHandCard().get(1)) == 1) {
			player1Max = pcg.listPlayer.get(0).getHandCard().get(1);
		}
		if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1).getHandCard()
				.get(0), pcg.listPlayer.get(1).getHandCard().get(1)) == 0) {
			player2Max = pcg.listPlayer.get(1).getHandCard().get(0);
		} else if (FindMaxPlayCard.findMaxPlayCard(pcg.listPlayer.get(1)
				.getHandCard().get(0),
				pcg.listPlayer.get(1).getHandCard().get(1)) == 1) {
			player2Max = pcg.listPlayer.get(1).getHandCard().get(1);
		}

		// 判断谁的手牌中的最大的那张牌比较大
		if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == 0) {
			System.out.println("玩家1获胜!");
			System.out
					.println("玩家1的手牌是:"
							+ pcg.listPlayer.get(0).getHandCard().get(0)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(0).getHandCard().get(0)
									.getCharacter()
							+ " 和 "
							+ pcg.listPlayer.get(0).getHandCard().get(1)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(0).getHandCard().get(1)
									.getCharacter());
		} else if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == 1) {
			System.out.println("玩家2获胜!");
			System.out
					.println("玩家2的手牌是:"
							+ pcg.listPlayer.get(1).getHandCard().get(0)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(1).getHandCard().get(0)
									.getCharacter()
							+ " 和 "
							+ pcg.listPlayer.get(1).getHandCard().get(1)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(1).getHandCard().get(1)
									.getCharacter());
		} else if (FindMaxPlayCard.findMaxPlayCard(player1Max, player2Max) == -1) {
			System.out.println("平局!");
			System.out
					.println("玩家的手牌是:"
							+ pcg.listPlayer.get(1).getHandCard().get(0)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(1).getHandCard().get(0)
									.getCharacter()
							+ " 和 "
							+ pcg.listPlayer.get(1).getHandCard().get(1)
									.getColor()
							+ "  "
							+ pcg.listPlayer.get(1).getHandCard().get(1)
									.getCharacter());
		}
	}

}


2 回复 有任何疑惑可以回复我~
#1

漫长玩笑

mark
2015-09-21 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409775    人
  • 解答问题       4546    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

扑克牌有源码吗

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号