ホームページ Java &#&チュートリアル JAVAコレクションコレクションのポーカーゲーム例

JAVAコレクションコレクションのポーカーゲーム例

Jan 23, 2017 pm 04:54 PM

コレクション階層のルートインターフェイス。コレクションはオブジェクトのセットを表し、コレクションの要素とも呼ばれます。一部のコレクションでは要素の重複が許可されますが、その他のコレクションでは許可されません。順序付けされたコレクションもあれば、順序付けされていないコレクションもあります。 JDK は、このインターフェイスの直接実装を提供しません。JDK は、Set や List などのより具体的なサブインターフェイスの実装を提供します。このインターフェイスは通常、最大限の汎用性が必要な場合にコレクションを渡し、コレクション上で操作するために使用されます。

メインコンテンツ: ここではコレクションを使用して、香港映画の偉人がプレイするポーカー ゲームをシミュレートします。

1. ゲームのルール: 2 人のプレイヤーにそれぞれ 2 枚のカードが配られ、比較されます。各プレーヤーの手札の最大数のカードを比較し、サイズは A-2 で、より高いポイント数を持つプレーヤーが勝ちます。同じ得点の場合はスートを比較し、スートが黒(4)、赤(3)、プラム(2)、スクエア(1)となり、スートが大きい方が勝ちとなります。

2. 実装手順:

4 色の合計 52 枚のトランプ A-2 を作成します。
2 人のプレイヤーを作成します。プレイヤー ID、名前、およびカード情報が含まれます。
カードをシャッフルし、2 人のプレイヤーにそれぞれ 2 枚のカードを配ります。
プレイヤーの手のカードのサイズを比較して、勝者を決定します。プログラムの実装

Card クラス: カードの番号とスーツが含まれます

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 + "]";
  }  
}
ログイン後にコピー

ポーカー カテゴリ: トランプ カード Card 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);
 
  }
}
ログイン後にコピー

実行結果:

********** トランプの作成を開始します ***** ******* **
************ポーカー カードが正常に作成されました************

*********** *プレーヤーの作成を開始します********* *

2 人のプレーヤーを作成し、プロンプトに従ってください
最初のプレーヤー ID を入力してください:
最初のプレーヤー名を入力してください:
Stephen Chow
最初のプレーヤー Stephen Chow を正常に追加します
2 人目のプレイヤー ID を入力してください:
2 人目のプレイヤー名を入力してください:
チョウ・ユンファ
2 人目のプレイヤー、チョウ・ユンファの追加に成功しました
************プレイヤーは正常に作成されました** ********
********** *シャッフル開始************
Card [id=9, type=3]
Card [id= 11, type=4]
カード [id=13, type=3]
カード [id=8, type=3]
カード [id=5, type=2]
カード [id=6, type=1]
カード [id=4, type=3]
カード [id=5, type= 4]
カード [id=2, type=3]
カード [id=9, type=2]
カード [id=9] 、type=4]
カード [id=14, type=2]
カード [id =9, type=1]
カード [id=2, type=1]
カード [id=2, type=4]
カード [id=7, type=4]
カード [id=11, type=1 ]
カード [id=10, type=1]
カード [id=14, type=4]
カード [id=14, type=3]
カード [id=12, type=2]
カード [id= 2, type=2]
カード [id=10, type=2]
カード [id=7, type=1]
カード[id=7, type=3]
カード [id=8, type=2]
カード [id=4, type=4]
カード [id=13, type=4]
カード [id=14, type =1]
カード [id=12, type=1]
カード [id=5 , type=1]
カード [id=6, type=4]
カード [id=12, type=4]
カード [ id=11, type=2]
カード [id=10, type=3]
カード [id=3, type=4]
カード [id=12, type=3]
カード [id=4, type= 2]
カード [id=4, type=1]
カード [id=6, type=2]
カード [id=5, type=3]
カード [id=8, type=4]
カード [id =3, type=2]
カード [id=13, type=2]
カード [id=7, type=2]
カード [id=3, type=3]
カード [id=3, type=1] ]
カード [id=6, type=3]
カード [id=8, type =1]
カード [id=11, type=3]
カード [id=13, type=1]
カード [id= 10, type=4]
************シャッフル成功**********
**********カード配り開始**** ********
**********カード配りは成功しました** ********
プレイヤー: Stephen Chow の勝ちです! !
************************************************
プレイヤー: Stephen Chow のカード: ハート - 9 ハート - K
プレイヤー: チョウ ユンファのカード: スペード - J ハート - 8

以上がこの記事の全内容です。皆様の学習に役立つよう、皆様にも PHP 中国語 Web サイトをサポートしていただければ幸いです。

JAVA コレクションのポーカー ゲームの例に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)