欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實現(xiàn)斗地主游戲

 更新時間:2020年04月23日 09:08:42   作者:zzm0707  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)斗地主游戲,洗牌、發(fā)牌、看牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

感想:

第一次寫博客,感覺編輯器挺復(fù)雜厲害的,感覺自己的內(nèi)容挺簡單的。有什么問題請多多指教!

思路:

1、創(chuàng)建一個撲克牌的實體類Poker,設(shè)置了四個參數(shù):花色、數(shù)字、牌值(判斷大?。?、是否地主牌,實現(xiàn)getset方法和構(gòu)造方法;
2、創(chuàng)建一個玩家的實體類Player,設(shè)置了四個參數(shù): 初始牌集合,排序后牌集合,牌值集合,是否地主,實現(xiàn)getset方法和構(gòu)造方法;
3、洗牌:循環(huán)嵌套花色數(shù)組跟數(shù)字?jǐn)?shù)組生成52個Poker,手動加入大小王Poker,放進(jìn)map(int,Poker)里面,利用Collections.shuffle隨機(jī)排序map的key,再根據(jù)key生成排序后的Poker集合
4、發(fā)牌:生成3個玩家對象,拿到洗牌后的集合,前51張牌為玩家牌,后3張為地主牌,在51張牌中隨機(jī)一張為地主牌,遍歷玩家牌分配個每一個Player,同時根據(jù)玩家牌的牌值生成集合grades存進(jìn)Player對象中,將grades轉(zhuǎn)為int數(shù)組并進(jìn)行升序排序,根據(jù)grade取得新Poker集合分配給玩家。

Poker類:

package com.company;

public class Poker {
 private String color;
 private String number;
 private int grade;
 boolean isLandowners;

 public boolean isLandowners() {
 return isLandowners;
 }

 public void setLandowners(boolean landowners) {
 isLandowners = landowners;
 }

 public int getGrade() {
 return grade;
 }

 public void setGrade(int grade) {
 this.grade = grade;
 }

 public String getColor() {
 return color;
 }

 public void setColor(String color) {
 this.color = color;
 }

 public String getNumber() {
 return number;
 }

 public void setNumber(String number) {
 this.number = number;
 }

 public Poker() {
 }

 public Poker(String color, String number ,int grade,boolean isLandowners) {
 this.color = color;
 this.number = number;
 this.grade=grade;
 this.isLandowners=isLandowners;
 }


 public String toString() {
 return this.getColor()+this.getNumber();
 }
}

Player類:

package com.company;

import java.util.ArrayList;
import java.util.LinkedList;

public class Player {
 private ArrayList<Poker> pokers;
 private boolean isLandower;
 private ArrayList<Poker> newPokers;
 private LinkedList<Integer> grades;

 public LinkedList<Integer> getGrades() {
 return grades;
 }

 public void setGrades(LinkedList<Integer> grades) {
 this.grades = grades;
 }

 public ArrayList<Poker> getNewPokers() {
 return newPokers;
 }

 public void setNewPokers(ArrayList<Poker> newPokers) {
 this.newPokers = newPokers;
 }

 public boolean isLandower() {
 return isLandower;
 }

 public void setLandower(boolean landower) {
 isLandower = landower;
 }

 public Player() {
 }

 public ArrayList<Poker> getPokers() {
 return pokers;
 }

 public void setPokers(ArrayList<Poker> pokers) {
 this.pokers = pokers;
 }
}

洗牌:

/*洗牌*/
 public static LinkedList<Poker> getPokerList() {
 LinkedList<Poker> pokers = new LinkedList<Poker>();
 LinkedList<Poker> newPokers = new LinkedList<Poker>();
 ArrayList<Integer> arrayList = new ArrayList<>();
 int[] arr;

 /*生成54張撲克牌(Poker對象)*/
 /*用嵌套循環(huán)生成從方塊3到黑桃2的Poker對象,放進(jìn)Poker的LinkedList保證順序*/
 String[] colors = {"♦", "♣", "♥", "♠"};
 String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
 for (int i = 0; i < numbers.length; i++) {
 for (int j = 0; j < colors.length; j++) {
 Poker p = new Poker(colors[j], numbers[i], (4 * i) + j + 1, false);
 pokers.add(p);
 }
 }
 /*添加大小王*/
 pokers.add(new Poker("black", "☆", 53, false));
 pokers.add(new Poker("red", "☆", 54, false));

 /*將生成的54張撲克牌從1到54放進(jìn)map*/
 for (int z = 1; z <= pokers.size(); z++) {
 map.put(z, pokers.get(z - 1));
 }
 /*遍歷Map,將每個Poker對應(yīng)的key放進(jìn) ArrayList<Integer> arrayList */
 Set<Map.Entry<Integer, Poker>> set = map.entrySet();
 Iterator it = set.iterator();
 while (it.hasNext()) {
 Map.Entry<Integer, Poker> e = (Map.Entry<Integer, Poker>) it.next();
 arrayList.add(e.getKey());
 }
 /*利用Collections.shuffle隨機(jī)排序key*/
 Collections.shuffle(arrayList);
 /*將亂序后的key對于的Poker放進(jìn)newPokers里面 */
 for (Integer i : arrayList) {
 newPokers.add(map.get(i));
 }

 return newPokers;
 }

發(fā)牌:

/*發(fā)牌*/
 /*根據(jù)玩家人數(shù)生成Player,默認(rèn)num=3*/
 private static void sentPoker(int num) {
 /*獲取洗牌后的LinkedList,保證順序*/
 LinkedList<Poker> Allpokers = getPokerList();
 ArrayList<Poker> pokers = new ArrayList<>();
 ArrayList<Poker> BottomPokers = new ArrayList<>();

 /*生成玩家對象*/
 for (int i = 0; i < num; i++) {
 Player p = new Player();
 players.add(p);
 }
 /*前50張牌為玩家牌,后三張為底牌*/
 for (int p = 0; p < Allpokers.size(); p++) {
 if (p <= 50) {
 pokers.add(Allpokers.get(p));
 } else {
 BottomPokers.add(Allpokers.get(p));
 }
 }
 /*玩家牌中隨機(jī)一張為地主牌*/
 Random rand = new Random();
 int s = rand.nextInt(51);
 pokers.get(s).setLandowners(true);
 System.out.println("地主牌: " + pokers.get(s));

 /*根據(jù)num生成Player對象*/
 for (int j = 0; j < num; j++) {
 /*玩家的牌值集合*/
 LinkedList<Integer> grades = new LinkedList<>();
 /*玩家的手牌集合*/
 ArrayList<Poker> playerPokers = new ArrayList<Poker>();

 /*根據(jù)玩家個數(shù)分配玩家牌*/
 for (int z = j; z < pokers.size(); z = z + num) {
 playerPokers.add(pokers.get(z));
 grades.add(pokers.get(z).getGrade());
 players.get(j).setPokers(playerPokers);
 players.get(j).setGrades(grades);
 }
 /*根據(jù)玩家牌中的地主牌設(shè)置玩家是否地主*/
 for (Poker p : players.get(j).getPokers()) {
 if (p.isLandowners() == true) {
  players.get(j).setLandower(true);
 }
 }
 /*根據(jù)玩家的牌值集合生成數(shù)組*/
 Integer[] gs = new Integer[players.get(j).getGrades().size()];
 grades.toArray(gs);
 /*排序數(shù)組,由低到高*/
 Arrays.sort(gs);

 /*排序后的玩家牌*/
 ArrayList<Poker> newPokers = new ArrayList<>();
 for (int g = 0; g < gs.length; g++) {
 Poker p = map.get(gs[g]);
 newPokers.add(p);
 }
 players.get(j).setNewPokers(newPokers);
 System.out.println("玩家" + (j + 1) + ": " + players.get(j).getNewPokers() + " 是否地主:" + players.get(j).isLandower());
 }

 System.out.print("底牌為: ");
 for (Poker p : BottomPokers) {
 System.out.print(p + " ");
 }
 }

效果如下:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot?@Async?注解如何實現(xiàn)方法異步

    springboot?@Async?注解如何實現(xiàn)方法異步

    這篇文章主要介紹了springboot?@Async?注解如何實現(xiàn)方法異步,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java中xml進(jìn)行報文發(fā)送和解析操作

    java中xml進(jìn)行報文發(fā)送和解析操作

    這篇文章主要介紹了java中xml進(jìn)行報文發(fā)送和解析操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • SpringBoot使用Redis緩存的實現(xiàn)方法

    SpringBoot使用Redis緩存的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot使用Redis緩存的實現(xiàn)方法,需要的朋友可以參考下
    2018-02-02
  • Java導(dǎo)出CSV文件的方法

    Java導(dǎo)出CSV文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java導(dǎo)出CSV文件的方法,分頁查詢大數(shù)據(jù)量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • java設(shè)計模式之簡單工廠模式

    java設(shè)計模式之簡單工廠模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之簡單工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • netty中的IO、NIO、AIO使用詳解

    netty中的IO、NIO、AIO使用詳解

    這篇文章主要介紹了netty中的IO、NIO、AIO使用詳解,本文會說明各種IO的特點、分別解決了什么樣的問題做一個分析闡述,并結(jié)合Java代碼例子來輔助理解,像這些的歷史演進(jìn)和詳細(xì)的底層原理網(wǎng)上很多,所以我們只站在應(yīng)用層,使用者的角度去分析,需要的朋友可以參考下
    2023-12-12
  • java ant 配置及構(gòu)建項目圖文教程

    java ant 配置及構(gòu)建項目圖文教程

    以下是對java ant配置及構(gòu)建項目進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • Maven根據(jù)不同環(huán)境打包不同配置文件的方法

    Maven根據(jù)不同環(huán)境打包不同配置文件的方法

    這篇文章主要介紹了Maven根據(jù)不同環(huán)境打包不同配置文件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java實現(xiàn)數(shù)據(jù)庫連接池的方法

    Java實現(xiàn)數(shù)據(jù)庫連接池的方法

    這篇文章主要介紹了Java實現(xiàn)數(shù)據(jù)庫連接池的方法,涉及java數(shù)據(jù)庫連接池的創(chuàng)建、連接、刷新、關(guān)閉及狀態(tài)獲取的常用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • java實現(xiàn)鏈表反轉(zhuǎn)

    java實現(xiàn)鏈表反轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)鏈表反轉(zhuǎn),分別通過迭代法、遞歸法實現(xiàn)java鏈表反轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論