protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            int[] counts = { -3, -1, -1, -1, -1, -1, -1, -1, -3 };
            for (int i = 0; i < tiles.Count; i++)
            {
                counts[(tiles[i].BaseTile as NumberTile).Number - 1]++;
            }
            int val = 0;

            for (int i = 0; i < 9; i++)
            {
                val |= counts[i];
            }

            if (val != 1)
            {
                return(false);
            }
            int extraNumber = Array.IndexOf(counts, 1) + 1;
            var extraTile   = tiles.Added.BaseTile as NumberTile;

            if (extraTile.Number == extraNumber)
            {
                result.Add(YakuValue.FromFullYaku(this, "纯正九莲宝灯", 1));
            }
            else
            {
                result.Add(YakuValue.FromFullYaku(this, "九莲宝灯", 1));
            }
            return(true);
        }
 protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
 {
     if (groups.PungList.Any(g => !(g is Gan)))
     {
         return(false);
     }
     result.Add(YakuValue.FromFullYaku(this, "四杠子", 1));
     return(true);
 }
 protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
 {
     if (groups.Any(g => !g.Key.IsTerminal))
     {
         return(false);
     }
     result.Add(YakuValue.FromFullYaku(this, "清老头", 1));
     return(true);
 }
		protected override bool Test(ICollection<YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env) {
			if (!TestRon(tiles, env)) return false;

			if (tiles.HandTiles.Take(13).Any(t => t.BaseTile == tiles.Added.BaseTile)) {
				result.Add(YakuValue.FromFullYaku(this, "国士无双十三面", 1));
			} else {
				result.Add(YakuValue.FromFullYaku(this, "国士无双", 1));
			}
			return true;
		}
示例#5
0
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            const KanjiTile.Kanji check = KanjiTile.Kanji.东 | KanjiTile.Kanji.南 | KanjiTile.Kanji.西 | KanjiTile.Kanji.北;

            if (groups.PungList.Any(g => !(g.Key is KanjiTile t) || (t.Value & check) == 0))
            {
                return(false);
            }
            result.Add(YakuValue.FromFullYaku(this, "大四喜", 1));
            return(true);
        }
示例#6
0
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            const KanjiTile.Kanji check = KanjiTile.Kanji.白 | KanjiTile.Kanji.发 | KanjiTile.Kanji.中;
            int count = groups.PungList.Count(g => g.Key is KanjiTile t && (t.Value & check) != 0);

            if (count < 3)
            {
                return(false);
            }

            result.Add(YakuValue.FromFullYaku(this, "大三元", 1));
            return(true);
        }
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            long flags = 0;

            for (int i = 0; i < tiles.Count; i++)
            {
                flags |= (1L << tiles[i].BaseTile.SortedIndex);
            }
            if ((flags | CheckFlags) != CheckFlags)
            {
                return(false);
            }
            result.Add(YakuValue.FromFullYaku(this, "绿一色", 1));
            return(true);
        }
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            const KanjiTile.Kanji check = KanjiTile.Kanji.东 | KanjiTile.Kanji.南 | KanjiTile.Kanji.西 | KanjiTile.Kanji.北;
            int count = groups.PungList.Count(g => g.Key is KanjiTile t && (t.Value & check) != 0);

            if (count != 3)
            {
                return(false);
            }
            if (!(groups.Pair.Key is KanjiTile t2) || (t2.Value & check) == 0)
            {
                return(false);
            }
            result.Add(YakuValue.FromFullYaku(this, "小四喜", 1));
            return(true);
        }
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            if (!TestRon(tiles, env))
            {
                return(true);
            }

            if (tiles.Count(t => t.BaseTile == tiles.Added.BaseTile) == 2)
            {
                result.Add(YakuValue.FromFullYaku(this, "国士无双十三面", 1));
            }
            else
            {
                result.Add(YakuValue.FromFullYaku(this, "国士无双", 1));
            }
            return(true);
        }
示例#10
0
 protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
 {
     if ((env & YakuEnvironment.第一巡) == 0)
     {
         return(false);
     }
     if ((env & YakuEnvironment.自摸) != 0)
     {
         if ((env & YakuEnvironment.自风东) != 0)
         {
             result.Add(YakuValue.FromFullYaku(this, "天和", 1));
         }
         else
         {
             result.Add(YakuValue.FromFullYaku(this, "地和", 1));
         }
     }
     else
     {
         result.Add(YakuValue.FromFullYaku(this, "人和", 1));
     }
     return(true);
 }
示例#11
0
        protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
        {
            foreach (var g in groups.PungList)
            {
                if (g.Type == GroupType.副露)
                {
                    return(false);
                }
                if (g.Type == GroupType.和牌 && !SelfWindEquals(g.AddedWind, env))
                {
                    return(false);
                }
            }

            if (groups.Pair.Type == GroupType.和牌)
            {
                result.Add(YakuValue.FromFullYaku(this, "四暗刻单骑", 1));
            }
            else
            {
                result.Add(YakuValue.FromFullYaku(this, "四暗刻", 1));
            }
            return(true);
        }
示例#12
0
 protected override bool Test(ICollection <YakuValue> result, ITiles tiles, IGroups groups, YakuEnvironment env)
 {
     result.Add(YakuValue.FromFullYaku(this, "字一色", 1));
     return(true);
 }