问答详情
源自:7-1 简易扑克牌游戏

扑克牌有源码吗

扑克牌有源码吗

提问者:Xiao_oNe_oNe 2015-09-17 18:29

个回答

  • 布拉格_雨
    2015-09-18 17:50:10

    自己写的程序,能实现要求,有些啰嗦,欢迎大家指教!!!
    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());
    		}
    	}
    
    }