1. 程式人生 > >Java小遊戲之鬥地主遊戲例項Map集合

Java小遊戲之鬥地主遊戲例項Map集合

Map的特點是什麼?

1、Map物件是一個雙列的容器

2、兩列分別對應key和value,二者一一對應,是對映關係

3、Map中的資料以鍵值對的形式儲存

4、鍵值是唯一的,不能重複的

HashSet()和HashMap()之間的關係?

HashSet()底層是HashMap(),HashSet()是依賴HashMap()的

HashSet()為什麼要在底層實現HashMap()?

因為二者都是用相同的雜湊演算法,只需要寫一個,體現了面向物件的封裝思想

Map中的去重和排序操作都是針對誰的?

HashMap()去重和TreeMap()排序操作都是針對鍵值的

HashMap和HashTable()之間有什麼區別?

1、HashMap是對HashTable的優化

2、HashMap是執行緒不安全的,HashTable是執行緒安全的

3、HashMap是JDK1.2出現的,HashTable是JDK1.0出現的

4、HashMap中的key和value是可以為null的,但是HashTable中不可以出現null

Map中的方法要注意什麼?

1、首先Map介面的新增方法是put()

2、put()方法的返回值是被覆蓋的那個值

3、remove方法的返回值是被刪除的那個值

4、有一些特殊的方法

  1. keySet(),返回的是鍵值為元素的集合
  2. entrySet(),返回的是以鍵值對為元素的集合
  3. containsKey(),判斷是否包含某個鍵值
  4. containsValue(),判斷是否包含某個鍵值對應值
  5. get(key),獲取鍵值對應值

Map中遍歷的三種方法

1、利用keysSet()方法,獲取集合,然後使用foreach遍歷

2、利用keySet()方法獲取集合,然後使用迭代器遍歷

3、利用entrySet(),獲取鍵值對的集合,然後使用foreach遍歷,其中使用getKey()和getValue()方法

1、使用foreach程式碼示例

	public static void fun2() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		Set<String> hashSet  =  map.keySet();
		for (String string : hashSet) {
			System.out.println(string+":"+map.get(string));
		}
	}

2.、使用迭代器遍歷程式碼示例
	public static void fun1() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		Set<String> hashSet  =  map.keySet();
		Iterator<String> iterator = hashSet.iterator();
		//為了拿到所有的key去遍歷Set集合
		while (iterator.hasNext()) {
			String a1 = iterator.next();
			//通過找出的key,得到每一個鍵對應值
			System.out.println(map.get(a1));
		}
	}
3、使用entrySet方法程式碼示例
	public static void fun4() {
		Map<String, Integer> map = new HashMap<>();
		map.put("wangning", 18);
		map.put("ning", 18);
		map.put("wang", 18);
		map.put("wn", 18);
		//獲取所有的entry物件的set集合
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			System.out.println(entry.getKey()+"="+entry.getValue());
		}
	}

Map介面之間的巢狀

分析:最後使用了entrySet()的方法,直接使用getValue()的方法輸出

程式碼示例:

		//初始化兩個容器,儲存學生資訊
		HashMap<String, Integer> hashMap2 = new HashMap<>();
		hashMap2.put("wangning",18);
		hashMap2.put("wang",19);
		HashMap<String, Integer> hashMap3 = new HashMap<>();
		hashMap3.put("wn", 20);
		hashMap3.put("ning",21);
		//第三個容器儲存前面兩個容器的資訊
		HashMap<String,HashMap<String,Integer>> hashMap = new HashMap();
		hashMap.put("一班", hashMap2);
		hashMap.put("二班",hashMap3);
		//使用EntrySet的方式getvalue的方式直接輸出內部的hashMap
		for(Entry<String, HashMap<String, Integer>> entry : hashMap.entrySet()) {
			System.out.println(entry.getKey()+entry.getValue());
		}
	}

鬥地主的發牌遊戲的例項

分析:

1、需要有一個map型別容器,key值存放Integer,value存放撲克牌,已經兩個字串陣列

2、給map容器中傳入所有的撲克牌,並且將key值在迴圈中一次傳給一個數組

3、將存放key值得陣列打亂順序,之後分別定義四個treeSet,前三個用於存放玩家的撲克牌,最後一個存放底牌

4、最後按照順序將撲克牌打印出來

思考:之所用treeSet集合來接收key值,是因為key值對應撲克牌,並且撲克牌是按照遞增的順序傳入map的,使用treeset集合將key排序後,就會得到按照順序排列的撲克牌,即便撲克牌卡頭數字相同,但是key值不同,所以還是會緊靠著被輸出

程式碼示例:

public class Demo04鬥地主例項 {
	public static void main(String[] args) {  
        HashMap<Integer, String> hashmap = new HashMap<Integer,String>();  
        ArrayList<Integer> indexs = new ArrayList<Integer>();  
        //建立兩個字串陣列,用於形成牌
        String[] colors={"梅花","紅桃","黑桃","方塊"};  
        String[] numbers={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};  
        int index = 0;  
        //給Map中放牌
        for (int i = 0; i < numbers.length; i++) {
			for (int j = 0; j < colors.length; j++) {
				hashmap.put(index, (colors[j]+numbers[i]));
				indexs.add(index);	
				index++;
			}
		}
        indexs.add(index);  
        hashmap.put(index, "小王");  
        index++;  
        indexs.add(index);  
        hashmap.put(index, "大王");  
        Collections.shuffle(indexs);  
        TreeSet<Integer> treeset1 = new TreeSet<Integer>();  
        TreeSet<Integer> treeset2 = new TreeSet<Integer>();  
        TreeSet<Integer> treeset3 = new TreeSet<Integer>();  
        TreeSet<Integer> dipai = new TreeSet<Integer>();  
        for (int i = 0; i < indexs.size(); i++) {
        		if (i>=indexs.size()-3) {
				dipai.add(indexs.get(i))	;
			}else if(i%3==0){  
                treeset1.add(indexs.get(i));  
            }else   if(i%3==1){  
                treeset2.add(indexs.get(i));  
            }else   if(i%3==2){  
                treeset3.add(indexs.get(i));  
            }  
        }    
        System.out.println("遊戲開始!");  
        kanpai("玩家1",treeset1,hashmap);  
        kanpai("玩家2",treeset2,hashmap);  
        kanpai("玩家3",treeset3,hashmap);  
        kanpai("底牌",dipai,hashmap);  
    }
	private static void kanpai(String string, TreeSet<Integer> treeset, HashMap<Integer, String> hashmap) {
		// TODO Auto-generated method stub
		System.out.print(string+":");
		for (Integer integer : treeset) {
			System.out.print(hashmap.get(integer)+" ");
		}
		System.out.println();
	} 
	


相關推薦

Java遊戲地主遊戲例項Map集合

Map的特點是什麼? 1、Map物件是一個雙列的容器 2、兩列分別對應key和value,二者一一對應,是對映關係 3、Map中的資料以鍵值對的形式儲存 4、鍵值是唯一的,不能重複的 HashSet()和HashMap()之間的關係? HashSet()底層是HashMap

基於Java----地主遊戲的開發

ger array list TreeSet集合 new integer else list集合 存儲 //這是無序的手牌 用到ArrayList集合(無排序功能) public class PokerDemo { public static void main(Stri

JAVA寫的socket區域網地主遊戲

前兩天沒專案做,就想著寫點什麼。 就寫了這個小遊戲沒事跟同事玩玩。 5塊錢一把,不帶開掛的。 先來幾張效果圖 廢話不多,開篇紀念。 部分原始碼 連線伺服器類 public class Connect { public

qq地主遊戲其實和web服務器性質一樣

時間 有時 內容 遊戲服 解析 協議 好的 服務器 。。   其實qq鬥地主遊戲就是類似一個實現http協議的web服務器和瀏覽器的集合體!我們之所以能在瀏覽器輸入網址然後得到我們想要的內容,這是因為我們按http協議的格式對web服務器發送請求信息,然後web服務器根據

Java中利用集合框架模擬地主程式例項

package doudizhuDemo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; /* 模擬鬥地主 *

地主遊戲排行榜功能快速開發教程

目錄 排行榜實現 接入描述 排行榜介面 host 和 path 建立排行榜 上報排行榜 client 獲取排行榜列表 獲取玩家當前分數 排行榜接入總結 一般來說,一款比較流行的鬥地主遊戲主要功能如下: 實現了最經典的鬥地主玩法,叫地主搶地主等功能。 支援隨機匹配模式,主動建立房間邀請微信好友模式兩種。

遊戲.初期地主,寫牌,洗牌,發牌,看牌

package fight; import java.util.*; public class FightTheLandlord { public static void main(String[] args) { Map<Integer, String> m

Egret 開發地主遊戲全程講解

Egret 是一套完整的 HTML5 遊戲開發解決方案,使用 Egret 引擎開發的 HTML5 遊戲可以直接打包成 iOS App、Android App、微信小程式等。 本場 Chat,我們將從 0 開始,幫助讀者入門 Egret,以及向有基礎的 Egret 開發者講解完整的鬥地主遊戲的開發,

TypeScript開發的地主遊戲核心邏輯

原始碼地址:https://github.com/tianlanlandelan/poker/tree/master/src/utils,喜歡請點星,謝謝大家。 牌面說明 54張牌,2~10、A、J、Q、K各4張(紅桃、方塊、黑桃、梅花),小王、大王各1張

我的GitChat:Egret開發地主遊戲全程講解

連結如下:https://gitbook.cn/gitchat/activity/5c0484e3e79b46227b76d7ad Egret是一套完整的HTML5遊戲開發解決方案,使用Egret引擎開發的HTML5遊戲可以直接打包成iOS APP、Android APP、微信小程式等。

java程式——簡單井字遊戲雙人版

import java.util.Scanner; public class Tic_Tac_Toe { public static void main(String[] args) { int[][] game = new int [3

Python程式猜單詞遊戲

計算機隨機產生一個單詞,打亂字母順序,供玩家去猜。(可供猜的單詞自己定義) import random WORDS = ("math","english","china","history") right = 'Y' print("歡迎參加猜單詞遊戲!") while right=='Y' o

java基礎作業猜數字遊戲

 類的成員變數 猜數字遊戲一個類A有一個成員變數v有一個初值100。  定義一個類對A類的成員變數v進行猜。如果大了則提示大了小了則提示小了。等於則提示猜測成功。        packag

棋牌地主遊戲排行榜功能快速開發教程

一般來說,一款比較流行的鬥地主遊戲主要功能如下: 實現了最經典的鬥地主玩法,叫地主搶地主等功能。支援隨機匹配模式,主動建立房間邀請微信好友模式兩種。 這款《鬥地主》遊戲分為客戶端和服務端兩個部分,client 是使用 Egret 實現的,server 是使用 mat

棋牌遊戲地主)最新上傳appstore 經驗貼

一直以為,所有遊戲都必須有版號才能上線appstore,然後就一直花錢用的別家代理的企業證書,代理企業證書,三天兩頭被封,然後推廣的使用者反覆的流失,實在沒辦法,再回頭研究怎麼把沒有版號的遊戲上線appstore。然後一定要在資訊首頁新增這些產品。    完事打包上傳,報錯:

小菜Cocos2d-x遊戲開發旅程——Lua打包apk

Lua打包apk 這裡使用Cocos code ide 進行打包 , 後面會將在eclipse上的打包 第一步:環境配置。配置android-sdk,ant,ndk的路徑。 第二步:選中你的工程檔案,右鍵->Cocos工具->新增原生代碼支

地主例項學會使用java Collections工具類

[toc] #### 一、背景 最近在學習資料結構和演算法的過程中頻繁用到了Collections工具類,這是開發中的一把利器,簡化了許多涉及集合的編碼,該文將通過例項對此工具類進入深入剖析。 #### 二、概念 ##### 1、定義 > **java.util.Collections** > 是

棋牌平臺架設教程地主核心算法

棋牌 源碼 首先,要弄清楚鬥地主的牌型有哪些。可以參考QQ遊戲給出的介紹,如下: 火箭:即雙王(大王和小王),最大的牌。 炸彈:四張同數值牌(如四個 7 )。 單牌:單個牌(如紅桃 5 )。 對牌:數值相同的兩張牌(如梅花 4+ 方塊 4 )。

棋牌平臺開發教程地主常用算法

源碼 最大的 http 大王 等待時間 細節 第一個 參考 更多 首先,要弄清楚鬥地主的牌型有哪些。可以參考QQ遊戲給出的介紹,如下: 火箭:即雙王(大王和小王),最大的牌。 炸彈:四張同數值牌(如四個 7 )。 單牌:單個

Java實驗數據轉換

n) ann + - close pri oid image int() 數據 看到有人問如圖的程序,就去寫了幾行代碼,順便復習一下條件語句和ASCII碼 1 import java.util.Scanner; 2 public class test1