「麻将java算法」麻将计算法
本篇文章给大家谈谈麻将java算法,以及麻将计算法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
谁用java做过麻将
简单的说一下,页面这个没问题。swing。
就是业务逻辑方面的,
业务逻辑我感觉一步一步的来,也不会太难。
首先,分牌,这个设个list链表,里面包含麻将所有的对象,随机分配。
第二出牌,一人一张,设个标记位,4个线程,一个出牌之后改标记位让下一个线程运行。
第三判断,手下判断是否胡了,然后再判断是否杠上,然后判断。。。。。
当然,实际做的过程中会很多未知的问题,慢慢做吧。
其实解决这些未知的问题才是收获最大的地方。
原创干货!麻将平胡算法
此算法基本可以通用于所有麻将的平胡规则,即满足m * ABC + n * AAA + AA(其中m、n可为0)的胡牌公式,红黑字牌也可由此算法演变。
首先,我们要约定每张麻将都可以由一个数字表示,比如11表示一万,12表示二万,21表示一条,22表示二条,31表示一筒,32表示二筒……
即所有牌用两位数表示,表示万条筒的两位数个位为牌点,十位为牌类型,其它表示非字牌的两位数与牌类型相同,以下用一个枚举类定义:
以上定义了各张牌的数字表示,接下来我们分析手牌的存储结构,手牌可以用一个数组表示,数组下标号能除尽10的数组元素为保留位,不用于存储任何数据。举例解释此数组存储牌的数据结构:
0号下标保留位
1~9号下标为万字牌牌点,其对应的数组元素为牌的张数
10号下标保留位
11~19号下标为条字牌牌点,其对应的数组元素为牌的张数
20号下标为保留位
21~29号下标为筒字牌牌点,其对应的数组元素为牌的张数
40~46号下标分别表示东、南、西、北、中、发、白的存储位。
根据以上的定义,则可以根据数组下标获得万条筒字牌的类型和牌点,(下标/10 + 1) 则为字牌类型,(下标%10) 则为字牌点数。
准备工作都做好了,怎么使用上面定义的数据结构实现平胡算法呢?平胡满足m * ABC + n * AAA + AA(其中m、n可为0)的胡牌公式,分析此公式,AA表示一对牌,则算法必然需要分析手牌中是否含有一对牌,ABC表示三张相同类型且连续的牌,AAA表示三张相同类型且牌点也相同的牌。
依据公式,我们用递归思路编写一个平胡胡牌算法(其中包含简单的测试用例):
觉得不错请点赞支持,欢迎留言或进我的个人群855801563领取【架构资料专题目合集90期】、【BATJTMD大厂JAVA面试真题1000+】,本群专用于学习交流技术、分享面试机会,拒绝广告,我也会在群内不定期答题、探讨。
麻将游戏一般是用什么语言开发的,哪部分代码最难实现?
多是C++语言,其他的语言只有能实现,也可以。
最重要也是最难实现的部分,应该是核心玩法的代码,需要考虑周到,仔细架构。
如果你要做,建议找经验丰富的技术公司,像是摩天游科技,专门做地方游戏的,技术经验丰富,基本不会出现太大问题。
麻将游戏的算法(13张牌的那种)
国标麻将规则的番种
88番
1 大四喜 由4副风刻(杠)组成的和牌。不计圈风刻、门风刻、三风刻、碰碰和
2 大三元 和牌中,有中发白3副刻子。不计箭刻
3 绿一色 由23468条及发字中的任何牌组成的顺子、刻五、将的和牌。不计混一色。如无“发”字组成的各牌,可计清一色
4 九莲宝灯 由一种花色序数牌子按1112345678999组成的特定牌型,见同花色任何1张序数牌即成和牌。不计清一色
5 四杠 4个杠
6 连七对 由一种花色序数牌组成序数相连的7个对子的和牌。不计清一色、不求人、单钓
7 十三幺 由3种序数牌的一、九牌,7种字牌及其中一对作将组成的和牌。不计五门齐、不求人、单钓
64番
8 清幺九 由序数牌一、九刻子组成的和牌。不计碰碰和、同刻、无字
9 小四喜 和牌时有风牌的3副刻子及将牌。不计三风刻
10 小三元 和牌时有箭牌的两副刻子及将牌。不计箭刻
11 字一色 由字牌的刻子(杠)、将组成的和牌。不计碰碰和
12 四暗刻 4个暗刻(暗杠)。不计门前清、碰碰和
13 一色双龙会 一种花色的两个老少副,5为将牌。不计平各、七对、清一色
48番
14 一色四同顺 一种花色4副序数相同的顺子,不计一色三节高、一般高、四归一
15 一色四节高 一种花色4副依次递增一位数的刻子不计一色三同顺、碰碰和
32番
16 一色四步高 一种花色4副依次递增一位数或依次递增二位数的顺子
17 三杠 3个杠
18 混幺九 由字牌和序数牌一、九的刻子用将牌组成的和牌。不计碰碰和
24番
19 七对 由7个对子组成和牌。不计不求人、单钓
20 七星不靠 必须有7个单张的东西南北中发白,加上3种花色,数位按147、258、369中的7张序数牌组成没有将牌的和牌。不计五门齐、不求人、单钓
21 全双刻 由2、4、6、8序数牌的刻了、将牌组成的和牌。不计碰碰和、断幺
22 清一色 由一种花色的序数牌组成和各牌。不无字
23 一色三同顺 和牌时有一种花色3副序数相同的顺了。不计一色三节高
24 一色三节高 和牌时有一种花色3副依次递增一位数字的刻了。不计一色三同顺
25 全大 由序数牌789组成的顺了、刻子(杠)、将牌的和牌。不计无字
26 全中 由序数牌456组成的顺子、刻子(杠)、将牌的和牌。不计断幺
27 全小 由序数牌123组成的顺子、刻子(杠)将牌的的和牌。不计无字
16番
28 清龙 和牌时,有一种花色1-9相连接的序数牌
29 三色双龙会 2种花色2个老少副、另一种花色5作将的和牌。不计喜相逢、老少副、无字、平和
30 一色三步高 和牌时,有一种花色3副依次递增一位或依次递增二位数字的顺子
31 全带五 每副牌及将牌必须有5的序数牌。不计断幺
32 三同刻 3个序数相同的刻子(杠)
33 三暗刻 3个暗刻
12番
34 全不靠 由单张3种花色147、258、369不能错位的序数牌及东南西北中发白中的任何14张牌组成的和牌。不计五门齐、不求人、单钓
35 组合龙 3种花色的147、258、369不能错位的序数牌
36 大于五 由序数牌6-9的顺子、刻子、将牌组成的和牌。不计无字
37 小于五 由序数牌1-4的顺子、刻子、将牌组成的和牌。不计无字
38 三风刻 3个风刻
8 番
39 花龙 3种花色的3副顺子连接成1-9的序数牌
40 推不倒 由牌面图形没有上下区别的牌组成的和牌,包括1234589饼、245689条、白板。不计缺一门
41 三色三同顺 和牌时,有3种花色3副序数相同的顺子
42 三色三节高 和牌时,有3种花色3副依次递增一位数的刻子
43 无番和 和牌后,数不出任何番种分(花牌不计算在内)
44 妙手回春 自摸牌墙上最后一张牌和牌。不计自摸
45 海底捞月 和打出的最后一张牌
46 杠上开花 开杠抓进的牌成和牌(不包括补花)不计自摸
47 抢杠和 和别人自抓开明杠的牌。不计和绝张
6 番
48 碰碰和 由4副刻子(或杠)、将牌组成的和牌
49 混一色 由一种花色序数牌及字牌组成的和牌
50 三色三步高 3种花色3副依次递增一位序数的顺子
51 五门齐 和牌时3种序数牌、风、箭牌齐全
52 全求人 全靠吃牌、碰牌、单钓别人批出的牌和牌。不计单钓
53 双暗杠 2个暗杠
54 双箭刻 2副箭刻(或杠)
4 番
55 全带幺 和牌时,每副牌、将牌都有幺牌
56 不求人 4副牌及将中没有吃牌、碰牌(包括明杠),自摸和牌
57 双明杠 2个明杠
58 和绝张 和牌池、桌面已亮明的3张牌所剩的第4张牌(抢杠和不计和绝张)
2 番
59 箭刻 由中、发、白3张相同的牌组成的刻子
60 圈风刻 与圈风相同的风刻
61 门风刻 与本门风相同的风刻
62 门前清 没有吃、碰、明杠,和别人打出的牌
63 平和 由4副顺子及序数牌作将组成的和牌,边、坎、钓不影响平和
64 四归一 和牌中,有4张相同的牌归于一家的顺、刻子、对、将牌中(不包括杠牌)
65 双同刻 2副序数相同的刻子
66 双暗刻 2个暗刻
67 暗杠 自抓4张相同的牌开杠
68 断幺 和牌中没有一、九及字牌
1 番
69 一般高 由一种花色2副相同的顺子组成的牌
70 喜相逢 2种花色2副序数相同的顺子
71 连六 一种花色6张相连接的序数牌
72 老少副 一种花色牌的123、789两副顺子
73 幺九刻 3张相同的一、九序数牌及字牌组成的刻子(或杠)
74 明杠 自己有暗刻,碰别人打出的一张相同的牌开杠:或自己抓进一张与碰的明刻相同的牌开杠
75 缺一门 和牌中缺少一种花色序数牌
76 无字 和牌中没有风、箭牌
77 边张 单和123的3及789的7或1233和3、77879和7都为张。手中有12345和3,56789和6不算边张
78 坎张 和2张牌之间的牌。4556和5也为坎张,手中有45567和6不算坎张
79 单钓将 钓单张牌作将成和
80 自摸 自己抓进牌成和牌
81 花牌 即春夏秋冬,梅兰竹菊,每花计一分。不计在起和分内,和牌后才能计分。花牌补花成和计自摸分,不计杠上开花
计算麻将的番数(C++/Java)
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);
}
}
关于麻将java算法和麻将计算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。