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

一、Map相关知识总结

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

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

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

 2.常用的接口

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

(1)通过键找值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
        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)通过键值对

1
2
3
4
5
6
7
        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.具体实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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,现在对其中一些知识进一步总结和学习,希望能更好的使用。

posted @   听你笑  阅读(978)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示