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); } } }
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(); }