首页>代码>Java Swing开发扑克牌游戏>/ClassDesign/src/ClDesign/Initail.java
package ClDesign;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

import javax.swing.JFrame;


public class Initail {
	
	 Map<String, StudentPlayer> infor= new HashMap<String, StudentPlayer>();	//用来承装学生类型对象
	 List<Poker> poker = new ArrayList<Poker>();  //List集合,用来承装洗牌前的扑克牌
	 List<Poker>poker3 = new ArrayList<Poker>();  //用来承装洗牌后的扑克牌
	 List<Poker>st1 = new ArrayList<Poker>();  //用来承装选手1拿的扑克牌
	 List<Poker>st2 = new ArrayList<Poker>();  //用来承装选手2拿的扑克牌
	 StudentPlayer st = infor.get(null);  //选手对象空ID
	/**
	 * 增加扑克牌
	 * @param color
	 * @param name
	 */
	public void pokerAdd(String[] color,String[] name){	
		for(int i=0;i<color.length;i++){
			for(int j=0;j<name.length;j++){
				Poker p = new Poker(color[i],name[j]);
				poker.add(p);
			}
		}
		System.out.println("共有"+poker.size()+"张牌");
		/**
		 * 通过迭代器访问list中的元素
		 */
		int j=0; //控制换行输出
		Iterator<Poker> it = poker.iterator();
		System.out.println("有如下扑克牌(通过迭代器访问):");
		while(it.hasNext()) {
			j++;
			Poker cr = it.next();
			System.out.print( cr.getColor()  +","+ cr.getBrandName());
			if(j%13==0){  //每13个牌就换行
				System.out.println();
			}
		}
	
	}
	/**
	 * 选手信息
	 */
	public void PlayerInformation(){
		int i=0;
		Scanner sca = new Scanner(System.in);
		while(i<2){  //两名选手
		System.out.println("请选手"+(i+1)+"输入相关信息:");
		System.out.println("选手"+(i+1)+"的ID:");
		String ID=sca.next();
		st = infor.get(ID);
		if(st==null){
		System.out.println("选手"+(i+1)+"的名字:");
		String Pname = sca.next();
		//创建新的选手对象
		StudentPlayer st1 = new StudentPlayer(ID,Pname);
		infor.put(ID, st1);
		System.out.println("成功添加选手:" + infor.get(ID).getName());
		i++;
		}else{
			System.out.println("该选手ID被占用!请重新输入");
			continue;
		}
	}
}
	/**
	 * Map的keySet方法输出Map信息
	 */
	public void KeySetPrint() {
		// 通过keySet方法,返回Map中的所有“键”的Set集合
		Set<String> keySet = infor.keySet();
		// 取得students的容量
		System.out.println("总共有:" + infor.size() + "个选手!");
		// 遍历keySet,取得每一个键,再调用get方法取得每个键对应的value
		for (String stuId : keySet) {
			StudentPlayer st = infor.get(stuId);
			if (st != null)
				System.out.println(st.getID()+"号选手:" + st.getName());
		}
	}
	/**
	 * 洗牌
	 * @param args
	 */
	public void randomSort(String[] color,String[] name){
		 Set<Poker>poker2 = new HashSet<Poker>();
		for(int i=(int)Math.random()*4;i<color.length;i++){
			for(int j=(int)Math.random()*12;j<name.length;j++){
				Poker p = new Poker(color[i],name[j]);
				poker2.add(p);	
			}
		}
		int k=0;  //控制换行
		poker3.addAll(poker2);
		Iterator<Poker> it2 = poker3.iterator();
		System.out.println("**********洗牌后的扑克牌(通过迭代器访问)**********");
		while(it2.hasNext()) {
			k++;	
			Poker cr2 = it2.next();
			System.out.print( cr2.getColor()  + cr2.getBrandName());
			//控制换行	
			if(k%13==0){  //每13个就换行
				System.out.println();
			}
		}
	}
		/**
	 * 发牌
	 * @param args
	 */
		public void sendPoker(){
		System.out.println("**********现在开始发牌**********");
		int i=0;	  //i为学生扑克牌集合的下标
		/**
		 * 外层循环控制发牌次数,内层for each循环控制选手轮流拿牌
		 */
		Set<String> keySet = infor.keySet();	
		for(int j=0;j<2;j++){	
		for (String stuId : keySet) {
			StudentPlayer st = infor.get(stuId);
			st.stu1Poker.addAll(poker3); 
			st.stu2Poker.addAll(poker3);
			if(i%2==0){
				System.out.print(st.getID()+"号选手"+st.getName()+"拿牌,拿的牌为:");	
				System.out.println(st.stu1Poker.get(i));
				st1.add(st.stu1Poker.get(i));
				i++;			
			}else if(i%2!=0){
				System.out.print(st.getID()+"号选手"+st.getName()+"拿牌,拿的牌为:");
				System.out.println(st.stu2Poker.get(i));
				st2.add(st.stu2Poker.get(i));
				i++;		
			}	
		}
	}

}
	
	/**
	 * 游戏比大小
	 */
	public void Compare(){  //比较思路,先比较数值2最小,A最大,后比较花色。花色由大到小:黑桃>红桃>梅花>方块
			int j=0;
			Set<String> keySet = infor.keySet();	
			for (String stuId : keySet) {
				StudentPlayer st = infor.get(stuId);
				if(j%2==0){   //选手1扑克牌比较出最大手牌
					System.out.println(st.getID()+"号选手"+st.getName()+"拿的牌:"+st1.toString());
					if( (st1.get(j).getBrandName().toString().compareTo(st1.get(j+1).getBrandName().toString()) )>0 && st1.get(j+1).getBrandName().equals("A")==false && j+1<st1.size()){
						st1.add(j,st1.get(j));
						System.out.println(st.getID()+"号选手最大的手牌: "+st1.get(j));
						j++;
					}
					if((st1.get(j).getBrandName().toString().compareTo(st1.get(j+1).getBrandName().toString()) )<0 && st1.get(j).getBrandName().equals("A")==false && j+1<st1.size()){
						st1.add(j, st1.get(j+1));
						System.out.println(st.getID()+"号选手最大的手牌: "+st1.get(j));
						j++;
					}
					if((st1.get(j).getBrandName().toString().compareTo(st1.get(j+1).getBrandName().toString()) )==0 && j+1<st1.size()){
						if(st1.get(j).getColor()=="黑桃" ||(st1.get(j).getColor()=="红桃" && st1.get(j+1).getColor()=="方块")||
								(st1.get(j).getColor()=="红桃" && st1.get(j+1).getColor()=="梅花")||(st1.get(j).getColor()=="梅花" && st1.get(j+1).getColor()=="方块") ){
							st1.add(j, st1.get(j));
							System.out.println(st.getID()+"号选手最大的手牌: "+st1.get(j));
							j++;
						}
					}
				}else if(j%2!=0){  //选手2扑克牌集合比较出最大的手牌
					System.out.println(st.getID()+"号选手"+st.getName()+"拿的牌"+st2.toString());
					j=0;
					if((st2.get(j).getBrandName().toString().compareTo(st2.get(j+1).getBrandName().toString()) )>0 && st2.get(j+1).getBrandName().toString().equals("A")==false && j+1<st2.size()){
						st2.add(j, st2.get(j));
						System.out.println(st.getID()+"号选手最大的手牌: "+st2.get(j));
						j++;
					}
					if((st2.get(j).getBrandName().toString().compareTo(st2.get(j+1).getBrandName().toString()) )<0 && st2.get(j).getBrandName().toString().equals("A")==false && j+1<st2.size()){
						st2.add(j, st2.get(j+1));
						System.out.println(st.getID()+"号选手最大的手牌: "+st2.get(j));
						j++;
					}
					if((st2.get(j).getBrandName().toString().compareTo(st2.get(j+1).getBrandName().toString()) )==0 && j+1<st1.size()){
						if(st2.get(j).getColor()=="黑桃" ||(st2.get(j).getColor()=="红桃" && st2.get(j+1).getColor()=="方块")||
								(st2.get(j).getColor()=="红桃" && st2.get(j+1).getColor()=="梅花")||(st2.get(j).getColor()=="梅花" && st2.get(j+1).getColor()=="方块") ){
							st2.add(j, st2.get(j));
							System.out.println(st.getID()+"号选手最大的手牌: "+st2.get(j));
							j++;
						}
					}
				}
		System.out.println();	
			}
			
			int g=0;
			for (String stuId : keySet) {	
				st = infor.get(stuId);
				if(g%2==0 && g<2){
					if((st1.get(g).getBrandName().toString().compareTo(st2.get(g).getBrandName().toString()) )>0 &&st2.get(g).getBrandName().toString().equals("A")==false && g<g+1){
						System.out.println("选手"+st.getName()+"的"+st1.get(g)+"最大,恭喜选手"+st.getName()+"获胜");
				}
				}else if(g%2!=0 && g<2){
					if((st1.get(g-1).getBrandName().toString().compareTo(st2.get(g).getBrandName().toString()) )<0 &&st1.get(g).getBrandName().toString().equals("A")==false && g<g+1){
					System.out.println("选手"+st.getName()+"的"+st2.get(g-1)+"最大,恭喜选手"+st.getName()+"获胜");
					}
				}
				g++;
			}
//		}
	}	
		
	public static void main(String[] args) {
		/**
		 * 初始化扑克牌数据
		 */
		String[] color = {"黑桃","红桃","梅花","方块"};
		String[] name = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
		Initail initail= new Initail();  //实例化对象
		System.out.println("********************扑克牌游戏*********************");   
		initail.pokerAdd(color, name);  //调用方法 ,初始化扑克
		initail.PlayerInformation();   //选手信息
        initail.KeySetPrint();   //输出选手信息
		System.out.println("**********请输入1开始洗牌**********");
		Scanner sca = new Scanner(System.in);
		int j = sca.nextInt();
		if(j==1){
			initail.randomSort(color, name); //洗牌
		}
		initail.sendPoker(); //发牌
		initail.Compare();  //比较
	}
}
最近下载更多
微信网友_6233325343920128  LV1 2022年11月30日
huevnn  LV5 2022年6月15日
Czhiyi  LV6 2022年3月29日
一头土猪  LV7 2021年12月22日
Demo1111  LV30 2021年12月9日
quiyian  LV4 2021年6月8日
234123141  LV7 2021年5月10日
bg12123  LV1 2021年3月25日
2458165357  LV1 2021年2月19日
qq454952101  LV4 2021年2月5日
最近浏览更多
lyryyyy 10月22日
暂无贡献等级
lhm789  LV6 9月11日
feelinfer  LV1 6月27日
qqqww11  LV2 6月26日
azzzz1  LV2 6月26日
ffffwwrgch  LV1 4月28日
gzcznb  LV8 4月1日
王少波  LV5 4月1日
2890892945  LV2 2023年12月26日
b5438b  LV7 2023年12月20日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友