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日
最近浏览更多
2890892945 LV2
2023年12月26日
b5438b LV7
2023年12月20日
unprecedented
2023年11月22日
暂无贡献等级
微信网友_6699076084797440 LV7
2023年10月30日
漫步的海星 LV4
2023年8月25日
wangjialiang1 LV17
2023年8月23日
329512801 LV28
2023年8月10日
yangxb2 LV10
2023年7月11日
itlaolang LV5
2023年6月9日
xingxing1234 LV10
2023年3月22日