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

【Java入门第三季】项目实战:简易扑克牌

标签:
Java
// 类:Player
package com.imooc;

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

public class Player {
	//属性
	private String id;
	private String name;
	public List<Card> cardsList;
	//构造器
	public Player(String id,String name) {
		this.id=id;
		this.name=name;
		this.cardsList=new ArrayList<Card>();
	}
	public String getName() {
		return name;
	}
	public List<Card> getCardsList() {
		return cardsList;
	}
	public String getId() {
		return id;
	}

	
}
//类:Card
package com.imooc;

import java.util.Comparator;

public class Card implements Comparator<Card>{
	//属性
	private String color;
	private String point;
	private String cardString;
	//构造器
	public Card(String color,String point) {
		this.color=color;
		this.point=point;
		this.cardString=color+point;
	}
	public Card() {
		
	}
	public String getColor() {
		return color;
	}
	public String getPoint() {
		return point;
	}
	public String getCardString() {
		return cardString;
	}
	@Override
	public int compare(Card o1, Card o2) {
		int pO1=0;
		int pO2=0;
		int cO1=0;
		int cO2=0;
//		System.out.println(o1.point);
//		System.out.println(o2.point);
		String[] stringArray= {"3","4","5","6","7","8","9",
				"10","J","Q","K","A","2"};
		//o1
		for(int i=0;i<stringArray.length;i++) {
			if(stringArray[i].equals(o1.point)) {
				pO1=i;
				break;
			}else {
				continue;
			} 		
		}
		//o2
		for(int i=0;i<stringArray.length;i++) {
			if(stringArray[i].equals(o2.point)) {
				pO2=i;
				break;
			}else {
				continue;
			} 		
		}
		if(pO1>pO2) {
			return 1;
		}else if(pO1<pO2) {
			return -1;
		}else {
//			System.out.println(o1.color);
//			System.out.println(o2.color);
			String[] stringColorArray= {"方片","梅花","红桃","黑桃"};
			//o1
			for(int j=0;j<stringColorArray.length;j++) {
				if(stringColorArray[j].equals(o1.color)) {
					cO1=j;
					break;
				}else {
					continue;
				} 		
			}
			//o2
			for(int j=0;j<stringColorArray.length;j++) {
				if(stringColorArray[j].equals(o2.color)) {
					cO2=j;
					break;
				}else {
					continue;
				} 		
			}
			if(cO1>cO2) {
				return 1;
			}else {
				return -1;
			}
		}
	} 


}
//类:PlayCards,主函数
package com.imooc;

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

public class PlayCards {
	//属性
	public Scanner console;
	public static final String[] points= {"3","4","5","6","7","8","9",
			"10","J","Q","K","A","2"};
	public static final String[] colors= {"方片","梅花","红桃","黑桃"};
	//方法
	public PlayCards() {
		console=new Scanner(System.in);
	}
    /**
     * 创建扑克牌
     * @param args
     */
	public List<Card> constrCards() {
		System.out.println("-------创建扑克牌-------");
		List<Card> cardsFinalList=new ArrayList<Card>();
		for (String color : colors) {
			for (String point : points) {
				cardsFinalList.add(new Card(color,point));
			}
		}
		System.out.println("扑克牌创建成功,共创建"+
		                  cardsFinalList.size()+"张牌,分别为: ");
		String[] cardsFinalStringArrays=castToStringArray(cardsFinalList);
		System.out.println(Arrays.toString(cardsFinalStringArrays));
		return cardsFinalList;
		
	} 
	/**
	 * 将List<Card>转换成String[],每个元素是卡片信息
	 */
	public String[] castToStringArray(List<Card> cardsList) {
		String[] cardsString=new String[cardsList.size()];
		for(int i=0;i<cardsList.size();i++) {
			cardsString[i]=cardsList.get(i).getCardString();
		}
		return cardsString;
	}
	/**
	 * 洗牌:将一组扑克牌序列打乱顺序
	 * @param args
	 */
	public List<Card> cardsMix(List<Card> cardsToMix){
		System.out.println("-------开始洗牌--------");
		Collections.shuffle(cardsToMix);
		System.out.println("------洗牌结束---------");
//		String[] cardsToMixString=castToStringArray(cardsToMix);
//		System.out.println("洗牌之后的扑克牌为: ");
//		System.out.println(Arrays.toString(cardsToMixString));
		return cardsToMix;
	}
	/**
	 * 创建玩家,玩家个数playerNum,每个玩家的牌数cardsNum
	 * @param args
	 */
	public List<Player> constrPlayers(List<Card> cardsAfterMix) {
		System.out.println("------创建玩家-----");
		int playerNum=2;
		int cardsNum=2;
		String id=null;
		String name=null;
		List<Player> playerList=new ArrayList<Player>();
		for(int i=0;i<playerNum;i++) {
		        System.out.println("请输入第"+(i+1)+"位玩家的ID: ");
			id=console.next();
			System.out.println("请输入第"+(i+1)+"位玩家的姓名: ");
			name=console.next();
			playerList.add(new Player(id, name));			
			}
		for(int j=0;j<playerNum;j++) {
			System.out.println("欢迎玩家"+playerList.get(j).getId()+": "+
		                     playerList.get(j).getName());
		}
		//发牌
		System.out.println("------开始发牌-------");
		for(int k=0;k<cardsAfterMix.size();k++) {
			if(playerList.get(k%playerNum).cardsList.size()<cardsNum) {
				playerList.get(k%playerNum).cardsList.add(cardsAfterMix.get(k));
				System.out.println("----玩家"
				+playerList.get(k%playerNum).getName()+"拿牌");
			}else {
				break;
			}
		}
		System.out.println("----发牌结束-----");
//		for (Player player : playerList) {
//			 System.out.println("玩家牌为: ");
//			 System.out.println(Arrays.toString(castToStringArray(player.getCardsList())));
//		}
		return playerList;
	}
	/**
	 * 游戏
	 * @param args
	 */
	public void playStarter(List<Player> playerList) {
		List<Card> cardsListForEachPlayer=new ArrayList<Card>();
		List<Card> maxCardsListForAllPlayers=new ArrayList<Card>();
		for(int i=0;i<playerList.size();i++) {
			cardsListForEachPlayer=playerList.get(i).getCardsList();
			Collections.sort(cardsListForEachPlayer, new Card());
			maxCardsListForAllPlayers.add(cardsListForEachPlayer.
					get(cardsListForEachPlayer.size()-1));
			System.out.println("玩家"+playerList.get(i).getName()+"的最大牌为: "
	                    +cardsListForEachPlayer.
	                    get(cardsListForEachPlayer.size()-1).
	                    getCardString());
		}
		Collections.sort(maxCardsListForAllPlayers, new Card());
		Card maxCard=maxCardsListForAllPlayers.get(playerList.size()-1);
//		// 输出最大牌
//		String maxCardString=maxCardsListForAllPlayers.
//	             get(playerList.size()-1).getCardString();
//		System.out.println("最大牌为:");
//		System.out.println(maxCardString);
		// 判断赢家并输出
		for (int j=0;j<playerList.size();j++) {
			if(playerList.get(j).getCardsList().contains(maxCard)) {
				System.out.println("玩家"+playerList.get(j).getName()+"获胜!");
				break;
			}
		}
	}
	/**
	 * 展示玩家各自的手牌
	 * @param args
	 */
	public void showCardsForEachPlayer(List<Player> playerList) {
		System.out.println("玩家各自的手牌为: ");
		for (int i=0;i<playerList.size();i++) {
			 System.out.println(playerList.get(i).getName()+": "
		               +Arrays.toString(castToStringArray(playerList.get(i).getCardsList())));
		}
	}
	
	public static void main(String[] args) {
		PlayCards pc=new PlayCards();
		//创建扑克牌
		List<Card> cardsInitial=pc.constrCards();
		//洗牌
		List<Card> cardsAfterMix=new ArrayList<Card>();
		cardsAfterMix=pc.cardsMix(cardsInitial);
		//创建玩家并发牌
		List<Player> playerList=pc.constrPlayers(cardsAfterMix);
		//开始游戏
		pc.playStarter(playerList);
		//展示玩家各自的手牌
		pc.showCardsForEachPlayer(playerList);
	}

}


点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消