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、有一些特殊的方法
- keySet(),返回的是鍵值為元素的集合
- entrySet(),返回的是以鍵值對為元素的集合
- containsKey(),判斷是否包含某個鍵值
- containsValue(),判斷是否包含某個鍵值對應值
- 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