Die Stammschnittstelle in der Sammlungshierarchie. Eine Sammlung stellt eine Menge von Objekten dar, die auch als Elemente der Sammlung bezeichnet werden. Einige Sammlungen erlauben doppelte Elemente, andere nicht. Einige Sammlungen sind geordnet, andere ungeordnet. Das JDK bietet keine direkte Implementierung dieser Schnittstelle: Es bietet Implementierungen spezifischerer Unterschnittstellen wie Set und List. Diese Schnittstelle wird normalerweise verwendet, um Sammlungen zu übergeben und mit ihnen zu arbeiten, wenn maximale Allgemeingültigkeit erforderlich ist.
Hauptinhalt: Die Sammlung wird hier verwendet, um das Pokerspiel zu simulieren, das von den Großen in Hongkong-Filmen gespielt wird.
1. Spielregeln: Zwei Spieler erhalten jeweils zwei Karten und werden verglichen. Vergleichen Sie die höchste Anzahl an Karten in der Hand jedes Spielers, die Größe ist A-2, der Spieler mit der höheren Punktzahl gewinnt. Wenn die Punkte gleich sind, werden die Farben verglichen und die Farben sind Schwarz (4), Rot (3), Pflaume (2), Quadrat (1), und derjenige mit der größeren Farbe gewinnt.
2. Umsetzungsschritte:
Erstellen Sie ein Kartenspiel A-2 mit den vier Farben Schwarz (4), Rot (3), Pflaume (2) und Quadrat (1). , insgesamt 52 Spielkarten;
Erstellen Sie zwei Spieler einschließlich Spieler-IDs, Namen und Karteninformationen;
Mischen Sie die Karten und teilen Sie jedem der beiden Spieler zwei Karten aus in den Händen der Spieler, um den Gewinner zu ermitteln;
package collectiontest.games; public class Card { private Integer id; //牌的大小 private Integer type;//牌的花色 public Card(Integer id, Integer type) { this.id = id; this.type = type; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getType() { return type; } public void setType(Integer type) { this.type = type; } @Override public String toString() { return "Card [id=" + id + ", type=" + type + "]"; } }
package collectiontest.games; public class Poker { private Card id2 ; private Card id3 ; private Card id4 ; private Card id5 ; private Card id6 ; private Card id7 ; private Card id8 ; private Card id9 ; private Card id10 ; private Card J ; private Card Q ; private Card K ; private Card A ; public Poker() { } //四个类型:黑--4、红--3、梅--2、方--1 public Poker(Integer type) { this.id2 = new Card(2, type); this.id3 = new Card(3, type); this.id4 = new Card(4, type); this.id5 = new Card(5, type); this.id6 = new Card(6, type); this.id7 = new Card(7, type); this.id8 = new Card(8, type); this.id9 = new Card(9, type); this.id10 = new Card(10, type); this.J = new Card(11, type); this.Q = new Card(12, type); this.K = new Card(13, type); this.A = new Card(14, type); } public Card getId2() { return id2; } public void setId2(Card id2) { this.id2 = id2; } public Card getId3() { return id3; } public void setId3(Card id3) { this.id3 = id3; } public Card getId4() { return id4; } public void setId4(Card id4) { this.id4 = id4; } public Card getId5() { return id5; } public void setId5(Card id5) { this.id5 = id5; } public Card getId6() { return id6; } public void setId6(Card id6) { this.id6 = id6; } public Card getId7() { return id7; } public void setId7(Card id7) { this.id7 = id7; } public Card getId8() { return id8; } public void setId8(Card id8) { this.id8 = id8; } public Card getId9() { return id9; } public void setId9(Card id9) { this.id9 = id9; } public Card getId10() { return id10; } public void setId10(Card id10) { this.id10 = id10; } public Card getJ() { return J; } public void setJ(Card j) { J = j; } public Card getQ() { return Q; } public void setQ(Card q) { Q = q; } public Card getK() { return K; } public void setK(Card k) { K = k; } public Card getA() { return A; } public void setA(Card a) { A = a; } }
package collectiontest.games; import java.util.ArrayList; import java.util.List; public class Player { //玩家的ID private String id ; //玩家姓名 private String name ; //玩家所持牌 private List<Card> pokerType ; public Player() { } public Player(String id, String name, List<Card> pokerType) { this.id = id; this.name = name; this.pokerType = new ArrayList<>(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<Card> getPokerType() { return pokerType; } public void setPokerType(List<Card> pokerType) { this.pokerType = pokerType; } }
package collectiontest.games; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Scanner; import java.util.Set; public class GamsBegin { // 创建扑克牌 public Set<Poker> cPoker() { System.out.println("**********开始创建扑克牌**********"); // 创建一副poker // 四个类型:黑--4、红--3、梅--2、方--1 Set<Poker> pokers = new HashSet<>(); Poker[] poker = { new Poker(1), new Poker(2), new Poker(3), new Poker(4) }; /* * Collections工具类的使用 * Collections.addAll(pokers, new Poker(1), new Poker(2), new Poker(3),new Poker(4)); * * */ pokers.addAll(Arrays.asList(poker)); System.out.println("**********扑克牌创建成功**********"); return pokers; } // 创建两个玩家 public Map<String, Player> cPlayer() { System.out.println("**********开始创建玩家**********"); Map<String, Player> map = new HashMap<String, Player>(); // 控制数量 Integer control = 0; System.out.println("创建两名玩家,根据提示创建"); Scanner console = new Scanner(System.in); while (true) { System.out.println("请输入第 "+(control+1)+" 个玩家ID:"); String courseId = console.next(); if (isNumeric(courseId)) { System.out.println("请输入第 "+(control+1)+" 个玩家姓名:"); String courseName = console.next(); Player players = new Player(courseId, courseName, null); //保存数据 map.put(courseId, players); System.out.println("添加第 " + (control + 1) + " 个玩家 " + courseName + " 成功"); //数量自加 control++; } else { System.out.println("*****请输入数字ID*****"); continue; } if (control == 2) { break; } } System.out.println("**********玩家创建成功**********"); return map; } // 判断输入是否为数字, Character.isDigit()为java方法 public boolean isNumeric(String str) { for (int i = 0; i < str.length(); i++) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } /** * 洗牌 :也可以产生52个不同随机数,实现洗牌 * **/ public List<Card> wPoker(Set<Poker> pokers) { System.out.println("**********开始洗牌**********"); //利用List的有序排序,洗牌之后保存顺序不变 List<Card> listCard = new ArrayList<>(); // 利用Set集合的无序排序,实现洗牌 Set<Card> listSet = new HashSet<>(); //保存到Set集合,无序 for (Poker pk : pokers) { listSet.add(pk.getId2()); listSet.add(pk.getId3()); listSet.add(pk.getId4()); listSet.add(pk.getId5()); listSet.add(pk.getId6()); listSet.add(pk.getId7()); listSet.add(pk.getId8()); listSet.add(pk.getId9()); listSet.add(pk.getId10()); listSet.add(pk.getJ()); listSet.add(pk.getQ()); listSet.add(pk.getK()); listSet.add(pk.getA()); } //保存在List集合,有序 for (Card cd : listSet) { listCard.add(cd); System.out.println(cd); } System.out.println("**********洗牌成功**********"); return listCard; } // 发牌 public Map<String, Player> pushPoker(List<Card> listCard, Map<String, Player> pMap) { System.out.println("**********发牌开始**********"); // 控制每人发两张牌后结束 int control = 0; for (Map.Entry<String, Player> entry : pMap.entrySet()) { if (control == 0) { for (int i = 0; i < 3; i = i + 2) { // 发牌 entry.getValue().getPokerType().add(listCard.get(i)); } // 更新map对象 pMap.put(entry.getKey(), entry.getValue()); control++; } else if (control == 1) { for (int i = 1; i < 4; i = i + 2) { // 发牌 entry.getValue().getPokerType().add(listCard.get(i)); } // 更新map对象 pMap.put(entry.getKey(), entry.getValue()); control++; } else { break; } } System.out.println("**********发牌成功**********"); return pMap; } public void compareMatch(Map<String, Player> newMap) { /*比较胜负 * 1.首先取得每个玩家手中最大牌的ID和花色ID。 * 2.比较俩玩家手中最大牌的ID大小,牌大者获胜。 * 3.如果两张牌的ID相等,在比较两张牌的花色ID,花色ID更大着获胜。 * * */ List<Player> players = new ArrayList<>(); // 获得两个玩家 for (Map.Entry<String, Player> entry : newMap.entrySet()) { players.add(entry.getValue()); } // 玩家一信息和所持牌 List<Card> playerOne = players.get(0).getPokerType(); //获得最大牌的ID和花色 Integer oneMaxId = Math.max(playerOne.get(0).getId(), playerOne.get(1) .getId()); Integer oneMaxType = (oneMaxId!=playerOne.get(0).getId()) ? playerOne.get(1).getType() : playerOne.get(0).getType() ; // 玩家二信息和所持牌 List<Card> playerTwo = players.get(1).getPokerType(); //获得最大牌的ID和花色 Integer twoMaxId = Math.max(playerTwo.get(0).getId(), playerTwo.get(1) .getId()); Integer twoMaxType = (twoMaxId!=playerTwo.get(0).getId()) ? playerTwo.get(1).getType() : playerTwo.get(0).getType() ; if (oneMaxId > twoMaxId) { System.out.println("玩家 : " + players.get(0).getName() + " 获胜!!"); } else if (oneMaxId == twoMaxId) { if (oneMaxType > twoMaxType) { System.out .println("玩家 : " + players.get(0).getName() + " 获胜!!"); } else { System.out .println("玩家 : " + players.get(1).getName() + " 获胜!!"); } } else { System.out.println("玩家 : " + players.get(1).getName() + " 获胜!!"); } System.out.println("**********************************************"); System.out.println("玩家 : " + players.get(0).getName() + "的牌是:" + showName(playerOne.get(0).getType(), 0) + "--" + showName(playerOne.get(0).getId(), 1) + " " + showName(playerOne.get(1).getType(), 0) + "--" + showName(playerOne.get(1).getId(), 1)); System.out.println("玩家 : " + players.get(1).getName() + "的牌是:" + showName(playerTwo.get(0).getType(), 0) + "--" + showName(playerTwo.get(0).getId(), 1) + " " + showName(playerTwo.get(1).getType(), 0) + "--" + showName(playerTwo.get(1).getId(), 1)); } // 显示牌的名称 private String showName(Integer i, Integer type) { String str = ""; // 显示花色 if (type == 0) { switch (i) { case 1: { str = "方块"; break; } case 2: { str = "梅花"; break; } case 3: { str = "红桃"; break; } case 4: { str = "黑桃"; break; } default: { break; } } } // 显示数字 if (type == 1) { if (i < 11) { return i.toString(); } else { switch (i) { case 11: { str = "J"; break; } case 12: { str = "Q"; break; } case 13: { str = "K"; break; } case 14: { str = "A"; break; } default: { break; } } } } return str; } public static void main(String[] args) { GamsBegin gb = new GamsBegin(); // 1、创建扑克牌 Set<Poker> pokers = gb.cPoker(); // 2、创建两个玩家 Map<String, Player> pMap = gb.cPlayer(); // 3、洗牌 List<Card> listCard = gb.wPoker(pokers); // 4、发牌 Map<String, Player> newMap = gb.pushPoker(listCard, pMap); // 4、比较胜负 gb.compareMatch(newMap); } }
***************Pokerkarten erfolgreich erstellt**********
** **********Beginnen Sie mit dem Erstellen von Spielern* *********
Erstellen Sie zwei Spieler und befolgen Sie die Anweisungen
Bitte geben Sie die 1. Spieler-ID ein:
Bitte geben Sie die 1. ein Spielername:
Stephen Chow
Hinzufügen Der 1. Spieler Stephen Chow ist erfolgreich
Bitte geben Sie die 2. Spieler-ID ein:
Bitte geben Sie den 2. Spielernamen ein:
Chow Yun-fat
Hinzufügen der 2. Spieler Chow Yun-fat erfolgreich
***** *****Spieler erfolgreich erstellt************
**********Start Mischen der Karten***************
Karte [id=9, Typ=3]
Karte [id=11, Typ=4]
Karte [id=13, Typ=3]
Karte [id=8, Typ=3]
Karte [id=5, Typ=2]
Karte [id=6, Typ=1]
Karte [id= 4, Typ=3]
Karte [id=5, Typ=4]
Karte [id=2, Typ=3]
Karte [id=9, Typ=2]
Karte [ id=9, Typ=4]
Karte [id=14, Typ=2]
Karte [id=9, Typ=1]
Karte [id=2, Typ=1]
Karte [id=2, Typ=4]
Karte [id=7, Typ=4]
Karte [id=11, Typ=1]
Karte [id=10, Typ=1]
Karte [id=14, Typ=4]
Karte [id=14, Typ=3]
Karte [id=12, Typ=2]
Karte [id=2, Typ=2 ]
Karte [id=10, Typ=2]
Karte [id=7, Typ=1]
Karte [id=7, Typ=3]
Karte [id=8, Typ =2]
Karte [id=4, Typ=4]
Karte [id=13, Typ=4]
Karte [id=14, Typ=1]
Karte [id=12 , Typ=1]
Karte [id=5, Typ=1]
Karte [id=6, Typ=4]
Karte [id=12, Typ=4]
Karte [id =11, Typ=2]
Karte [id=10, Typ=3]
Karte [id=3, Typ=4]
Karte [id=12, Typ=3]
Karte [id=4, Typ=2]
Karte [id=4, Typ=1]
Karte [id=6, Typ=2]
Karte [id=5, Typ=3]
Karte [id=8, Typ=4]
Karte [id=3, Typ =2]
Karte [id=13, Typ=2]
Karte [id=7, Typ=2]
Karte [id=3, Typ=3]
Karte [id=3, Typ=1]
Karte [id=6, Typ=3]
Karte [id=8, Typ= 1]
Karte [id=11, Typ=3]
Karte [id=13, Typ=1]
Karte [id=10, Typ=4]
****** ******Erfolgreich gemischt**********
* *********Die Kartenausgabe hat begonnen************
************Das Austeilen der Karten war erfolgreich***************
Spieler: Stephen Chow gewinnt! !
**************************************************
Spieler: Stephen Chows Karte ist: Hearts-9 Hearts-K
Spieler: Chow Yun-fats Karten sind: Spades-J Hearts-8