斗地主前端核心算法有以下四个
1:计算牌型
2:牌型之间的比较大小
3:是否显示要不起按钮
4:提示出牌AI
今天更新计算牌型
下面是代码(抄袭了网上一部分)
这是牌的所有类型 我这边四带二单 ,四带二个对子合成一个,四带二个对子不算牌型 所有四带2用FourWithSingle 结构是protobuf类型的
//单张1,对子2,三张3,三带单4,三带对5,单顺6,双顺7,飞机8,飞机带单9,飞机带双10,四带两单11,四带对12,炸弹13,火箭14
enum DDZ_POKER_TYPE {
DDZ_PASS = 0; //过牌,不出
SINGLE = 1;
TWIN = 2;
TRIPLE = 3;
TRIPLE_WITH_SINGLE = 4;
TRIPLE_WITH_TWIN = 5;
STRAIGHT_SINGLE = 6;
STRAIGHT_TWIN = 7;
PLANE_PURE = 8;
PLANE_WITH_SINGLE = 9;
PLANE_WITH_TWIN = 10;
FOUR_WITH_SINGLE = 11;
FOUR_WITH_TWIN = 12;
FOUR_BOMB = 13;
KING_BOMB = 14;
}
计算牌型代码 cards 是泛型 你可以修改为ArrayList
using Pb;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 出牌规则
/// </summary>
public class DDZCardRule
{
/// <summary>
/// 是否是单
/// </summary>
/// <param name="cards"></param>
/// <returns></returns>
public static bool IsSingle(List<int> cards)
{
if (cards.Count == 1)
return true;
else
return false;
}
/// <summary>
/// 是否是对子
/// </summary>
/// <param name="cards"></param>
/// <returns></returns>
public static bool IsDouble(List<int> cards)
{
if (cards.Count == 2)
{
if (cards[0] == cards[1])
return true;
}
return false;
}
/// <summary>
/// 是否是顺子
/// </summary>
/// <param name="cards"></param>
/// <returns></returns>
public static bool IsStraight(List<int> cards)
{
if (cards.Count < 5 || cards.Count > 12)
return false;
for (int i = 0; i < cards.Count - 1; i++)
{
int w = cards[i];
if (cards[i + 1] - w != 1)
return false;
//不能超过A
if (w > 12 || cards[i + 1]> 12)
return false;
}
return true;
}
/// <summary>
/// 是否是双顺子
/// </summary>
/// <param name="cards"></param>
/// <returns></returns>
public static bool IsDoubleStraight(List<int> cards)
{
if (cards.Count < 6 || cards.Count % 2 != 0)
return false;
for (int i = 0; i < cards.Count; i += 2)
{
if (cards[i + 1] != cards[i])
return false;
if (i < cards.Count - 2)
{
if (cards[i + 2] - cards[i] != 1)
return false;
//不能超过A
if (cards[i] > 12 || cards[i + 2] > 12)
return false;
}
}
return true;
}
/// <summary>
/// 三不带
/// </summary>
/// <param name="cards"></param>
/// <returns></returns>
public static bool IsOnlyThree(List<int> cards)
{
if (cards.Count % 3 != 0)
return false;
if (cards[0] != cards[1])
return false;
if (cards[1] != cards[2])
return false;
if (cards[0] != cards[2])
return false;
return true;
}
/// <summary>
/// 三带一
/// </summary>
/