컬렉션 계층 구조의 루트 인터페이스입니다. 컬렉션은 컬렉션의 요소라고도 하는 개체 집합을 나타냅니다. 일부 컬렉션은 중복 요소를 허용하지만 다른 컬렉션은 그렇지 않습니다. 일부 컬렉션은 순서가 지정되어 있고 다른 컬렉션은 순서가 지정되어 있지 않습니다. JDK는 이 인터페이스의 직접적인 구현을 제공하지 않습니다. 즉, Set 및 List와 같은 보다 구체적인 하위 인터페이스의 구현을 제공합니다. 이 인터페이스는 일반적으로 최대 일반성이 필요한 곳에서 컬렉션을 전달하고 작업하는 데 사용됩니다.
주요 콘텐츠: 컬렉션은 홍콩 영화 속 거물들이 플레이하는 포커 게임을 시뮬레이션하는 데 사용됩니다.
1. 게임 규칙: 두 명의 플레이어가 각각 두 장의 카드를 받고 비교합니다. 각 플레이어의 손에 있는 가장 많은 카드 수를 비교하고 크기는 A-2이며 점수가 더 높은 플레이어가 승리합니다. 점수가 동일할 경우 양복을 비교하여 양복은 검정(4), 빨강(3), 자두(2), 사각형(1) 순으로 되며, 양복이 더 큰 쪽이 승리합니다.
2. 구현 단계:
검은색(4), 빨간색(3), 자두색(2), 사각형(1)의 4가지 모양으로 구성된 A-2 카드 덱을 만듭니다. , 총 52장의 플레이 카드
플레이어 ID, 이름, 카드 정보를 포함한 두 명의 플레이어를 생성합니다.
카드를 섞고 두 플레이어에게 각각 두 장의 카드를 줍니다.
카드 크기를 비교합니다. 플레이어의 손에 승자가 결정됩니다 ;
3. 프로그램 구현
카드 클래스: 카드의 번호와 모양이 포함됩니다
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 + "]"; } }
포커 클래스: 플레잉 카드 카드 A-2
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; } }
를 포함합니다. 플레이어 플레이어 클래스: 플레이어 ID와 이름, 보유한 카드 정보를 포함합니다.
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; } }
포커 게임 메인 클래스: 1) 포커 생성 2) 플레이어 생성 3) 포함 섞기 4) 딜링 5) 결과 비교
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); } }
실행 결과:
************카드 만들기 시작***** ****
************포커 카드가 성공적으로 생성되었습니다************
************만들기 시작 player********* *
두 명의 플레이어를 생성하고 프롬프트를 따릅니다
첫 번째 플레이어 ID를 입력하세요:
첫 번째 플레이어 이름을 입력하세요:
Stephen Chow
추가 첫 번째 주윤발 추가 성공
두 번째 주윤발 ID를 입력하세요:
두 번째 주윤발 이름을 입력하세요:
주윤발
주윤발 두 번째 주윤발 추가 성공
** ********** 플레이어가 성공적으로 생성되었습니다 **********
************카드 섞기 시작************ **
카드 [id=9, 유형=3]
카드 [id=11, 유형=4]
카드 [id=13, 유형=3]
카드 [id=8, type=3]
카드 [id=5, type=2 ]
카드 [id=6, type=1]
카드 [id=4, type=3]
카드 [id= 5, 유형=4]
카드 [id=2, 유형=3]
카드 [id=9, 유형=2]
카드 [id=9, 유형=4]
카드 [ id=14, type=2]
카드 [id=9 , type=1]
카드 [id=2, type=1]
카드 [id=2, type=4]
카드 [id=7, 유형=4]
카드 [id =11, 유형=1]
카드 [id=10, 유형=1]
카드 [id=14, 유형=4]
카드 [id=14, 유형=3]
카드 [id=12, 유형=2]
카드 [id=2, 유형=2]
카드 [id=10, 유형=2 ]
카드 [id=7, 유형=1]
카드 [id=7, 유형=3]
카드 [id=8, 유형=2]
카드 [id=4, 유형 =4]
카드 [id=13, 유형=4]
카드 [id=14, 유형=1]
카드 [id=12, 유형=1]
카드 [id=5 , 유형=1]
카드 [id=6, 유형= 4]
카드 [id=12, 유형=4]
카드 [id=11, 유형=2]
카드 [id =10, 유형=3]
카드 [id=3, 유형=4]
카드 [id=12, 유형=3]
카드 [id=4, 유형=2]
카드 [id=4, type=1]
카드 [id= 6, type=2]
카드 [id=5, type=3]
카드 [id=8, type=4]
카드 [id=3, 유형=2]
카드 [ id=13, 유형=2]
카드 [id=7, 유형=2]
카드 [id=3, 유형=3]
카드 [id=3, 유형=1]
카드 [id=6, 유형=3]
카드 [id=8, 유형=1]
카드 [id=11, 유형= 3]
카드 [id=13, 유형=1]
카드 [id=10, 유형=4]
************섞기 성공***** *****
************ *거래 시작**********
************거래 성공**** ********
플레이어: Stephen Chow가 승리합니다! !
************************************************************************ *
플레이어: 주성치의 카드: 하츠-9 하트-K
플레이어: 주윤발의 카드: 스페이드-J 하트-8
위 내용은 기사 전문 내용, I 이것이 모든 사람의 학습에 도움이 되기를 바라며, 또한 모든 사람이 PHP 중국어 웹사이트를 지지해주기를 바랍니다.
JAVA 컬렉션 포커 게임 예제와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!