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

大家看看我的,有没有写的累赘

package day42.TestDrive;import java.util.*;public class PlayingCard {	public static void main(String[] args){		//创建一副新扑克牌		System.out.println("-------开始创建扑克牌!---------------");		Poker poker = new Poker();		List<Poker> p = poker.CreatAPoker();		System.out.println("-------创建扑克牌成功!---------------");		System.out.println("------------开始洗牌------------");		Collections.shuffle(p);//洗牌		System.out.println("------------洗牌结束!-----------------");		System.out.println("------------创建玩家-------------------");		Player player = new Player();		List<Player> players = player.creatPlayer();		//开始发牌		PlayingCard pc = new PlayingCard();		pc.deal(players, p);	}		//发牌给玩家	public void deal(List<Player> pl, List<Poker> po) {		System.out.println("开始发牌");		List<Integer> numList = new ArrayList<Integer>(); 		List<Poker> pokerList = new ArrayList<Poker>();		List<String> aStr = new ArrayList<String>();//a玩家拿的牌		List<String> bStr = new ArrayList<String>();//b玩家拿的牌		List<Integer> aNum = new ArrayList<Integer>();//a玩家拿的牌转为点数大小		List<Integer> bNum = new ArrayList<Integer>();//b玩家拿的牌转为点数大小		//轮流各自发两张牌		Random random = new Random();		for(int i = 0; i < pl.size() * 2; i++) {			int num = random.nextInt(po.size());			do {				pokerList.add(po.get(num));			}while(pokerList.size() != new HashSet<Poker>(pokerList).size());		}		//牌的牌名List		for(int i = 0; i < pokerList.size(); i++) {			if(i % 2 == 0) {				System.out.println("【 "+pl.get(0).getPlayerName()+"拿一张! 】");				aStr.add(pokerList.get(i).suit + pokerList.get(i).point);			}else {				System.out.println("【 "+pl.get(1).getPlayerName()+"拿一张! 】");				bStr.add(pokerList.get(i).suit + pokerList.get(i).point);			}		}				//打印出玩家各自手中的牌		System.out.println("***>>> "+pl.get(0).getPlayerName()+" 的牌是"+aStr);		System.out.println("***>>> "+pl.get(1).getPlayerName()+" 的牌是"+bStr);		Poker poker = new Poker();		for(int i = 0; i < pokerList.size(); i++) {			int num = poker.numTransformation(pokerList.get(i));			poker.pokerNum.add(num);		}		//将玩家手里的牌列出最大值		Collections.sort(poker.pokerNum);		int maxPokerNum = poker.pokerNum.get(poker.pokerNum.size()-1);		//牌的点数List		for(int i = 0; i < pokerList.size(); i++) {			if(i % 2 == 0) {				aNum.add(poker.numTransformation(pokerList.get(i)));			}else {				bNum.add(poker.numTransformation(pokerList.get(i)));			}		}		//判断两个人谁手里的牌最大		if(aNum.contains(maxPokerNum)) {			System.out.println("***>>> "+pl.get(0).getPlayerName()+" 赢了!"+" <<<***");		}else if(aNum.contains(maxPokerNum)) {			System.out.println("***>>> "+pl.get(1).getPlayerName()+" 赢了!"+" <<<***");		}	}}//创建玩家类class Player{	private String playerName;//玩家名字	private int playerId;//玩家ID	public List<String> hand = new ArrayList<String>();//手牌:扑克牌的集合		public Player() {			}	//Player的含参构造方法	public Player(String playerName, int playerId) {		this.playerName = playerName;		this.playerId = playerId;	}	public String getPlayerName() {		return playerName;	}	public void setPlayerName(String playerName) {		this.playerName = playerName;	}	public int getPlayerId() {		return playerId;	}	public void setPlayerId(int playerId) {		this.playerId = playerId;	}	@Override	public String toString() {		return "Player [playerName=" + playerName + ", playerId=" + playerId + "]";	}		//创建玩家名片	public List<Player> creatPlayer() {		//创建两名玩家		Player player1 = new Player();		Player player2 = new Player();		List<Player> playerList = new ArrayList<Player>();		Player[] players = {player1, player2};		Scanner input = new Scanner(System.in);		int i = 1;		for(Player pl:players ) {			System.out.println("请输入第"+i+"位玩家的姓名:>>>");			pl.setPlayerName(input.next());			for(int j = 0; j < 3; j++) {				try{					System.out.println("请输入第"+i+"位玩家的ID:>>>");					pl.setPlayerId(input.nextInt());					break;				}catch(Exception ex) {					input = new Scanner(System.in);//阻止无限循环					System.out.println("请输入整数ID!");				}			}			i++;			playerList.add(pl);		}		for(Player pl1:players) {			System.out.println("------欢迎玩家:"+pl1.getPlayerName());		}		return playerList;	}}//创建扑克类class Poker{	public String suit;	public String point;	public String[] suitArray = {"方块", "梅花", "红桃", "黑桃"};//花色	public String[] pointArray = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};//点数	public List<String> p = new ArrayList<String>();//打印扑克	public List<Poker> poker = new ArrayList<Poker>();//一副扑克	public List<Integer> pokerNum = new ArrayList<Integer>();//每张牌对象的集合	//Poker的构造方法	public Poker() {	}	public Poker(String suit, String point) {		this.suit = suit;		this.point = point;	}	//创建一副扑克	public List<Poker> CreatAPoker() {				for(int j = 0; j < pointArray.length; j++) {			for(int i = 0; i < suitArray.length; i++) {				Poker pn = new Poker(suitArray[i], pointArray[j]);				poker.add(pn);			}		}		for(int i = 0; i < poker.size(); i++) {//String型的是通过Poker来的			String sb = poker.get(i).suit+poker.get(i).point;			p.add(sb);		}		for(int i = 0; i < poker.size(); i++) {//Integer型的也是通过Poker来的			pokerNum.add(numTransformation(poker.get(i)));		}		//打印出一副新建的扑克牌		System.out.println(p);//poker是String类型所以可以打印出来?		return poker;	}	//点数转换数字比大小	public int numTransformation(Poker c) {		//花权值		int ps = 0;		if(c.suit == "方块") {			ps = 1;		}else if(c.suit == "梅花"){			ps = 2;		}else if(c.suit == "红桃") {			ps = 3;		}else if(c.suit == "黑桃") {			ps = 4;		}		//牌权值		int pp = 0;		if(c.point == "J") {			pp = 11;		}else if(c.point == "Q") {			pp = 12;		}else if(c.point == "K") {			pp = 13;		}else if(c.point == "A") {			pp = 12;		}else if(c.point == "2") {			pp = 13;		}else {			pp = Integer.parseInt(c.point);//数字型字符串转换成数字		}		return pp * 10 + ps;	}}


提问者:weixin_慕仙1144841 2019-09-10 15:57

个回答

  • qq_慕设计4252141
    2019-11-07 21:39:59

    花里胡哨   看不懂啊