示例#1
0
        public void DiscardByOther(Tile tile, bool chowable = false)
        {
            var winProcessorFactory = new WinProcessorFactory();
            var result = winProcessorFactory.Validate(Tiles, new List <Tile> {
                tile
            });

            if (result.Any() && PlayerWinable != null)
            {
                PlayerWinable(this, new PlayerWinEventArgs {
                    WinningTiles = result
                });
            }

            var kongableMelds = MaJiangAlgorithm.GetKongableMelds(Tiles, tile);

            if (kongableMelds.Any())
            {
                FireEvent(PlayerActions.Kong, kongableMelds, tile);
            }

            var pongableMelds = MaJiangAlgorithm.GetPongableMelds(Tiles, tile);

            if (pongableMelds.Any())
            {
                FireEvent(PlayerActions.Pong, pongableMelds, tile);
            }

            if (chowable)
            {
                var chowableMelds = MaJiangAlgorithm.GetChowableMelds(Tiles, tile);
                if (chowableMelds.Any())
                {
                    FireEvent(PlayerActions.Chow, chowableMelds, tile);
                }
            }
        }
示例#2
0
        public void InitialDraw(List <Tile> tiles)
        {
            Tiles.AddRange(tiles);


            if (PlayerInitalWin != null && Tiles.Count == (IsDealer? 14: 13))
            {
                var kongMelds = MaJiangAlgorithm.GetKongs(Tiles);

                if (kongMelds.Any())
                {
                    PlayerInitalWin(this, new PlayerInitialWinEventArgs(InitialWinType.DaSiXi, kongMelds));
                }

                var triplets = MaJiangAlgorithm.GetTriplets(Tiles);
                if (triplets.Count >= 2)
                {
                    PlayerInitalWin(this, new PlayerInitialWinEventArgs(InitialWinType.LiuLiuShun, triplets));
                }

                var lackSuits = MaJiangAlgorithm.GetLackSuits(Tiles);
                if (lackSuits.Count > 0)
                {
                    PlayerInitalWin(this, new PlayerInitialWinEventArgs(InitialWinType.QueYiSe, lackSuits));
                }

                if (MaJiangAlgorithm.IsBanBanHu(Tiles))
                {
                    PlayerInitalWin(this, new PlayerInitialWinEventArgs(InitialWinType.BanBanHu));
                }
            }



            Order();
        }