简单的说一下,页面这个没问题。swing。
成都创新互联专注于田家庵企业网站建设,自适应网站建设,商城开发。田家庵网站建设公司,为田家庵等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务
就是业务逻辑方面的,
业务逻辑我感觉一步一步的来,也不会太难。
首先,分牌,这个设个list链表,里面包含麻将所有的对象,随机分配。
第二出牌,一人一张,设个标记位,4个线程,一个出牌之后改标记位让下一个线程运行。
第三判断,手下判断是否胡了,然后再判断是否杠上,然后判断。。。。。
当然,实际做的过程中会很多未知的问题,慢慢做吧。
其实解决这些未知的问题才是收获最大的地方。
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
String string=null;
Scanner cin = new Scanner(System.in);
while (cin.hasNext()){
string=cin.next();
}
String str[]=string.split(",");
int i=0;
int count=0;
if(str.length==7){
count=count+2;
}
else{
for(i=0;istr.length;i++){
if(str[i].length()==6str[i].charAt(0)=='1'str[i].charAt(2)=='2'
str[i].charAt(4)=='3'str[i].charAt(1)=='T'
str[i].charAt(3)=='T'str[i].charAt(5)=='T'){
count=count+1;
}
else if(str[i].length()==8){
count=count+2;
}
}
}
System.out.println(count);
}
}
1、平胡这是所有麻将胡牌牌型中胡的最多的没有之一,牌型组成为将对、顺子与刻子,在所有胡牌牌型中,正是因为去组牌难度小,因此很多玩家都会选择这种牌型胡牌。
2、碰碰胡胡牌的牌型要求手中的麻将牌全部是刻子加一个将对,需要注意的一点是玩家可以进行碰和杠操作,但是不允许吃牌,一旦吃牌则不能组此胡牌牌型。
3、七对这种牌型要求玩家手中的麻将牌全部是对子,并且所有的对子都在手中持有,在整个过程中不能进行碰和杠操作。
4、清一色胡牌的时候手中所有的麻将牌由同一种花色的牌组成,同时要满足基本胡牌牌型要求。
5、混一色胡牌的时候手中所有的牌只存在两种情况,一种麻将牌同一种花色,另外一种是东南西北中发白,两种牌混合组成的胡牌牌型。
6、大小三元胡牌的时候手中的中发白如果是三个刻子的牌型则称之为大三元,如果三张中有一个是将对则称之为小三元。
胡牌公式详情如下。
n*AAA+m*ABC+DD。AAA就是三个一样的牌,ABC就是顺子,DD就是对子。mn可以为0,加起来一共14张牌即为和牌,少任何一张即为听牌。
当m=0且n=0时,此时和牌的牌型就是7小对,7个对子少一张牌,独听那张单牌。当n=0时,m=4,除了1个对子外有4个顺子,此时和牌的牌型属于平和,是较为普通的牌型。
当m=0时,n=4,除了1个对子外有4个刻子,此时听牌一般听两个对子,摸到其中一个对子的牌,凑足4个刻子,即可和牌。刻子可以是碰来的,也可以是摸来的,如果都是碰来的,就叫碰碰和。n和m都不为0时,n+m=4,除特殊情况外,基本属于平和的状态。
麻将,四人骨牌博戏,流行于华人文化圈中。起源于中国,粤港澳及闽南地区俗称麻雀。麻将是由中国古人发明的博弈游戏,娱乐用具,一般用竹子、骨头或塑料制成小长方块,上面刻有花纹或字样。
北方麻将每副136张牌。南方麻将一般为144张牌,添加了春,夏,秋,冬,与梅,竹,兰,菊八张花牌。也有一些地方的麻将,另再加上聚宝盆,财神,老鼠,猫各1张牌,与百搭4张牌,总计为152张牌。
麻将 ,古人发明的一种博弈游戏,一般用竹子、骨头或塑料制成的小长方块,上面刻有花纹或字样,麻将牌实际上是一种纸牌与骨牌的结合体,那么你知道麻将胡牌公式吗?我就给大家解答一下,希望对大家有所帮助,欢迎阅读!
目录
麻将胡牌公式
麻将有哪几种互动形式
麻将胡牌方式
麻将胡牌公式
n×AAA(刻子)+m×ABC(顺子)+DD(将牌)就可以和了,m或n可以等于0。
〈〈〈
麻将有哪几种互动形式
1.吃牌:只能吃上家打的牌,比如:上家打了4筒,你有能搭档上4筒的,比如345,234,456均可以吃;
2.碰牌:你有一对发财,其他人打了发财,你就可以碰,碰后不抓牌,直接打掉手里的一张牌;
3.明杠:手里有三个发财,其他人打来发财,你就可以杠,从杠底抓一张牌,然后再出牌;
4.暗杠:手里凑齐四个发财,就可以暗杠,从杠底抓一张牌,然后再出牌;
5.杠底:庄家第一次抓牌时剩余的牌,从右往左抓;
6.听牌:剩4张、7张、10张、13张时,当你将你手中的牌都凑成了有用的牌,只差一张牌就能胡了,此时的状态就是听牌;
7.胡牌:这个是最重要的!!胡牌必须有一副对才可以。比如手里生四张牌了 3、4、5筒,还有个1万,此时你就胡1万;如果是一对2条,还有3、4筒,此时你胡2、5筒。如果是一对红中、和一对发财,此时胡红中和发财;如果只剩一张红中,那么就胡红中。
〈〈〈
麻将胡牌方式
1、大四喜由4副风刻 ( 杠 ) 组成的和牌。不计圈风刻、门风刻、三风刻、碰碰和
2、大三元和牌中,有中发白3副刻子。不计箭刻
3、绿一色由 23468 条及发字中的任何牌组成的顺子、刻五、将的和牌。不计混一色。如无“发”字组成的各牌,可计清一色
4、九莲宝灯由一种花色序数牌子按 1112345678999 组成的特定牌型,见同花色任何1张序数牌即成和牌。不计清一色
5、四杠4个杠
6、连七对由一种花色序数牌组成序数相连的7个 对子 的和牌。不计清一色、不求人、单钓
7、十三幺由 3 种序数牌的一、九牌, 7 种字牌及其中一对作将组成的和牌。不计五门齐、不求人、单钓64番
8、清幺九由序数牌一、九刻子组成的和牌。不计碰碰和、同刻、无字。
〈〈〈
麻将胡牌的万能公式相关 文章 :
★ 关于麻将胡牌的所有牌型大全(2)
★ 四川成都麻将胡牌种类和计番规则
★ 钢琴左手伴奏技巧
★ 高考地理万能公式
★ 必背万能政治答题公式模板
★ 小学语文阅读理解答题实用万能公式
★ 高一必修2政治大题答题方法与万能公式
★ 小升初语文万能答题公式与答题技巧
★ 中考政治万能答题公式
★ 高中政治必备万能公式
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = ""; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();
以前我写了一个判断麻将是否胡牌的算法,不过不支持百搭。最近有一个朋友问我,如何有百搭,算法如何写。我写了一个,贴出来,让网友看看。
算法输入: 整数数组 a[0..n-1]表示一手牌,其中,n 是牌的张数,比如 14。
牌的编码可自定,比如: 101-109 表示一万到九万,
201-209表示一条到九条,
301-309表示一筒到九筒,
411,421,431,441,451,461,471表示东南西北中发白,
500表示百搭。
算法预处理:
若 n 模 3不等于 2,直接输出:牌数不对,是相公,算法结束。否则:
把百搭删除,把剩下的普通牌进行排序:
int i,m;
m=0;
for (i=0;in;i++)
if (a[i]不是百搭) a[m++]=a[i]; // m 就是普通牌的张数
把 a 中前 m 个元素进行排序;
随后,我把 a 看成左、中、右三段,其中,左侧段表示“成牌区”,即:它们由刻、顺组成;
中段表示试探区,算法要重点处理它们;而右侧段则是“杂牌”区,即:它们由非刻非顺组成。
在算法预处理后,显然,a 的左段长度为0,中段长度是m,右段长度是0,调用下面的“理牌”算法:
LiPai(a,0,m,0,n-m);
其中,n-m是指百搭的张数。
理牌算法:
void LiPai(int a[],int LeftCount,int MidCount,int RightCount,int CountOfBaiDa)
{
if (MidCount3) // 试探区已不足 3 张,理牌过程结束,进入“理杂牌”阶段
{
调用测试算法; // 见后文
}
else // 试探区至少 3 张,可以试着从中取出刻子和顺子
{
int * p=a[LeftCount]; // 让 p 指向试探区首张
int x=p[0]; // 取出试探区首张
if (p[1]==x p[2]==x) // 发现一个刻子
{
LiPai(a,LeftCount+3,MidCount-3,RightCount,CountOfBaiDa); // 把刻子放到成牌区,递归地调用理牌算法
}
在 p[0],p[1],...p[MidCount-1] 中寻找 x+1 和 x+2;
if (找到)
{
把 x,x+1,x+2 放入 p[0],p[1],p[2];
把剩下的牌放入 p[3],p[4],...,p[MidCount-1]中;
LiPai(a,LeftCount+3,MidCount-3,RightCount,CountOfBaiDa); // 把顺子放到成牌区,递归地调用理牌算法
对p[0],p[1],...,p[MidCount-1] 排序; // 恢复原样
}
让 p[0],p[1],...p[MidCount-1] 循环左移一次; // 这样,X 就成为杂牌区左边的元素了
LiPai(a,LeftCount,MidCount-1,RightCount+1,CountOfBaiDa); // 把x放入杂牌区,递归地调用理牌算法
让 p[0],p[1],...p[MidCount-1] 循环右移一次; // 这样,X 又回到试探区最左侧了
}
上述递归算法的终止条件是 MidCount3,当该条件满足时,调用下面算法(即上文提到的测试算法)
杂牌总张数=MidCount+RightCount; // 不足 2 张的中段,实际上也是杂牌
if (CountOfBaiDa==0) // 如果没有百搭
{
if (杂牌总张数==2 两张杂牌相同) // 杂牌只能是一个对子,它将是麻将头
{
输出一个胡牌方案:刻、顺是 a[0],a[1],...,a[LeftCount-1],麻将头(对子)是 剩下的两张杂牌;
}
}
else // 如果有百搭, 让一张百搭配2张杂牌
{
if (杂牌总张数-2*CountOfBaiDa=2) // 配完之后,剩下的牌数若不超过 2,则有希望胡牌,需要进一步探测
{
申请数组 b[];
把 a[LeftCount],a[LeftCount+1],...,a[m-1] 放入 b[0],b[1],...,b[MidCount+RightCount-1] 中;
把b[]排序;
LiZaPai(a,LeftCount,b,0,MidCount+RightCount,0,CountOfBaiDa); // 总杂牌区也被划分成 3 段:左段 中段 右段,见下文
释放b[];
}
}
“理杂牌”LiZaPai(...) 算法,与普通理牌算法类似,不过,它的目标是理出对子或搭子。它也把待理区划分成 3 段:
左段:成对/搭区
中段:待测区
右段:杂牌区
void LiZaPai(int a[],int OKCount,int b[],int LeftCount,int MidCount,int RightCount,int CountOfBaiDa) // OKCount 是刻子/顺子的张数,在 a 的最左侧
{
if (MidCount2) // 待测区不足 2 张,
{
调用试配算法; // 见下文
}
else
{
int * p=b[LeftCount]; // 让 p 指向试探区;
int x=p[0]; // 取出首张
if (x==p[1]) // 找到一个对子
{
LiZaPai(a,OKCount,b,LeftCount+2,MidCount-2,RightCount,CountOfBaiDa); // 递归地求解
}
在 p[1],p[2],...p[MidCount-1] 中寻找 x+1;
if (找到)
{
把 x,x+1 放入 p[0],p[1];
把剩下的牌放入 p[2],p[3],...,p[MidCount-1];
LiZaPai(a,OKCount,b,LeftCount+2,MidCount-2,RightCount,CountOfBaiDa); // 递归地求解
把 p[0],p[1],...,p[MidCount-1] 排序;
}
在 p[1],p[2],...p[MidCount-1] 中寻找 x+2;
if (找到)
{
把 x,x+2 放入 p[0],p[1];
把剩下的牌放入 p[2],p[3],...,p[MidCount-1];
LiZaPai(a,OKCount,b,LeftCount+2,MidCount-2,RightCount,CountOfBaiDa); // 递归地求解
把 p[0],p[1],...,p[MidCount-1] 排序;
}
让 p[0],p[1]....,p[MidCount-1] 循环左移; // x 称到杂牌区;
LiZaPai(a,OKCount,b,LeftCount,MidCount-1,RightCount+1,CountOfBaiDa); // 递归地求解
让 p[0],p[1]....,p[MidCount-1] 循环右移; // x 回到首位
}
}
试配算法如下:
杂牌总数=MidCount+RightCount; // 此时,试探区成了杂牌区
if (杂牌总数==0) // 全是对子/搭子
{
for (i=0;iLeftCount;i+=2) // 寻找对子
if (b[i]==b[i+1]) // 找到一个对子, 它是麻将头
{
if (LeftCount/2-1=CountOfBaiDa) // 剩下的对子搭子必须全部由百搭配成刻/顺
{
输出一个胡牌方案:刻/顺是 a[0],a[1],...,a[OKCount-1],以及 b[0]到b[LeftCount-1] 中除去 i,i+1 两元素后, 剩下的对/搭与百搭配成的刻/顺,以及剩下的百搭组成的刻子;
麻将头是是 b[i],b[i+1];
}
}
// 现在,必须用两个百搭配成麻将头, 所有搭子要由剩下的百搭配成刻/顺
if (CountOfBaiDa=2 LeftCount/2=CountOfBaiDa-2)
{
输出一个胡牌方案:刻/顺是 a[0],a[1],...,a[OKCount-1],以及 b[0]到b[LeftCount-1] 每个对/搭与百搭配成的刻/顺,以及剩下的百搭组成的刻子;
麻将头是百搭,百搭;
}
}
else
if (杂牌总数==1) // 只有一张杂牌, 此时,必须用一个百搭与此杂牌配成麻将头
{
if (CountOfBaiDa=1 LeftCount/2=CountOfBaiDa-1) // 用一个百搭与杂牌配成对子,而对子/搭子的副数不能比剩下的百搭数多, 这样就可以胡牌
{
输出一个胡牌方案:刻子/顺子是 a[0],a[1],...,a[OKCount-1],以及 b[0],b[1],百搭,b[2],b[3],百搭,...b[LeftCount-2],b[LeftCount-1],百搭,以及
配完对子、刻/顺后剩下的百搭组成的刻子;
麻将头是:杂牌,百搭。
}
}
else // 有2张或以上杂牌,不胡,因为,最多只能用一个百搭+一张杂牌形成麻将头
{
}
上面算法我用 VC++ 实现,运算速度很快,一般耗时 0.04368ms。我的 CPU:2.3GHz ,i7
望采纳,谢谢