实现斗地主发牌功能
編程實現控制臺版支持三人對戰的斗地主游戲(暫時只能發牌)。
(1)首先準備 54 張撲克牌并打亂順序。
(2)由三個玩家交替摸牌,每人 17 張撲克牌,最后三張留作底牌。
(3)查看三個玩家手中的撲克牌和底牌。
(4)其中玩家手中的撲克牌需要按照大小順序打印,規則如下:
手中撲克牌從大到小的擺放順序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
代碼分段
定義一些等會要用到的變量
private String cardA; //用戶Aprivate String cardB; //用戶Bprivate String cardC; //用戶Cprivate List A = new ArrayList(); //用戶A的手牌private List B = new ArrayList(); //用戶B的手牌private List C = new ArrayList(); //用戶C的手牌private List safeCards = new ArrayList();//最后三張底牌private Map map = null; //空的撲克牌用于生成撲克牌的方法。
/*** 生成一副撲克牌* @return*/public static Map playingCard(){String[] color = new String[]{"?", "?", "?", "?" };String[] num = new String[]{"2","A","K","Q","J","10","9","8","7","6","5","4","3"};String[] ghost = new String[]{"大王","小王"};Map<Integer,String> map = new HashMap<>();map.put(0,ghost[0]);map.put(1,ghost[1]);int index = 2;//注入for (int i = 0; i < num.length; i++) {for (int j = 0; j < color.length; j++) {map.put(index,color[j]+num[i]);index++;}}return map;}實現洗牌發牌功能,并把牌存進全局變量A、B、C數組里。
/*** 實現洗牌發牌功能*/public void Shuffle(){List<Integer> list = new ArrayList<>(map.keySet());Collections.shuffle(list);safeCards = new ArrayList<>(list.subList(list.size() - 3, list.size()));list.removeAll(safeCards);Iterator<Integer> iterator = list.iterator();int a;int b;int c;while(iterator.hasNext()) {a = iterator.next();b = iterator.next();c = iterator.next();A.add(a);B.add(b);C.add(c);System.out.println("給" + cardA + "發一張[" + map.get(a) + "]");System.out.println("給" + cardB + "發一張[" + map.get(b) + "]");System.out.println("給" + cardC + "發一張[" + map.get(c) + "]");}iterator = safeCards.iterator();System.out.print("剩余底牌[");while(iterator.hasNext()) {System.out.print(map.get(iterator.next()));if (iterator.hasNext()){System.out.print(",");}}System.out.println("]");}把手牌list轉換成String類型,便于查看(實現了排序功能)
/*** 把手牌list轉換成String類型,便于查看* @param list 用戶的手牌* @param name 用戶的名字* @return*/public String show(List list,String name){Collections.sort(list);StringBuilder sb = new StringBuilder();sb.append(name + "[");Iterator iterator = list.iterator();while (iterator.hasNext()){sb.append(map.get(iterator.next()));if (iterator.hasNext()){sb.append(",");}}sb.append("]");return sb+"";}查看玩家名字
/*** getCardA、getCardB、getCardC查看玩家名字*/public String getCardA() {return cardA;}public String getCardB() {return cardB;}public String getCardC() {return cardC;}用于更換玩家
/*** setCardA、setCardB、setCardC 更換玩家* @param cardA*/public void setCardA(String cardA) {System.out.println("一號玩家[" + this.cardA + "]更換[" + cardA + "]");this.cardA = cardA;}public void setCardB(String cardB) {System.out.println("二號玩家[" + this.cardB + "]更換[" + cardB + "]");this.cardB = cardB;}public void setCardC(String cardC) {System.out.println("三號玩家[" + this.cardC + "]更換[" + cardC + "]");this.cardC = cardC;}查看玩家的手牌
/*** getA、getB、getC 看撲克牌* getSafeCards 看底牌*/public void getA() {System.out.println(show(A,cardA));}public void getB() {System.out.println(show(B,cardB));}public void getC() {System.out.println(show(C,cardC));}public void getSafeCards(){System.out.println(show(safeCards,"底牌"));}構造方法:定義三個玩家,并獲取一副新撲克牌
/*** 構造方法定義三個玩家,并獲取一副新撲克牌* @param cardA* @param cardB* @param cardC*/public Test3(String cardA, String cardB, String cardC) {map = playingCard(); //生成一副新的撲克牌this.cardA = cardA; //用戶A取名this.cardB = cardB; //用戶B取名this.cardC = cardC; //用戶C取名}代碼總匯
功能類
package test3;import java.util.*;/*** @author cyh* @version 1.0* @date 2021/1/5 8:48*/ public class Test3 {private String cardA; //用戶Aprivate String cardB; //用戶Bprivate String cardC; //用戶Cprivate List A = new ArrayList(); //用戶A的手牌private List B = new ArrayList(); //用戶B的手牌private List C = new ArrayList(); //用戶C的手牌private List safeCards = new ArrayList();//最后三張底牌private Map map = null; //空的撲克牌/*** 構造方法定義三個玩家,并獲取一副新撲克牌* @param cardA* @param cardB* @param cardC*/public Test3(String cardA, String cardB, String cardC) {map = playingCard(); //生成一副新的撲克牌this.cardA = cardA; //用戶A取名this.cardB = cardB; //用戶B取名this.cardC = cardC; //用戶C取名}/*** 生成一副撲克牌* @return*/public static Map playingCard(){String[] color = new String[]{"?", "?", "?", "?" };String[] num = new String[]{"2","A","K","Q","J","10","9","8","7","6","5","4","3"};String[] ghost = new String[]{"大王","小王"};Map<Integer,String> map = new HashMap<>();map.put(0,ghost[0]);map.put(1,ghost[1]);int index = 2;//注入for (int i = 0; i < num.length; i++) {for (int j = 0; j < color.length; j++) {map.put(index,color[j]+num[i]);index++;}}return map;}/*** 實現洗牌發牌功能*/public void Shuffle(){List<Integer> list = new ArrayList<>(map.keySet());Collections.shuffle(list);safeCards = new ArrayList<>(list.subList(list.size() - 3, list.size()));list.removeAll(safeCards);Iterator<Integer> iterator = list.iterator();int a;int b;int c;while(iterator.hasNext()) {a = iterator.next();b = iterator.next();c = iterator.next();A.add(a);B.add(b);C.add(c);System.out.println("給" + cardA + "發一張[" + map.get(a) + "]");System.out.println("給" + cardB + "發一張[" + map.get(b) + "]");System.out.println("給" + cardC + "發一張[" + map.get(c) + "]");}iterator = safeCards.iterator();System.out.print("剩余底牌[");while(iterator.hasNext()) {System.out.print(map.get(iterator.next()));if (iterator.hasNext()){System.out.print(",");}}System.out.println("]");}/*** 把手牌list轉換成String類型,便于查看* @param list 用戶的手牌* @param name 用戶的名字* @return*/public String show(List list,String name){Collections.sort(list);StringBuilder sb = new StringBuilder();sb.append(name + "[");Iterator iterator = list.iterator();while (iterator.hasNext()){sb.append(map.get(iterator.next()));if (iterator.hasNext()){sb.append(",");}}sb.append("]");return sb+"";}/*** getA、getB、getC 看撲克牌* getSafeCards 看底牌*/public void getA() {System.out.println(show(A,cardA));}public void getB() {System.out.println(show(B,cardB));}public void getC() {System.out.println(show(C,cardC));}public void getSafeCards(){System.out.println(show(safeCards,"底牌"));}/*** getCardA、getCardB、getCardC查看玩家名字*/public String getCardA() {return cardA;}public String getCardB() {return cardB;}public String getCardC() {return cardC;}/*** setCardA、setCardB、setCardC 更換玩家* @param cardA*/public void setCardA(String cardA) {System.out.println("一號玩家[" + this.cardA + "]更換[" + cardA + "]");this.cardA = cardA;}public void setCardB(String cardB) {System.out.println("二號玩家[" + this.cardB + "]更換[" + cardB + "]");this.cardB = cardB;}public void setCardC(String cardC) {System.out.println("三號玩家[" + this.cardC + "]更換[" + cardC + "]");this.cardC = cardC;} }實習類
package test3;import java.util.Scanner;/*** @author cyh* @version 1.0* @date 2021/1/5 10:17*/ public class Test3Test {public static void main(String[] args) {Scanner sc =new Scanner(System.in);System.out.println("-------------------");System.out.println("[歡迎來到拉勾博彩平臺]");System.out.println("[請輸入參加玩家的名字]");Test3 t = new Test3(sc.next(),sc.next(),sc.next());System.out.println("[ 三位玩家名字分別是 ]");System.out.println("[ 玩家一:" + t.getCardA() + " ]");System.out.println("[ 玩家二:" + t.getCardB() + " ]");System.out.println("[ 玩家三:" + t.getCardC() + " ]");System.out.println("-------------------");System.out.println("-------------------");commence:while (true){System.out.println("[需要更換玩家請按E ]");System.out.println("[不需要請輸入任意鍵]");if("e".equalsIgnoreCase(sc.next())){System.out.println("[請輸入更換的位置]");System.out.println("[ 輸入整數數字 ]");int opt = sc.nextInt();opt:while (true){switch (opt){case 1:System.out.println("[ 正在更換玩家一 ]");System.out.println("[ 原來的用戶名:" + t.getCardA() + " ]");System.out.println("[輸入更換的用戶名]");t.setCardA(sc.next());break opt;case 2:System.out.println("[ 正在更換玩家二 ]");System.out.println("[ 原來的用戶名:" + t.getCardB() + " ]");System.out.println("[輸入更換的用戶名]");t.setCardB(sc.next());break opt;case 3:System.out.println("[ 正在更換玩家三 ]");System.out.println("[ 原來的用戶名:" + t.getCardC() + " ]");System.out.println("[輸入更換的用戶名]");t.setCardC(sc.next());break opt;default:}}}else {break commence;}}System.out.println("------------游戲開始------------");t.Shuffle();System.out.println("------------發牌結束------------");t.getA();t.getB();t.getC();t.getSafeCards();} }效果圖
總結
- 上一篇: 2010中Word自动编号,下一行缩进问
- 下一篇: 下载网上压缩包(包含多行json)并将其