Exemplo n.º 1
0
 public Player(string name, int handSize, int chips)
 {
     Name   = name;
     Chips  = chips;
     Status = RoundStatus.Unset;
     Hand   = new Card[handSize];
 }
Exemplo n.º 2
0
    public void ChangeRoundStatus(RoundStatus nextRoundStatus)
    {
        switch (nextRoundStatus)
        {
        case RoundStatus.RoundEnd:

            roundStatus = RoundStatus.RoundEnd;

            if (roundTurn == RoundTurn.EnemyRound)
            {
                enemy.BuffReduce();
                roundTurn = RoundTurn.PlayerRound;
                roundNum++;
            }
            else
            {
                player.BuffReduce();
                roundTurn = RoundTurn.EnemyRound;
            }

            ChangeRoundStatus(RoundStatus.RoundBegin);
            break;


        case RoundStatus.RoundBegin:
            roundStatus = RoundStatus.RoundBegin;
            RoundBegin();
            break;

        case RoundStatus.Rounding:
            roundStatus = RoundStatus.Rounding;
            break;
        }
    }
Exemplo n.º 3
0
        public static YakuValue 一气(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                   RoundStatus roundStatus, GameSetting settings)
        {
            const int flag     = 73;         // binary : 1001001
            int       handFlag = 0;

            foreach (var meld in decompose)
            {
                if (meld.Type != MeldType.Sequence)
                {
                    continue;
                }
                handFlag |= 1 << Tile.GetIndex(meld.First);
            }

            Assert.IsTrue(handFlag >= 0, "Only 27 flag bits, this number should not be less than 0");

            while (handFlag > 0)
            {
                if ((handFlag & flag) == flag)
                {
                    return new YakuValue {
                               Name = "一气通贯", Value = handStatus.HasFlag(HandStatus.Menqing) ? 2 : 1
                    }
                }
                ;
                handFlag >>= 9;
            }

            return(new YakuValue());
        }
Exemplo n.º 4
0
 public static YakuValue 抢杠(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                            RoundStatus roundStatus, GameSetting settings)
 {
     return(handStatus.HasFlag(HandStatus.RobKong) ? new YakuValue {
         Name = "抢杠", Value = 1
     } : new YakuValue());
 }
Exemplo n.º 5
0
    public static void Test3Dragons()
    {
        var handTiles = new List <Tile> {
            new Tile(Suit.S, 4), new Tile(Suit.S, 5), new Tile(Suit.S, 6),
            new Tile(Suit.Z, 2), new Tile(Suit.Z, 2),
            new Tile(Suit.Z, 5), new Tile(Suit.Z, 5)
        };
        var openMelds = new List <Meld> {
            new Meld(false, new Tile(Suit.Z, 6), new Tile(Suit.Z, 6), new Tile(Suit.Z, 6), new Tile(Suit.Z, 6)),
            new Meld(true, new Tile(Suit.Z, 7), new Tile(Suit.Z, 7), new Tile(Suit.Z, 7))
        };
        var settings    = new GameSetting();
        var handStatus  = HandStatus.Tsumo;
        var roundStatus = new RoundStatus
        {
            PlayerIndex    = 0,
            OyaPlayerIndex = 1,
            FieldCount     = 0,
            TotalPlayer    = 2
        };
        var pointInfo = MahjongLogic.GetPointInfo(handTiles.ToArray(), openMelds.ToArray(), new Tile(Suit.Z, 2),
                                                  handStatus, roundStatus, settings, false);

        Debug.Log($"Point: {pointInfo}");
    }
Exemplo n.º 6
0
        public static YakuValue  色同刻(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                     RoundStatus roundStatus, GameSetting settings)
        {
            const int flag     = 1 + (1 << 9) + (1 << 18);         // binary : 1000000001000000001
            int       handFlag = 0;

            foreach (var meld in decompose)
            {
                if (meld.Type != MeldType.Triplet || meld.Suit == Suit.Z)
                {
                    continue;
                }
                handFlag |= 1 << Tile.GetIndex(meld.First);
            }

            Assert.IsTrue(handFlag >= 0, "Only 27 flag bits, this number should not be less than 0");
            for (int i = 0; i < 9; i++)
            {
                if ((handFlag & flag) == flag)
                {
                    return new YakuValue {
                               Name = "三色同刻", Value = 2
                    }
                }
                ;
                handFlag >>= 1;
            }

            return(new YakuValue());
        }
Exemplo n.º 7
0
        private static IList <YakuValue> CountYaku(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                                   RoundStatus roundStatus, GameSetting yakuSettings, bool isQTJ)
        {
            var result = new List <YakuValue>();

            if (decompose == null || decompose.Count == 0)
            {
                return(result);
            }
            foreach (var yakuMethod in YakuMethods)
            {
                var value = (YakuValue)yakuMethod.Invoke(yakuSettings,
                                                         new object[] { decompose, winningTile, handStatus, roundStatus, yakuSettings });
                if (value.Value != 0)
                {
                    result.Add(value);
                }
            }

            if (isQTJ)
            {
                return(result);
            }
            var hasYakuman = result.Any(yakuValue => yakuValue.Type == YakuType.Yakuman);

            return(hasYakuman ? result.Where(yakuValue => yakuValue.Type == YakuType.Yakuman).ToList() : result);
        }
Exemplo n.º 8
0
        private static PointInfo GetPointInfo(ISet <List <Meld> > decomposes, Tile winningTile, HandStatus handStatus,
                                              RoundStatus roundStatus, GameSetting settings, bool isQTJ, int dora, int uraDora, int redDora, int beiDora)
        {
            Debug.Log($"GetPointInfo method, parameters: \ndecomposes: {DecompositionToString(decomposes)}, "
                      + $"winningTile: {winningTile}, handStatus: {handStatus}, roundStatus: {roundStatus}, "
                      + $"dora: {dora}, uraDora: {uraDora}, redDora: {redDora}, beiDora: {beiDora}");
            var infos = new List <PointInfo>();

            foreach (var decompose in decomposes)
            {
                var yakus = CountYaku(decompose, winningTile, handStatus, roundStatus, settings, isQTJ);
                var fu    = CountFu(decompose, winningTile, handStatus, roundStatus, yakus, settings);
                if (yakus.Count == 0)
                {
                    continue;
                }
                var info = new PointInfo(fu, yakus, isQTJ, dora, uraDora, redDora, beiDora);
                infos.Add(info);
                Debug.Log($"Decompose: {string.Join(", ", decompose)}, PointInfo: {info}");
            }

            if (infos.Count == 0)
            {
                return(new PointInfo());
            }
            infos.Sort();
            Debug.Log($"CountPoint: {string.Join(", ", infos.Select(info => info.ToString()))}");
            return(infos[infos.Count - 1]);
        }
Exemplo n.º 9
0
        // todo -- this may contains bugs
        public static YakuValue 全带系(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                    RoundStatus roundStatus, GameSetting settings)
        {
            if (!decompose.All(meld => meld.HasYaojiu))
            {
                return(new YakuValue());
            }
            if (decompose.All(meld => meld.Suit == Suit.Z))
            {
                return new YakuValue {
                           Name = "字一色", Value = 1, Type = YakuType.Yakuman
                }
            }
            ;
            var all = decompose.All(meld => meld.IsYaojiu);
            var any = decompose.Any(meld => meld.Suit == Suit.Z);

            if (all)
            {
                return any
                                        ? new YakuValue {
                           Name = "混老头", Value = 2
                       }
            }
            : new YakuValue {
                Name = "清老头", Value = 1, Type = YakuType.Yakuman
            };
            return(any
                                ? new YakuValue {
                Name = "混全带幺九", Value = handStatus.HasFlag(HandStatus.Menqing) ? 2 : 1
            }
                                : new YakuValue {
                Name = "纯全带幺九", Value = handStatus.HasFlag(HandStatus.Menqing) ? 3 : 2
            });
        }
Exemplo n.º 10
0
        public static YakuValue 平和(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                   RoundStatus roundStatus, GameSetting settings)
        {
            if (!handStatus.HasFlag(HandStatus.Menqing))
            {
                return(new YakuValue());
            }
            int  countOfSequence = 0;
            bool twoSide         = false;

            foreach (var meld in decompose)
            {
                if (meld.Type != MeldType.Pair && meld.Type != MeldType.Sequence)
                {
                    return(new YakuValue());
                }
                if (meld.Type == MeldType.Sequence)
                {
                    countOfSequence++;
                    twoSide = twoSide || meld.IsTwoSideIgnoreColor(winningTile);
                }
            }

            if (countOfSequence == 4 && twoSide)
            {
                return new YakuValue {
                           Name = "平和", Value = 1
                }
            }
            ;
            return(new YakuValue());
        }
Exemplo n.º 11
0
        public static YakuValue 绿一色(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                    RoundStatus roundStatus, GameSetting settings)
        {
            var counts = MahjongLogic.CountTiles(decompose);

            for (int i = 0; i < counts.Length; i++)
            {
                if (Greens.Contains(i))
                {
                    continue;
                }
                if (counts[i] > 0)
                {
                    return(new YakuValue());
                }
            }

            return(counts[Greens[Greens.Length - 1]] == 0
                                ? new YakuValue {
                Name = "纯绿一色", Value = settings.纯绿一色, Type = YakuType.Yakuman
            }
                                : new YakuValue {
                Name = "绿一色", Value = 1, Type = YakuType.Yakuman
            });
        }
    public IEnumerator Run()
    {
        _Register();
        _view.Enter(_playerData, _enemiesData);
        _fightStatus = FightStatus.Fighting;
        _roundStatus = RoundStatus.HeroTurn;
        _roundCount  = 0;

        while (!_leave)
        {
            switch (_fightStatus)
            {
            case FightStatus.Fighting:
                yield return(_FightRound());

                break;

            case FightStatus.FightResult:
                _BattleResultEvent();
                _fightStatus = FightStatus.FightEnd;
                break;

            case FightStatus.FightEnd:
                break;
            }
            yield return(null);
        }
    }
 private void _SetFightResultFlag(bool win)
 {
     _fightStatus = FightStatus.FightResult;
     _roundStatus = RoundStatus.None;
     _view.SetFightEndFlag();
     _isWin = win;
 }
 private void _EndHeroTurn(int pos)
 {
     _playerData.TeamHeroes[pos].SetEndTurnFlag(true);
     if (_CheckIsAllHeroTurnEnd())
     {
         _roundStatus = RoundStatus.EnemyTurn;
     }
 }
Exemplo n.º 15
0
 public void ServerShutdown()
 {
     roundStatus       = RoundStatus.Setup;
     playerServerStats = null;
     playerLocalStats  = null;
     winnerText.GetComponent <Text>().text = "";
     startRoundButton.SetActive(false);
 }
Exemplo n.º 16
0
        // GET: League/Scoring
        public ActionResult LeagueScoring(TournamentDetailsMvcModel model, int id, int divisionId = 0, int roundId = 0)
        {
            TournamentDetailsMvcModel input = new TournamentDetailsMvcModel();
            var t = GlobalConfiguration.Connection.Tournaments_GetByID(id);


            input.TournamentName   = t.TournamentName;
            input.Id               = t.Id;
            input.DivisionsEntered = t.DivisionsEntered;
            input.DivisionsEntered = GlobalConfiguration.Connection.TeamGroupEntries_GetSpecific(t.DivisionsEntered);

            if (divisionId != 0)
            {
                DivisionModel division = t.DivisionsEntered.First(x => x.Id == divisionId);
                division = GlobalConfiguration.Connection.GetGroups(division);
                input.SelectedDivision = division;
                foreach (GroupModel gm in division.Groups)
                {
                    var activeFound = false;

                    for (int i = 0; i < gm.Rounds.Count; i++)
                    {
                        RoundStatus status = RoundStatus.Locked;

                        if (!activeFound)
                        {
                            if (gm.Rounds[i].TrueForAll(x => x.Winner != null))
                            {
                                status = RoundStatus.Complete;
                            }
                            else
                            {
                                status      = RoundStatus.Active;
                                activeFound = true;
                                if (roundId == 0)
                                {
                                    roundId = i + 1;
                                }
                            }
                        }

                        input.Rounds.Add(new RoundMvcModel {
                            RoundName = "Round " + (i + 1), RoundNumber = i + 1, RoundId = roundId, Status = status, GroupId = gm.Id
                        });


                        input.TempMatchups = GetMatchups(gm.Rounds[i], input.Id, divisionId, gm.Id, roundId, status);

                        foreach (MatchupMvcModel mvc in input.TempMatchups)
                        {
                            input.Matchups.Add(mvc);
                        }
                    }
                }
            }

            return(View(input));
        }
Exemplo n.º 17
0
 public void Resume()
 {
     _logger.LogInformation("恢复视频上墙");
     if (m_CancellationTokeSource != null && !m_CancellationTokeSource.IsCancellationRequested)
     {
         m_CancellationTokeSource.Cancel();
     }
     m_RoundStatus = RoundStatus.Running;
 }
Exemplo n.º 18
0
        ///// <summary>
        ///// 触发
        ///// </summary>
        //private void RaiseRoundSectionSwitchEvent()
        //{
        //    if (OnRoundSectionSwitch != null)
        //    {
        //        m_CurrentRoundSection = m_videoRoundScene.VideoRoundSections.ElementAt(m_RoundSectionIndex);
        //        RoundEventArgs arg = new RoundEventArgs() { Section = m_CurrentRoundSection };
        //        OnRoundSectionSwitch(this, arg);
        //    }
        //}

        ///// <summary>
        ///// 执行轮巡动作
        ///// </summary>
        //protected abstract void ExecuteRoundAction();

        public void Pause()
        {
            _logger.LogInformation("暂停视频上墙");
            if (m_CancellationTokeSource == null || m_CancellationTokeSource.IsCancellationRequested)
            {
                m_CancellationTokeSource = new CancellationTokenSource();
            }
            m_RoundStatus = RoundStatus.Pausing;
        }
Exemplo n.º 19
0
 public void Stop()
 {
     _logger.LogInformation("停止视频上墙");
     m_RoundStatus = RoundStatus.Exit;
     if (m_CancellationTokeSource != null && !m_CancellationTokeSource.IsCancellationRequested)
     {
         m_CancellationTokeSource.Cancel();
     }
 }
Exemplo n.º 20
0
 public Player(Socket socket, string name, int chips, int handSize)
 {
     ID     = Guid.NewGuid();
     Socket = socket;
     Name   = name;
     Chips  = chips;
     Status = RoundStatus.Unset;
     Hand   = new Card[handSize];
 }
Exemplo n.º 21
0
        public ActionResult Details(int id, int roundId = 0)
        {
            List <TournamentModel> tournaments = GlobalConfig.Connection.GetTournament_All();

            try
            {
                TournamentMVCDetailsModel input = new TournamentMVCDetailsModel();
                TournamentModel           t     = tournaments.Where(x => x.Id == id).First();

                input.TournamentName = t.TournamentName;

                var  orderedRounds = t.Rounds.OrderBy(x => x.First().MatchupRound).ToList();
                bool activeRound   = false;

                for (int i = 0; i < orderedRounds.Count; i++)
                {
                    RoundStatus status = RoundStatus.Locked;

                    if (!activeRound)
                    {
                        if (orderedRounds[i].TrueForAll(x => x.Winner != null))
                        {
                            status = RoundStatus.Complete;
                        }
                        else
                        {
                            status      = RoundStatus.Active;
                            activeRound = true;
                            if (roundId == 0)
                            {
                                // Setting the roundId to be the active round number
                                roundId = i + 1;
                            }
                        }
                    }

                    // "i + 1" because our loop starts at 0, hence "int i = 0"
                    input.Rounds.Add(
                        new RoundMVCModel
                    {
                        RoundName   = "Round " + (i + 1),
                        Status      = status,
                        RoundNumber = i + 1
                    });
                }

                // Converting a 1 based list to a 0 based list for lookup
                input.Matchups = GetMatchups(orderedRounds[roundId - 1], id, roundId);

                return(View(input));
            }
            catch (Exception)
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
Exemplo n.º 22
0
        public ActionResult Details(int id, int roundId = 0)
        {
            List <TournamentModel> tournaments = GlobalConfig.Connection.GetTournament_All();

            try
            {
                var             input = new TournamentMVCDetailsModel();
                TournamentModel t     = tournaments.Where(x => x.Id == id).First();

                input.TournamentName = t.TournamentName;
                var orderedRounds = t.Rounds.OrderBy(x => x.First().MatchupRound).ToList();
                var activeFound   = false;

                for (int i = 0; i < orderedRounds.Count; i++)
                {
                    RoundStatus status = RoundStatus.Locked;

                    if (!activeFound)
                    {
                        if (orderedRounds[i].TrueForAll(x => x.Winner != null))
                        {
                            status = RoundStatus.Complete;
                        }
                        else
                        {
                            status      = RoundStatus.Active;
                            activeFound = true;

                            if (roundId == 0)
                            {
                                roundId = i + 1;
                            }
                        }
                    }

                    input.Rounds.Add(
                        new RoundMVCModel
                    {
                        RoundName   = "Round " + (i + 1),
                        Status      = status,
                        RoundNumber = i + 1
                    });
                }


                input.Matchups = GetMatchups(orderedRounds[roundId - 1], id, roundId);

                return(View(input));
            }
            catch
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
Exemplo n.º 23
0
        public static YakuValue 暗刻系(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                                    RoundStatus roundStatus, GameSetting settings)
        {
            var count = decompose.Count(meld => meld.Type == MeldType.Triplet && !meld.Revealed);

            if (count < 3)
            {
                return(new YakuValue());
            }
            Assert.IsTrue(count >= 3 && count <= 4, "There could not be more than 4 triplets in a complete hand");
            var winningTileInOther = decompose.Any(meld => !meld.Revealed &&
                                                   (meld.Type == MeldType.Pair ||
                                                    meld.Type == MeldType.Sequence) &&
                                                   meld.ContainsIgnoreColor(winningTile));

            if (handStatus.HasFlag(HandStatus.Tsumo))
            {
                if (count == 3)
                {
                    return new YakuValue {
                               Name = "三暗刻", Value = 2
                    }
                }
                ;
                // count == 4
                return(winningTileInOther
                                        ? new YakuValue {
                    Name = "四暗刻·单骑听", Value = settings.四暗刻单骑, Type = YakuType.Yakuman
                }
                                        : new YakuValue {
                    Name = "四暗刻", Value = 1, Type = YakuType.Yakuman
                });
            }

            if (count == 3 && !winningTileInOther)
            {
                return(new YakuValue());
            }
            if (count == 3 && winningTileInOther)
            {
                return new YakuValue {
                           Name = "三暗刻", Value = 2
                }
            }
            ;
            // count == 4
            return(winningTileInOther
                                ? new YakuValue {
                Name = "四暗刻·单骑听", Value = settings.四暗刻单骑, Type = YakuType.Yakuman
            }
                                : new YakuValue {
                Name = "三暗刻", Value = 2
            });
        }
Exemplo n.º 24
0
 public void InitView(GameStatus game_status)
 {
     currentStatus = new RoundStatus();
     SetNames(game_status.PlayerNamesk__BackingField.ToArray());
     lbl_state.Content = "Bidding";
     lbl_strong_shape.Content = "";
     UpdateTakes(new[] { 0, 0, 0, 0 });
     UpdateBids(new[] { "", "", "", "" });
     UpdateScores(game_status.Scoresk__BackingField.ToArray());
     ShowCards(new Card?[4] { null, null, null, null });
 }
Exemplo n.º 25
0
 public static YakuValue 自摸(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                            RoundStatus roundStatus, GameSetting settings)
 {
     if (!handStatus.HasFlag(HandStatus.Menqing) || !handStatus.HasFlag(HandStatus.Tsumo))
     {
         return(new YakuValue());
     }
     return(new YakuValue {
         Name = "门前清自摸和", Value = 1
     });
 }
Exemplo n.º 26
0
    protected virtual IEnumerator MainPhase()
    {
        while (m_IsMainLoopEnd == false)
        {
            yield return(null);
        }

        m_RoundStatus = RoundStatus.EndPhase;
        m_StageManager.StartCoroutine(EndPhase());

        yield return(null);
    }
Exemplo n.º 27
0
        private void Run()
        {
            m_RoundStatus = RoundStatus.Running;
            while (true)
            {
                if (m_RoundStatus == RoundStatus.Exit)
                {
                    break;
                }

                var token = new CancellationTokenSource();
                if (m_RoundStatus == RoundStatus.Pausing)
                {
                    try
                    {
                        //暂停
                        Task.Delay(-1).Wait(m_CancellationTokeSource.Token);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("等待异常,Message:{0},\r\nStackTrace:{1}", ex.Message, ex.StackTrace);
                    }
                }
                if (GoToNext)
                {
                    Next();
                }
                else
                {
                    Previous();
                    GoToNext = true;
                }
                if (m_videoRoundScene.VideoRoundSections.Count == 1) //不轮巡
                {
                    Task.Delay(-1).Wait(m_CancellationTokeSource.Token);
                }
                else
                {
                    try
                    {
                        //休眠
                        m_WaitTokenSource = new CancellationTokenSource();
                        Task.Delay(m_CurrentRoundSection.RoundInterval * 1000).Wait(m_WaitTokenSource.Token);
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
            Console.WriteLine("Round End at {0}, Task Status:{1}", DateTime.Now, m_Executor.Status);
        }
Exemplo n.º 28
0
        /// <summary>
        /// Note: lingshang and haidi should be obtained in baseHandStatus
        /// </summary>
        /// <param name="playerIndex"></param>
        /// <param name="CurrentRoundStatus"></param>
        /// <param name="winningTile"></param>
        /// <param name="baseHandStatus"></param>
        /// <returns></returns>
        public static PointInfo GetPointInfo(int playerIndex, ServerRoundStatus CurrentRoundStatus, Tile winningTile,
                                             HandStatus baseHandStatus, Tile[] doraTiles, Tile[] uraDoraTiles, int beiDora, GameSetting yakuSettings)
        {
            var zhenting = CurrentRoundStatus.IsZhenting(playerIndex);

            if (zhenting && !baseHandStatus.HasFlag(HandStatus.Tsumo))
            {
                return(new PointInfo());
            }
            var handData   = CurrentRoundStatus.HandData(playerIndex);
            var handStatus = baseHandStatus;

            if (MahjongLogic.TestMenqing(handData.Melds))
            {
                handStatus |= HandStatus.Menqing;
            }
            // test richi
            if (CurrentRoundStatus.RichiStatus(playerIndex))
            {
                handStatus |= HandStatus.Richi;
                // test one-shot
                if (yakuSettings.HasOneShot && CurrentRoundStatus.OneShotStatus(playerIndex))
                {
                    handStatus |= HandStatus.OneShot;
                }
                // test WRichi
                if (CurrentRoundStatus.FirstTurn)
                {
                    handStatus |= HandStatus.WRichi;
                }
            }

            // test first turn
            if (CurrentRoundStatus.FirstTurn)
            {
                handStatus |= HandStatus.FirstTurn;
            }
            var roundStatus = new RoundStatus
            {
                PlayerIndex       = playerIndex,
                OyaPlayerIndex    = CurrentRoundStatus.OyaPlayerIndex,
                CurrentExtraRound = CurrentRoundStatus.Extra,
                RichiSticks       = CurrentRoundStatus.RichiSticks,
                FieldCount        = CurrentRoundStatus.Field,
                TotalPlayer       = CurrentRoundStatus.TotalPlayers
            };
            var isQTJ = CurrentRoundStatus.GameSettings.GameMode == GameMode.QTJ;

            return(MahjongLogic.GetPointInfo(handData.HandTiles, handData.Melds, winningTile,
                                             handStatus, roundStatus, yakuSettings, isQTJ, doraTiles, uraDoraTiles, beiDora));
        }
Exemplo n.º 29
0
 public static YakuValue 一发(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                            RoundStatus roundStatus, GameSetting settings)
 {
     if (handStatus.HasFlag(HandStatus.Menqing) &&
         (handStatus.HasFlag(HandStatus.Richi) || handStatus.HasFlag(HandStatus.WRichi)) &&
         handStatus.HasFlag(HandStatus.OneShot))
     {
         return new YakuValue {
                    Name = "一发", Value = 1
         }
     }
     ;
     return(new YakuValue());
 }
Exemplo n.º 30
0
 public static YakuValue 海底(List <Meld> decompose, Tile winningTile, HandStatus handStatus,
                            RoundStatus roundStatus, GameSetting settings)
 {
     if (!handStatus.HasFlag(HandStatus.Haidi))
     {
         return(new YakuValue());
     }
     return(handStatus.HasFlag(HandStatus.Tsumo)
                         ? new YakuValue {
         Name = "海底捞月", Value = 1
     }
                         : new YakuValue {
         Name = "河底摸鱼", Value = 1
     });
 }
Exemplo n.º 31
0
    public void StartRound()
    {
        Debug.Log("Starting round");
        startRoundButton.SetActive(false);
        rulesMenu.SetActive(false);

        CleanupDisconnectedPlayers();   // Just in case there's a

        // Load game rules from input fields

        // Kills to win
        int  ktw         = killsToWin;
        bool tryParseKtw = int.TryParse(killsToWinInput.GetComponent <TMP_InputField>().text, out ktw);

        killsToWin = ktw;

        // Hit points
        int  hp         = hitPoints;
        bool tryParseHP = int.TryParse(hitPointsInput.GetComponent <TMP_InputField>().text, out hp);

        hitPoints = hp;

        // Damage
        int  d = damage;
        bool tryParseDamage = int.TryParse(damageInput.GetComponent <TMP_InputField>().text, out d);

        damage = d;

        // Respawn Time
        float rt         = respawnTime;
        bool  tryParseRT = float.TryParse(respawnTimeInput.GetComponent <TMP_InputField>().text, out rt);

        respawnTime = rt;

        roundStatus = RoundStatus.InRound;

        foreach (PlayerSoul p in playerSouls)
        {
            if (p != null)
            {
                p.StartRound();
            }
        }

        InitializeStats();

        RpcStartRound();
    }
Exemplo n.º 32
0
 public void UpdateRoundStatus(RoundStatus status, Card[][] allCards)
 {
     //            if (status.Statek__BackingField != currentStatus.Statek__BackingField)
      //           {
       //              StartNewState(status.Statek__BackingField);
        //         }
     currentStatus = status;
     lbl_state.Content = status.Statek__BackingField.ToString();
     Brush red = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
     Brush black = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
     lbl_Name0.Foreground = black;
     lbl_Name1.Foreground = black;
     lbl_Name2.Foreground = black;
     lbl_Name3.Foreground = black;
     switch (status.PlayerTurnk__BackingField)
     {
         case PlayerSeat.Self:
             lbl_Name0.Foreground = red;
             break;
         case PlayerSeat.West:
             lbl_Name1.Foreground = red;
             break;
         case PlayerSeat.North:
             lbl_Name2.Foreground = red;
             break;
         case PlayerSeat.East:
             lbl_Name3.Foreground = red;
             break;
     }
     var bids = (from b in status.Biddingsk__BackingField
                 select b.HasValue ? String.Format("{0} {1}", b.Value.Amountk__BackingField, b.Value.Suitk__BackingField.ToString()) : "").ToArray();
     UpdateBids(bids);
     ShowCards(status.CurrentPlayk__BackingField.ToArray());
     lbl_strong_shape.Content = status.Trumpk__BackingField.HasValue ? status.Trumpk__BackingField.Value.ToString() : "";
     UpdateTakes(status.TricksTakenk__BackingField.ToArray());
     RecieveCards(allCards);
 }
Exemplo n.º 33
0
        public void UpdateRoundStatus(RoundStatus status)
        {
            // check if the state has changed
            if (status.Statek__BackingField != currentStatus.Statek__BackingField)
            {
                StartNewState(status.Statek__BackingField, status);
            }
            // if waiting for approval for card to throw
            if (cardToThrow != null && status.Statek__BackingField == RoundState.Playing)
            {
                cards.Remove(cardToThrow.Value);
                RecieveCards();
                cardToThrow = null;
            }
            lbl_state.Content = status.Statek__BackingField.ToString();
            // highlight current player
            currentStatus = status;
            Brush red = new SolidColorBrush(Color.FromArgb(255, 255, 0, 0));
            Brush black = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            lbl_Name0.Foreground = black;
            lbl_Name1.Foreground = black;
            lbl_Name2.Foreground = black;
            lbl_Name3.Foreground = black;
            switch (status.PlayerTurnk__BackingField)
            {
                case PlayerSeat.Self:
                    lbl_Name0.Foreground = red;
                    break;
                case PlayerSeat.West:
                    lbl_Name1.Foreground = red;
                    break;
                case PlayerSeat.North:
                    lbl_Name2.Foreground = red;
                    break;
                case PlayerSeat.East:
                    lbl_Name3.Foreground = red;
                    break;
            }
            // update bids
            var bids = (from b in status.Biddingsk__BackingField
                        select b.HasValue ? String.Format("{0} {1}", b.Value.Amountk__BackingField, b.Value.Suitk__BackingField.ToString()) : "").ToArray();
            UpdateBids(bids);
            // update cards
            ShowCards(status.CurrentPlayk__BackingField.ToArray());

            UpdateTakes(status.TricksTakenk__BackingField.ToArray());
        }
Exemplo n.º 34
0
 private void StartNewState(RoundState roundState, RoundStatus status)
 {
     switch (roundState)
     {
         case RoundState.Contract:
             img_trump.Source = new BitmapImage(new Uri(ContractDialog.GetSuitImageUrl(status.Trumpk__BackingField), UriKind.Relative));
             img_trump.Visibility = System.Windows.Visibility.Visible;
             break;
         case RoundState.Bidding:
             img_trump.Visibility = System.Windows.Visibility.Collapsed;
             break;
     }
 }
Exemplo n.º 35
0
 void client_RecieveRoundStatusUpdateReceived(object sender, RecieveRoundStatusUpdateReceivedEventArgs e)
 {
     roundStatus = e.status;
     if (gameTable != null)
     {
         gameTable.UpdateRoundStatus(roundStatus);
     }
     else
     {
         if (gameStatus != null)
        {
            StartGame();
         }
     }
 }
Exemplo n.º 36
0
        public void InitView(GameStatus game_status, RoundStatus status)
        {
            currentStatus = status;
            currentGameStatus = game_status;
            SetNames(game_status.PlayerNamesk__BackingField.ToArray());
            UpdateTakes(new[] { 0, 0, 0, 0 });
            UpdateBids(new[] { "", "", "", "" });
            UpdateScores(game_status.Scoresk__BackingField.ToArray());
            ShowCards(new Card?[4] { null, null, null, null });

            InitCardDisplay();

            img_player_self.Source = new BitmapImage(new Uri(GetImageForPlayer(game_status.PlayerTypesk__BackingField[0], game_status.PlayerNamesk__BackingField[0], MainApp.photoUrl), UriKind.Absolute));
            img_player_west.Source = new BitmapImage(new Uri(GetImageForPlayer(game_status.PlayerTypesk__BackingField[1], game_status.PlayerNamesk__BackingField[1], game_status.PlayerPhotosk__BackingField[1]), UriKind.Absolute));
            img_player_north.Source = new BitmapImage(new Uri(GetImageForPlayer(game_status.PlayerTypesk__BackingField[2], game_status.PlayerNamesk__BackingField[2], game_status.PlayerPhotosk__BackingField[2]), UriKind.Absolute));
            img_player_east.Source = new BitmapImage(new Uri(GetImageForPlayer(game_status.PlayerTypesk__BackingField[3], game_status.PlayerNamesk__BackingField[3], game_status.PlayerPhotosk__BackingField[3]), UriKind.Absolute));

            scrl_chat.Visibility = game_status.PlayerTypesk__BackingField.Count(t => t.Equals("_human")) > 1 ? Visibility.Visible : System.Windows.Visibility.Collapsed;
            txt_chat_input.Visibility = scrl_chat.Visibility;
        }