• java--Map使用实现模拟斗地主洗牌发牌


    一、Map相关知识总结

    1:Map集合,元素是成对出现的<key,value>,包括HashMap集合、LinkedHashMap集合。

    HashMap<K,V>:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。

    LinkedHashMap<K,V>HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构。

     2.常用的接口

    3. Map集合遍历键找值方式

    (1)通过键找值

                    Map<String,String> map=new HashMap<String,String>();
    		
    		map.put("星期一", "Monday");
    		map.put("星期日", "Sunday");
    		map.put("星期二", "Tuesday");
    		
    		Set<String> keySet=map.keySet();
    		
    		Iterator<String> it=keySet.iterator();
    		while(it.hasNext()){
    			String key=it.next();
    			String value=map.get(key);
    			System.out.println(value);
    		}
    

    (2)通过键值对

                    Set<Map.Entry<String,String>> entrySet = map.entrySet();
    		Iterator<Map.Entry<String,String>> it=entrySet.iterator();
    		while(it.hasNext()){
    			Map.Entry<String,String> key=it.next();
    			String value=key.getValue();
    			System.out.println(value);
    		}

     二、模拟斗地主洗牌发牌

    1、分析:首先应准备牌:完成数字与纸牌的映射关系:使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系。

                   洗牌:通过数字完成洗牌发牌

                   发牌:将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。存放的过程中要求数字大小与斗地主规则的大小对应。将代表不同纸牌的数字分配给不同的玩家与底牌。

                  看牌:通过Map集合找到对应字符展示。通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。

    2.具体实现代码:

    package com.example;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    
    public class Poker {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
            /*
             * 准备花色,准备数字,map<牌的编号(共54张),牌(花色+数字)>
             * */
    		//1.花色
    		ArrayList<String>color = new ArrayList<String>();
    		color.add("♠");
    		color.add("♥");
    		color.add("♦");
    		color.add("♣");
            
    		//数字
    		ArrayList<String>number = new ArrayList<String>();
    		Collections.addAll(number,"3","4","5","6","7","8","9","10","J","Q","K","A","2");
    
    		//定义一个map集合:用来将数字与每一张牌进行对应
    		HashMap<Integer, String>map = new HashMap<Integer, String>();
    		int index=0;
    		for (String thisNumber : number) {
    			for (String thisColor : color) {
    				map.put(index++, thisColor+thisNumber);
    			}
    		}
    		//加入大小王
    		map.put(index++, "小王");
    		map.put(index++, "大王");
    
                    ArrayList<Integer>cards = new ArrayList<Integer>();
    		
    		for (int i = 0; i<= 53; i++) {
    			cards.add(i);
    		}
    		//洗牌
    		Collections.shuffle(cards);
    
    		//创建三个玩家和底牌
    		ArrayList<Integer>iPlayer1 = new ArrayList<Integer>();
    		ArrayList<Integer>iPlayer2 = new ArrayList<Integer>();
    		ArrayList<Integer>iPlayer3 = new ArrayList<Integer>();
    		ArrayList<Integer>itCards = new ArrayList<Integer>();
    
    		//发牌
    		for(int i=0;i<cards.size();i++){
    			if(i>=51){
    				itCards.add(cards.get(i));
    			}else{
    				if(i%3==0){
    					iPlayer1.add(cards.get(i));
    				}
    				else if(i%3==1){
    					iPlayer2.add(cards.get(i));
    				}
    				else{
    					iPlayer3.add(cards.get(i));
    				}
    			}
    		}
    		
    		//对每人手中的牌排序
    		Collections.sort(iPlayer1);
    		Collections.sort(iPlayer2);
    		Collections.sort(iPlayer3);
    		Collections.sort(itCards);
    		
    		//
    		ArrayList<String>sPlayer1 = new ArrayList<String>();
    		ArrayList<String>sPlayer2 = new ArrayList<String>();
    		ArrayList<String>sPlayer3 = new ArrayList<String>();
    		ArrayList<String>sCards = new ArrayList<String>();
    		
    		for(Integer key : iPlayer1){
    			sPlayer1.add(map.get(key));
    		}
    		for(Integer key : iPlayer2){
    			sPlayer2.add(map.get(key));
    		}
    		for(Integer key : iPlayer3){
    			sPlayer3.add(map.get(key));
    		}
    		for(Integer key : itCards){
    			sCards.add(map.get(key));
    		}
    
    		System.out.println("第一位:"+sPlayer1);
    		System.out.println("第二位:"+sPlayer2);
    		System.out.println("第三位:"+sPlayer3);
    		System.out.println("底牌:"+sCards);
    
    		
    		
    	}
    
    }
    

    原来学过java,现在对其中一些知识进一步总结和学习,希望能更好的使用。

  • 相关阅读:
    JavaScript事件的几个细节
    CSS选择器从右向左的匹配规则
    JavaScript原型与继承
    CSS3制作ajax loader icon
    jQuery之.on()方法
    Special Resource Operator (SRO)
    openness configure dns server
    add dns items for coredns
    深入理解linux nat
    tcpdump for container
  • 原文地址:https://www.cnblogs.com/java-test/p/10374509.html
Copyright © 2020-2023  润新知