zoukankan      html  css  js  c++  java
  • 斗地主特殊牌型定义

    游戏内一些牌型的定义,不做过多解释代码很详细,哪有不懂可以留言询问

    public enum DDZPaiType {
    HuoJian("火箭",30,"HuoJian"),
    ZhaDan("炸弹",20,"ZhaDan"),
    DanPai("单牌",10,"DanPai"),
    DuiPai("对牌",10,"DuiPai"),
    SanZhangPai("三张牌",10,"SanZhangPai"),
    SanDaiYi("三带一",10,"SanDaiYi"),
    SanDaiEr("三带二",10,"SanDaiEr"),
    DanShun("单顺",10,"DanShun"),
    ShuangShun("双顺",10,"ShuangShun"),
    SanShun("三顺",10,"SanShun"),
    FeiJiDaiDanPai("飞机带两单",10,"FeiJiDaiDanPai"),
    FeiJiDaiDuiZi("飞机带两对",10,"FeiJiDaiDuiZi"),
    SiDaiLiangDan("四带两单",10,"SiDaiLiangDan"),
    SiDaiLiangDui("四带两对",10,"SiDaiLiangDui");
    private String name;
    private String nickName;
    private int weight;
    private int size;

    DDZPaiType(String name, int weight,String nickName) {
    this.name = name;
    this.weight = weight;
    this.nickName = nickName;
    }

    @Override
    public String toString() {
    return name;
    }

    public String getName() {
    return name;
    }

    public int getWeight() {
    return weight;
    }
    public int getSize() {
    return size;
    }
    public void setSize(int size) {
    this.size = size;
    }

    public String getNickName() {
    return nickName;
    }

    public void setNickName(String nickName) {
    this.nickName = nickName;
    }

    /**
    * 获取牌的类型
    *@param pokers
    *@return
    *@return
    * 2018年1月27日
    * @throws ZJHPokerException
    */
    public static DDZPaiType getPaiType(DDZPai ddzPai) throws DDZPokerException{
    List<DDZPoker> pokers = ddzPai.getDdzPokers();
    Collections.sort(pokers);
    //Collections.sort(pokers);
    if(isHuoJian(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return HuoJian;
    }
    if(isZhaDan(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return ZhaDan;
    }
    if(isDanPai(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return DanPai;
    }
    if(isDuiZi(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return DuiPai;
    }
    if(isSanZhangPai(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return SanZhangPai;
    }
    if(isSanDaiYi(pokers,ddzPai)){
    return SanDaiYi;
    }
    if(isSanDaiEr(pokers,ddzPai)){
    return SanDaiEr;
    }
    if(isDanShun(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return DanShun;
    }
    if(isShuangShun(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return ShuangShun;
    }
    if(isSanShun(pokers)){
    ddzPai.setDdzPoker(pokers.get(0));
    return SanShun;
    }
    if(isFeiJiDaiLiangDan(pokers,ddzPai)){
    return FeiJiDaiDanPai;
    }
    if(isFeiJiDaiLiangDui(pokers, ddzPai)){
    return FeiJiDaiDuiZi;
    }
    if(isSiDaiLiangDan(pokers, ddzPai)){
    return SiDaiLiangDan;
    }
    if(isSiDaiLiangDui(pokers, ddzPai)){
    return SiDaiLiangDui;
    }
    return null;
    }
    //单顺
    private static boolean isDanShun(List<DDZPoker> pokers) {
    if(pokers.size()>=5){
    if(pokers.get(0).getSize()>=15){
    return false;
    }
    for (int i =0;i<pokers.size();i++) {
    if(i<pokers.size()-1&&pokers.get(i).getSize()-pokers.get(i+1).getSize()!=1){
    return false;
    }
    }

    return true;
    }
    return false;
    }
    //四带两对
    private static boolean isSiDaiLiangDui(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()==8){
    int count1 = 0;
    int count2 = 0;
    DDZPoker ddzPoker = new DDZPoker();
    for (int i =0;i<pokers.size();i++) {
    int num = 0;
    for (int j =0;j<pokers.size();j++) {
    if(pokers.get(j).getPokerNum()==pokers.get(i).getPokerNum()){
    num++;
    }
    }
    if(num==4){
    ddzPoker = pokers.get(i);
    count1++;
    }
    if(num==2){
    count2++;
    }
    }
    if(count1==4 && count2==4){
    ddzPai.setDdzPoker(ddzPoker);
    return true;
    }
    }
    return false;
    }

    //四带两单
    private static boolean isSiDaiLiangDan(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()==6){
    int count1 = 0;
    DDZPoker ddzPoker = new DDZPoker();
    for (int i =0;i<pokers.size();i++) {
    int num = 0;
    for (int j =0;j<pokers.size();j++) {
    if(pokers.get(j).getPokerNum()==pokers.get(i).getPokerNum()){
    num++;
    }
    }
    if(num==4){
    ddzPoker = pokers.get(i);
    count1++;
    }
    }
    if(count1==4){
    ddzPai.setDdzPoker(ddzPoker);
    return true;
    }
    }
    return false;
    }

    //飞机带对子
    private static boolean isFeiJiDaiLiangDui(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()>=10&&pokers.size()%5==0){
    int count1 = 0;
    int count2 = 0;
    List<DDZPoker> ddzPokers = new ArrayList<DDZPoker>();
    for (int i =0;i<pokers.size();i++) {
    int num = 0;
    for (int j =0;j<pokers.size();j++) {
    if(pokers.get(j).getPokerNum()==pokers.get(i).getPokerNum()){
    num++;
    }
    }
    if(num==3){
    count1++;
    ddzPokers.add(pokers.get(i));
    }
    if(num==2){
    count2++;
    }
    }
    Collections.sort(ddzPokers);
    if(count1==(pokers.size()/5)*3 && count2==(pokers.size()/5)*2
    &&ddzPokers.get(0).getSize()<15 && 
    ddzPokers.get(0).getSize()-ddzPokers.get(ddzPokers.size()-1).getSize()
    == (pokers.size()/5)-1){
    ddzPai.setDdzPoker(ddzPokers.get(0));
    return true;
    }
    }
    return false;
    }

    //飞机带单牌
    private static boolean isFeiJiDaiLiangDan(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()>=8&&pokers.size()%4==0){
    int count = 0;
    List<DDZPoker> ddzPokers = new ArrayList<DDZPoker>();
    for (int i =0;i<pokers.size();i++) {
    int num = 0;
    for (int j =0;j<pokers.size();j++) {
    if(pokers.get(j).getPokerNum()==pokers.get(i).getPokerNum()){
    num++;
    }
    }
    if(num==3){
    count++;
    ddzPokers.add(pokers.get(i));
    }
    }
    //四带两对的判定
    if(ddzPokers.size() > 0 &&ddzPokers.get(0).getSize()<15){
    if(count==(pokers.size()/4)*3){
    Collections.sort(ddzPokers);
    if(ddzPokers.get(0).getSize()-ddzPokers.get(ddzPokers.size()-1).getSize()==(pokers.size()/4-1)){
    ddzPai.setDdzPoker(ddzPokers.get(0));
    return true;
    }else{
    return false;
    }
    }
    }
    }
    return false;
    }

    //三顺
    private static boolean isSanShun(List<DDZPoker> pokers) {
    if(pokers.size()%3==0&&pokers.size()>=6){
    for (int i =0;i<pokers.size();i=i+3) {
    if(pokers.get(i).getPokerNum()!=pokers.get(i+2).getPokerNum()){
    return false;
    }
    }
    if(pokers.get(0).getSize()>=15){
    return false;
    }else{
    if(pokers.get(0).getSize()-pokers.get(pokers.size()-1).getSize()==(pokers.size()/3)-1){
    return true;
    }
    }
    }
    return false;
    }

    //双顺
    private static boolean isShuangShun(List<DDZPoker> pokers) {
    if(pokers.size()%2==0&&pokers.size()>=6){
    for (int i =0;i<pokers.size();i=i+2) {
    if(pokers.get(i).getPokerNum()!=pokers.get(i+1).getPokerNum()){
    return false;
    }
    }
    if(pokers.get(0).getSize()>=15){
    return false;
    }else{
    if(pokers.get(0).getSize()-pokers.get(pokers.size()-1).getSize()==(pokers.size()/2)-1){
    return true;
    }
    }
    }
    return false;
    }

    //三带二
    private static boolean isSanDaiEr(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()==5&&pokers.get(0).getPokerNum() ==pokers.get((pokers.size()-3)).getPokerNum()&&
    pokers.get(3).getPokerNum() ==pokers.get((4)).getPokerNum()){
    ddzPai.setDdzPoker(pokers.get(0));
    return true;
    }
    if(pokers.size()==5&&pokers.get(2).getPokerNum() ==pokers.get((pokers.size()-1)).getPokerNum()&&
    pokers.get(0).getPokerNum() ==pokers.get((1)).getPokerNum()){
    ddzPai.setDdzPoker(pokers.get(2));
    return true;
    }
    return false;
    }

    //三带一
    private static boolean isSanDaiYi(List<DDZPoker> pokers,DDZPai ddzPai) {
    if(pokers.size()==4&&pokers.get(0).getPokerNum() ==pokers.get((pokers.size()-2)).getPokerNum()){
    ddzPai.setDdzPoker(pokers.get(0));
    return true;
    }
    if(pokers.size()==4&&pokers.get(1).getPokerNum() ==pokers.get((pokers.size()-1)).getPokerNum()){
    ddzPai.setDdzPoker(pokers.get(1));
    return true;
    }
    return false;
    }

    //三张牌
    private static boolean isSanZhangPai(List<DDZPoker> pokers) {
    if(pokers.size()==3&&pokers.get(0).getPokerNum() ==pokers.get((pokers.size()-1)).getPokerNum() ){
    return true;
    }
    return false;
    }

    //对子
    private static boolean isDuiZi(List<DDZPoker> pokers) {
    if(pokers.size()==2&&pokers.get(0).getPokerNum() ==pokers.get((pokers.size()-1)).getPokerNum() ){
    return true;
    }
    return false;
    }
    //单牌
    private static boolean isDanPai(List<DDZPoker> pokers) {
    if(pokers.size()==1){
    return true;
    }
    return false;
    }
    //炸弹
    private static boolean isZhaDan(List<DDZPoker> pokers) {
    if(pokers.size()==4&&pokers.get(0).getPokerNum() ==pokers.get((pokers.size()-1)).getPokerNum() ){
    return true;
    }
    return false;
    }
    //王炸
    private static boolean isHuoJian(List<DDZPoker> pokers) {
    if(pokers.size()==2&&pokers.get(0).getPokerNum() ==PokerNum.P_DAWANG &&pokers.get(pokers.size() - 1).getPokerNum() ==PokerNum.P_XIAOWANG ){
    return true;
    }
    return false;
    }
    //测试方法
    public static void main(String [] args ){
    List<DDZPoker> pokers = new ArrayList<DDZPoker>();
    // pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_J)));
    // pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_Q)));
    // pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_10)));
    // pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_A)));
    // pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_K)));

    // pokers.add(new DDZPoker(new Poker(PokerColorType.WANG, PokerNum.P_DAWANG)));
    // pokers.add(new DDZPoker(new Poker(PokerColorType.WANG, PokerNum.P_XIAOWANG)));

    pokers.add(new DDZPoker(new Poker(PokerColorType.MEI_HUA, PokerNum.P_4)));
    pokers.add(new DDZPoker(new Poker(PokerColorType.MEI_HUA, PokerNum.P_5)));
    pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_6)));
    pokers.add(new DDZPoker(new Poker(PokerColorType.MEI_HUA, PokerNum.P_7)));
    pokers.add(new DDZPoker(new Poker(PokerColorType.FANG_KUAI, PokerNum.P_8)));

    Collections.sort(pokers);
    DDZPai ddzPai = new DDZPai();
    boolean flage = isDanShun(pokers);
    System.out.println(ddzPai.toString());
    for(int i = 0 ; i < pokers.size(); i++){
    DDZPoker poker = pokers.get(i);
    System.out.println(poker.getSize());

    }
    System.out.println(flage);
    }

    }

  • 相关阅读:
    20170602
    使用布局规划页面
    商品的删除
    修改页面的 修改图片
    商品修改
    引入行高亮显示
    添加一个时间插件: 1.把插件放到 public目录 下 datetimepicker
    排序,搜索 代码
    搜索
    翻页代码,商品列表页;
  • 原文地址:https://www.cnblogs.com/scll/p/8366697.html
Copyright © 2011-2022 走看看