package com.ft.majiang;
import java.util.ArrayList;
import java.util.Collections;
public class MaJiang {
int pai [] = new int[14];
ArrayList<Integer> wan = new ArrayList<Integer>();
ArrayList<Integer> tiao = new ArrayList<Integer>();
ArrayList<Integer> bing = new ArrayList<Integer>();
ArrayList<Integer> feng = new ArrayList<Integer>();
ArrayList<Integer> jiang = new ArrayList<Integer>();
public boolean isHuPai(int pai []){
this.pai = pai;
if(pai.length%2!=0){
return false;
}else{
if(isWan()){
return true;
}
if(isFeng()){
return true;
}
if(isTiao()){
return true;
}
if(isBing()){
return true;
}
}
return false;
}
//首先开始判断万字为将的时候的情况
private boolean isWan(){
jiang.clear();
clear();
initDate(pai);
boolean isWan = isSheng(wan);
if(isWan){
ArrayList<Integer> pengPaiFinish =pengPai(tiao);
ArrayList<Integer> shunFinish =shunPai(pengPaiFinish);
if(shunFinish.size()==0){
ArrayList<Integer> pengPaiEnd =pengPai(bing);
ArrayList<Integer> shunEnd =shunPai(pengPaiEnd);
if(shunEnd.size()==0){
ArrayList<Integer> pengPaiEndL =pengPai(feng);
ArrayList<Integer> shunEndL =shunPai(pengPaiEndL);
if(shunEndL.size()==0){
return true;
}
}
}
}
return false;
}
//判断条子字为将的时候的情况
private boolean isTiao(){
jiang.clear();
clear();
initDate(pai);
boolean isTiao = isSheng(tiao);
if(isTiao){
ArrayList<Integer> pengPaiFinish =pengPai(wan);
ArrayList<Integer> shunFinish =shunPai(pengPaiFinish);
if(shunFinish.size()==0){
ArrayList<Integer> pengPaiEnd =pengPai(bing);
ArrayList<Integer> shunEnd =shunPai(pengPaiEnd);
if(shunEnd.size()==0){
ArrayList<Integer> pengPaiEndL =pengPai(feng);
ArrayList<Integer> shunEndL =shunPai(pengPaiEndL);
if(shunEndL.size()==0){
return true;
}
}
}
}
return false;
}
//判断Bing字为将的时候的情况
private boolean isBing(){
jiang.clear();
clear();
initDate(pai);
boolean isBing = isSheng(bing);
if(isBing){
ArrayList<Integer> pengPaiFinish =pengPai(tiao);
ArrayList<Integer> shunFinish =shunPai(pengPaiFinish);
if(shunFinish.size()==0){
ArrayList<Integer> pengPaiEnd =pengPai(wan);
ArrayList<Integer> shunEnd =shunPai(pengPaiEnd);
if(shunEnd.size()==0){
ArrayList<Integer> pengPaiEndL =pengPai(feng);
ArrayList<Integer> shunEndL =shunPai(pengPaiEndL);
if(shunEndL.size()==0){
return true;
}
}
}
}
return false;
}
//判断feng字为将的时候的情况
private boolean isFeng(){
jiang.clear();
clear();
initDate(pai);
boolean isFeng = isSheng(feng);
if(isFeng){
ArrayList<Integer> pengPaiFinish =pengPai(tiao);
ArrayList<Integer> shunFinish =shunPai(pengPaiFinish);
if(shunFinish.size()==0){
ArrayList<Integer> pengPaiEnd =pengPai(bing);
ArrayList<Integer> shunEnd =shunPai(pengPaiEnd);
if(shunEnd.size()==0){
ArrayList<Integer> pengPaiEndL =pengPai(wan);
ArrayList<Integer> shunEndL =shunPai(pengPaiEndL);
if(shunEndL.size()==0){
return true;
}
}
}
}
return false;
}
//当手里的万字或者条子 有一对为将的时候判断是否能碰完或者顺完,否则不能胡牌
private boolean isSheng(ArrayList<Integer> list){
ArrayList<Integer> listdata = list;
if(listdata.size()>=2){
haveJiang(listdata);
Object obj [] = jiang.toArray();
for(int i = 0;i<listdata.size();i++){
int one = (Integer)obj[i];
int two = (Integer)obj[i+1];
ArrayList<Integer> data = removeJiang(one, two, listdata);
ArrayList<Integer> pengPaiFinish =pengPai(data);
ArrayList<Integer> shunFinish =shunPai(pengPaiFinish);
if(shunFinish.size()==0){
return true;
}
}
}
return false;
}
private void clear(){
wan.clear();
tiao.clear();
bing.clear();
feng.clear();
}
//将不同的牌放进不同的List当中
private void initDate (int []pai){
this.pai = pai;
for(int i=0;i<pai.length;i++){
if(pai[i]>10&&pai[i]<20){
wan.add(pai[i]);
};
if(pai[i]>20&&pai[i]<30){
tiao.add(pai[i]);
}
if(pai[i]>30&&pai[i]<40){
bing.add(pai[i]);
}
if(pai[i]>40&&pai[i]<45){
feng.add(pai[i]);
}
}
paiXu(wan);
paiXu(tiao);
paiXu(bing);
paiXu(feng);
}
//得到所有的将
private void haveJiang(ArrayList<Integer> list){
for(int i=0;i<list.size();i++){
for(int j=i+1;j<list.size();j++){
int pai = list.get(i);
int ohterPai = list.get(j);
if(pai==ohterPai){
jiang.add(pai);
jiang.add(ohterPai);
}
}
}
}
//从牌里面拿出一对将
private ArrayList<Integer> removeJiang(Integer one ,Integer two,ArrayList<Integer> list){
list.remove(one);
list.remove(two);
return list;
}
//杠的牌 在牌型为16张得时候可以进行优先判断
// private ArrayList<Integer> gangPai(ArrayList<Integer> list){
// ArrayList<Integer> listPai = list;
// if(listPai.size()>=4){
// for(int x = 0;x<listPai.size()-3;x++){
// int one = listPai.get(x);
// int two = listPai.get(x+1);
// int three = listPai.get(x+2);
// int four = listPai.get(x+3);
// if(one==two&&two==three&&three==four){
// listPai.remove(x);
// listPai.remove(x+1);
// listPai.remove(x+2);
// listPai.remove(x+3);
// }
// }
// gangPai(listPai);
// }
// return listPai;
// }
//碰的牌
private ArrayList<Integer> pengPai(ArrayList<Integer> list){
ArrayList<Integer> listPai = new ArrayList<Integer>();
listPai = list;
if(listPai.size()>=3){
for(int i = 0 ;i<listPai.size()-2;i++){
Object obj [] = listPai.toArray();
int one = (Integer)obj[i];
int two = (Integer)obj[1+i];
int three = (Integer)obj[2+i];
if(one==two&&two==three){
listPai.remove(2+i);
listPai.remove(1+i);
listPai.remove(0+i);
pengPai(listPai);
}
}
}
return listPai;
}
//顺牌
private ArrayList<Integer> shunPai(ArrayList<Integer> list){
ArrayList<Integer> listPai = new ArrayList<Integer>();
listPai = list;
if(listPai.size()>=3){
Object obj [] = listPai.toArray();
for(int i = 0;i<listPai.size();i++){
for(int j = 1;j<listPai.size();j++){
for(int x = 2;x<listPai.size();x++){
int one = (Integer)obj[i];
int two = (Integer)obj[j];
int three = (Integer)obj[x];
if(one+1==two&&two+1==three&&three-2==one){
listPai.remove(x);
listPai.remove(j);
listPai.remove(i);
shunPai(listPai);
}
}
}
}
}
return listPai;
}
//排序
private void paiXu(ArrayList<Integer> list){
Collections.sort(list);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MaJiang.zip (7个子文件)
MaJiang
.project 383B
bin
com
ft
majiang
Test.class 870B
MaJiang.class 6KB
.settings
org.eclipse.jdt.core.prefs 598B
src
com
ft
majiang
Test.java 333B
MaJiang.java 8KB
.classpath 301B
共 7 条
- 1
资源评论
一个没出息的程序员
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功