一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

【模擬兩人詐金花牌】手牌大小判斷決定輸贏

來源:CSDN 時間:2023-03-02 09:43:20

初始目標:

模擬兩人詐金花牌,并進行手牌大小判斷  來決定輸贏(并不包含詐人的游戲過程)


(資料圖片)

目標分析:

確定游戲需求:游戲娛樂確定項目應用前景:簡單游戲需求,初級學習需求,商業化能力≈0分析項目內容

項目分析:

發牌手牌等級判斷等級比較確認輸贏

1.每個人 手牌的 標準javaBean包

包括了:

大等級(豹子,同花順……),小等級(相同大等級內細分的 小等級)

每張手牌的  花色 , 牌面數字

每個人的ID

package Save_Pai;import java.util.Arrays;public class PersonPoker {public int BigLevel;public String SmallLevel;private int PokerColour[];private int PokerNumber[];public int person;public PersonPoker(){}public PersonPoker(int[] pokerColour, int[] pokerNumber) {super();PokerColour = pokerColour;PokerNumber = pokerNumber;}public int[] getPokerColour() {return PokerColour;}public void setPokerColour(int[] pokerColour) {PokerColour = pokerColour;}public int[] getPokerNumber() {return PokerNumber;}public void setPokerNumber(int[] pokerNumber) {PokerNumber = pokerNumber;}@Overridepublic String toString() {return "PersonPoker [PokerColour=" + Arrays.toString(PokerColour) + ", PokerNumber="+ Arrays.toString(PokerNumber) + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + Arrays.hashCode(PokerColour);result = prime * result + Arrays.hashCode(PokerNumber);return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;PersonPoker other = (PersonPoker) obj;if (!Arrays.equals(PokerColour, other.PokerColour))return false;if (!Arrays.equals(PokerNumber, other.PokerNumber))return false;return true;}}

2.主程序分析

游戲不止兩個人進行,可以為多人發牌多人發牌前需要得到本局游戲人數確認發牌是否成功

主程序(domain)

package domain;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Scanner;import Fapai.Fapai;import PokerLevel.PokerLevel;import PrintPoker.PrintPoker;import Save_Pai.PersonPoker;public class domain {private static final int BAOZI = 1;public static void main(String[] args) {Fapai t1;Scanner sc = new Scanner(System.in);String ss;System.out.println("開始游戲請輸入 Y , 否則輸入 N");int Person = 0;while ((ss = sc.next()).equals("Y")) {t1 = new Fapai();System.out.println("請輸入參與游戲人數(因牌數限制,人數小于等于17 , 大于1)");sc = new Scanner(System.in);int invol = sc.nextInt();if (!t1.Fp(invol)) {System.out.println("發牌失敗,是否重新發牌");System.out.println("重新發牌輸入 Y , 否則輸入 N");sc = new Scanner(System.in);continue;}for (int i = 0; i < invol; i++) {System.out.println("第" + (i + 1) + "人 牌型:");PrintPoker P = new PrintPoker(t1.p[i]);}for (int i = 0; i < invol; i++) {t1.p[i].BigLevel = new PokerLevel(t1.p[i]).GetBigLevel();if (t1.p[i].BigLevel != 5) {t1.p[i].SmallLevel = new PokerLevel(t1.p[i]).MakeString(0);} else {t1.p[i].SmallLevel = new PokerLevel(t1.p[i]).MakeString(1);}}ArrayListAL1 = new ArrayList<>();for (int i = 0; i < invol; i++) {AL1.add(t1.p[i]);}Collections.sort(AL1, new Comparator() {@Overridepublic int compare(PersonPoker o1, PersonPoker o2) {if (o1.BigLevel != o2.BigLevel) {if (o1.BigLevel > o2.BigLevel)return 1;elsereturn -1;}return o1.SmallLevel.compareTo(o2.SmallLevel);}});int ans = 0;if (AL1.get(0).BigLevel == BAOZI) {for (int i = 1; i < AL1.size(); i++) {int a[] = AL1.get(i).getPokerColour();if (AL1.get(i).SmallLevel.equals("JLM") && a[0] != a[1] && a[1] != a[2] && a[0] != a[2]) {ans = i;break;}}}System.out.println("第 " + AL1.get(ans).person + " 贏了!");System.out.println("\n重新發牌輸入 Y , 否則輸入 N");sc = new Scanner(System.in);}}}

3.發牌分析:

確認是否發牌輸入游戲人數

發牌方式

方式一:直接隨機  牌色   和   牌面值,出現重復牌,重新隨機方式二:為所有牌確定等級(包括花色 4 * 13 張),隨機等級,出現重復等級重新隨機方式三:將所有牌的牌色  和  牌面值  放進兩個List ,對List進行隨機排序,依次取每個人的牌方式四:在方式二的基礎上 也是放進List , 對List 進行隨機排序, 依次取每個人的牌

發牌方式復雜度和操作難度分析

方式一:人數少時速度較快,人數多時,出現重復牌的概率增加(最壞情況  一直取到重復出現的牌)方式二:速度較第一種略快(但是也會出現方式一的最壞情況),分配等級困難很高,預處理static過程出錯不容易查找方式三:static預處理簡單,優化取消了重復牌出現的可能,確定等級過程稍顯復雜(需要一些小思考)方式四:預處理困難,隨機過程內部時間復雜度不確定(感覺挺高),優點是 確定等級的 直接排序過程 得到了優化

發牌:(選擇方式三)

package Fapai;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.HashSet;import java.util.List;import java.util.Random;import java.util.Set;import Save_Pai.PersonPoker;public class Fapai {private static final int PersonNumber = 17;public static PersonPoker p[] = new PersonPoker[PersonNumber];public static ArrayListPkColour = new ArrayList<>();public static ArrayListPkNumber = new ArrayList<>();static {int cnt = 0;for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13; j++) {PkColour.add(i);}cnt++;}for (int i = 1; i <= 13; i++) {for (int j = 1; j <= public="" static="" boolean="" int="" new="" if="" num=""> 17 || num <= 1){return false;}else{int cnt = 0;for (int i = 0; i < num; i++) {int PC[] = new int[3];int PN[] = new int[3];for (int j = 0; j < 3; j++) {PC[j] = PkColour.get(cnt);PN[j] = PkNumber.get(cnt++);}//System.out.println(PC[0] + " " + PC[1] + " " + PC[2]);//System.out.println(PN[0] + " " + PN[1] + " " + PN[2]);p[i] = new PersonPoker(PC , PN);p[i].person = i+1;}return true;}}}

4.輸出每個人的手牌:

比較簡單的對應轉換輸出,不做詳解

package PrintPoker;import Save_Pai.PersonPoker;public class PrintPoker {public PrintPoker(PersonPoker p) {super();OPT(p);}private void OPT(PersonPoker e) {int[] a;int[] b;a = e.getPokerColour();b = e.getPokerNumber();for (int i = 0; i < 3; i++) {OptColour(a[i]);System.out.print(" ");OptNumber(b[i]);if(i != 2)System.out.print(", ");}System.out.println();}private void OptColour(int x) {if(x == 0){System.out.print("方塊");} else if(x == 1){System.out.print("梅花");} else if(x == 2){System.out.print("紅桃");} else {System.out.print("黑桃");}}private void OptNumber(int x) {if(x == 1){System.out.print("A");} else if(x <= 10){System.out.print(x);} else if(x == 11){System.out.print("J");} else if(x == 12){System.out.print("Q");} else if(x == 13){System.out.print("K");}}}

5.確定發牌等級(最重要的處理步驟):

首先確定手牌的大等級:

豹子 > 同花順 > 同花 > 順子 > 對子 > 單牌

特殊牌:三張不同花色的235不做單獨考慮,后面出現豹子獲勝的人,再特判即可

確定小等級:

最容易的思路就是把同一等級的所有小等級全部按順序編號,但這違背方法三的初衷(取消復雜的小等級確定過程)

通過思考   除了對子    的小牌等級   比較大小  方式比較特殊,其他的牌均相同

對子:先比較對牌的大小,對子牌相同,比較單牌大小

其他等級:A (1)> K(13) > Q(12) > J(11) > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2

因為直接用這種數字比較,大小的概念是很難 確定的,實現起來繁瑣冗雜

可以將13個數字(其中1=A,13=K,12=Q,11=J)

變換為:

11312111098765432

ABCDEFGHIJKLM

這種改寫方式可以直接將牌的大小 用字符串的  compareTo方法進行比較

對子:只需要先以上面表格的方式作為小等級的前兩個字符,其他的不變即可

package PokerLevel;import Save_Pai.PersonPoker;public class PokerLevel {PersonPoker p;private static final int BaoZi = 1;private static final int TongHuaShun = 2;private static final int TongHua = 3;private static final int ShunZi = 4;private static final int DuiZi = 5;private static final int DanZhang = 6;public PokerLevel(PersonPoker p) {super();this.p = p;}public String MakeString(int cek) {char[] a = new char[3];int cnt = 0;char ch = "A";int Number[] = p.getPokerNumber();int CalNum[] = new int[15];for (int i = 0; i < 3; i++) {CalNum[Number[i]]++;}if (cek == 0) {while (CalNum[1] > 0) {a[cnt++] = ch;CalNum[1]--;}for (int i = 13; i > 1; i--) {++ch;while (CalNum[i] > 0) {a[cnt++] = ch;CalNum[i]--;}if (cnt == 3)break;}return new String(a);} else {if (CalNum[1] == 2) {a[0] = a[1] = ch;CalNum[1] = 0;} else {for (int i = 13; i > 1; i--) {++ch;if (CalNum[i] == 2) {a[0] = a[1] = ch;CalNum[i] = 0;break;}}}ch = "A";if(CalNum[1] == 1)a[2] = ch;for(int i = 13 ; i > 1 ; i--){++ch;if(CalNum[i] == 1){a[2] = ch;break;}}return new String(a);}}public int GetBigLevel() {int Colour[] = p.getPokerColour();int Number[] = p.getPokerNumber();int CalCol[] = new int[5];int CalNum[] = new int[15];for (int i = 0; i < 3; i++) {CalCol[Colour[i]]++;}for (int i = 0; i < 3; i++) {CalNum[Number[i]]++;}// 豹子if (isBaoZi(CalNum)) {return BaoZi;}if (isTongHua(CalCol)) {// 同花順if (isShunZi(CalNum)) {return TongHuaShun;}// 同花return TongHua;}// 順子if (isShunZi(CalNum)) {return ShunZi;}// 對子if (isDuiZi(CalNum)) {return DuiZi;}// 單牌return DanZhang;}private boolean isDuiZi(int[] a) {for (int i = 1; i <= 1="" if="" return="" private="" boolean="" for="" int="" i="">= 3; i--) {if (a[i] == 1 && a[i - 1] == 1 && a[i - 2] == 1) {return true;}}return false;}private boolean isTongHua(int a[]) {for (int i = 0; i < 4; i++) {if (a[i] == 3)return true;}return false;}private boolean isBaoZi(int a[]) {for (int i = 13; i >= 1; i--) {if (a[i] == 3) {return true;}}return false;}}

回到主程序:

我們將每個人的手牌JavaBean塞到List里,運用Collections工具類,重寫實現內部類,進行排序

直接獲取第一個人的ID

特判:如果此時獲勝者是 豹子 手牌,則在List內遍歷是否有牌面為235,且三張牌不同花色  的人,如果找到,更改ans存的ID

輸出獲勝者ID

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
亚洲性夜色噜噜噜7777| 91久久久亚洲精品| 欧美日韩成人综合天天影院| 国产综合婷婷| 性欧美videos另类喷潮| 午夜一区二区三视频在线观看 | 欧美午夜精品久久久久久浪潮| 欧美激情乱人伦| 欧美日韩日日夜夜| 亚洲愉拍自拍另类高清精品| 国产精品九色蝌蚪自拍| 久久久久久久97| 99精品国产在热久久婷婷| 国产欧美日韩亚洲一区二区三区| 国产欧美日韩免费| 免费欧美电影| 欧美一区二区大片| 亚洲天堂av图片| 亚洲理论在线观看| 亚洲国产精品成人一区二区| 精品成人免费| 国模精品一区二区三区| 欧美午夜www高清视频| 欧美日韩免费观看一区=区三区| 美女久久一区| 性18欧美另类| 欧美亚洲免费电影| 亚洲天堂免费观看| 亚洲精品国产拍免费91在线| 亚洲区第一页| 亚洲高清一二三区| 国产综合婷婷| 影音先锋久久精品| 国产一区亚洲| 国产欧美在线观看| 国产一区二区精品丝袜| 国产欧美一区二区三区沐欲 | 麻豆久久久9性大片| 欧美不卡一卡二卡免费版| 久久亚洲春色中文字幕久久久| 亚洲制服欧美中文字幕中文字幕| 欧美影院视频| 欧美一级理论性理论a| 亚洲国产精品久久久久| 亚洲美女91| aaa亚洲精品一二三区| 亚洲高清毛片| 亚洲综合视频1区| 亚洲综合色婷婷| 久久中文精品| 欧美日韩国产在线看| 欧美日韩福利视频| 欧美黄色小视频| 国产精品综合色区在线观看| 国产精品伦理| 国产精品夜夜嗨| 国产一区二区你懂的| 国产一区日韩一区| 亚洲久色影视| 亚洲欧美另类国产| 久久精品国产久精国产思思| 欧美美女视频| 国产精品一区久久久| 国产一二三精品| 一区二区冒白浆视频| 亚洲欧美高清| 久久精品亚洲| 国产精品99免费看| 国产一区二区三区久久精品| 在线播放日韩欧美| 午夜一区二区三区在线观看| 久久另类ts人妖一区二区| 欧美fxxxxxx另类| 国产一区二区三区的电影| 亚洲国产精品123| 亚洲无毛电影| 欧美激情综合亚洲一二区| 国产精品一二三四区| 精品91在线| 午夜精彩国产免费不卡不顿大片| 你懂的成人av| 国产麻豆日韩欧美久久| 99re在线精品| 久久尤物视频| 国产精品久久久久久户外露出| 亚洲精品护士| 久久久爽爽爽美女图片| 欧美日韩国产成人在线观看| 亚洲国产成人不卡| 欧美一区二区三区四区在线观看地址 | 欧美四级剧情无删版影片| 国产精品mv在线观看| 99热精品在线| 久久综合色婷婷| 国产精品亚洲欧美| 性做久久久久久久免费看| 欧美激情国产日韩精品一区18| 国产美女高潮久久白浆| 欧美激情一区二区三区在线视频观看 | 99视频精品全部免费在线| 欧美精品在线免费播放| 99热在这里有精品免费| 国产精品久久久久久久第一福利| 午夜精品理论片| 韩国一区二区在线观看| 免费人成精品欧美精品| 日韩视频一区二区在线观看 | 亚洲一区免费网站| 国产伦精品一区二区三区高清 | 欧美二区不卡| 一本色道久久综合亚洲二区三区 | 欧美激情一区二区| 亚洲五月六月| 国产一区自拍视频| 欧美精品一区二区三区蜜臀 | 久久精品亚洲一区二区| 1024日韩| 国产精品日韩一区二区| 久久精品国产免费观看| 亚洲精品美女91| 国产精品视频精品视频| 美女福利精品视频| 亚洲一区久久| 亚洲电影免费在线| 国产精品久久久久久久免费软件| 久久精品av麻豆的观看方式 | 欧美视频中文字幕| 久久久久99精品国产片| av成人免费观看| 国产综合久久| 国产精品va| 欧美高清不卡| 久久精品亚洲| 亚洲免费中文| 日韩一级片网址| 亚洲成人在线视频播放| 国产精品日日摸夜夜摸av| 欧美国产三区| 久久av一区二区三区| 一区二区高清视频| 亚洲欧洲综合另类在线| 国产主播在线一区| 国产精一区二区三区| 欧美日韩国产成人在线免费| 久久精品视频一| 亚洲欧美国产制服动漫| 亚洲肉体裸体xxxx137| 狠狠色伊人亚洲综合网站色| 国产精品高潮视频| 欧美日本免费| 欧美电影在线| 久久综合九色综合欧美就去吻| 亚洲欧美日韩精品| 中文精品一区二区三区| 亚洲精品视频在线看| 亚洲国产毛片完整版 | 久久在线免费视频| 欧美一区二区三区播放老司机 | 久久黄色小说| 亚洲欧美色婷婷| 亚洲午夜激情网页| 99视频精品全国免费| 亚洲国产免费| 尤物yw午夜国产精品视频明星| 国产欧美一区视频| 国产精品日本一区二区| 欧美午夜无遮挡| 国产精品mv在线观看| 欧美视频四区| 欧美午夜久久久| 欧美亚一区二区| 国产精品成人免费视频| 欧美午夜久久久| 国产精品色婷婷| 国产亚洲欧美日韩精品| 韩国av一区二区三区在线观看 | 久久久久久久久蜜桃| 欧美在线视频a| 久久av二区| 久久久久久成人| 久久免费黄色| 免费的成人av| 欧美激情四色| 欧美调教视频| 国产伦一区二区三区色一情| 国产日韩欧美综合一区| 韩国av一区二区三区四区| 伊人久久av导航| 亚洲清纯自拍| 亚洲天堂激情| 欧美伊人精品成人久久综合97| 久久超碰97人人做人人爱| 久久久久成人精品免费播放动漫| 久久久久久久一区二区三区| 久久婷婷国产综合国色天香| 欧美激情国产高清| 国产精品毛片高清在线完整版| 国产欧美日韩视频在线观看| 在线免费观看成人网| 一本色道久久综合亚洲91|