Пример #1
0
        private void wizardOzWindow_DiceFinished(object sender, DiceFinishedEventArgs e)
        {
            Debug.Assert(stateManager.State == GameState.AttackWaitDice);

            var whiteDices = from g in e.AllDices
                             where g.DiceColor == DiceColor.White
                             orderby g.Value descending
                             select g;

            var redDices = from g in e.AllDices
                           where g.DiceColor == DiceColor.Red
                           orderby g.Value descending
                           select g;

            if (redDices.Count() == 0 || redDices.Count() > stateManager.AttackerMaxDiceNum
                || whiteDices.Count() != stateManager.DefenderMaxDiceNum)
            {
                stateManager.Error();
                soundPool.Play(GameSound.Error);
            }
            else
            {
                //judgement
                ArmyViz attackerViz = riskMap.GetArmyViz(stateManager.AttackSource);
                ArmyViz defenderViz = riskMap.GetArmyViz(stateManager.AttackDest);
                var redIt = redDices.GetEnumerator();
                var whiteIt = whiteDices.GetEnumerator();
                int attackerLost = 0, defenderLost = 0;

                while (redIt.MoveNext() && whiteIt.MoveNext())
                {
                    if (redIt.Current.Value > whiteIt.Current.Value)
                    {
                        defenderLost++;
                    }
                    else
                    {
                        attackerLost++;
                    }
                }

                Debug.Assert(attackerViz.ArmyCount >= attackerLost + 1);
                Debug.Assert(defenderViz.ArmyCount >= defenderLost);

                bool attackerWin;
                //owner changing
                if (defenderViz.ArmyCount == defenderLost)  //win
                {
                    defenderViz.PlayerId = stateManager.ActivePlayerId;
                    defenderViz.ArmyCount = redDices.Count() - attackerLost;
                    attackerViz.ArmyCount -= redDices.Count();
                    attackerWin = true;
                }
                else    //lose
                {
                    attackerViz.ArmyCount -= attackerLost;
                    defenderViz.ArmyCount -= defenderLost;
                    attackerWin = false;
                }

                stateManager.AttackDiceDetected(attackerLost, defenderLost, attackerWin);

                if (attackerWin)
                {
                    soundPool.Play(GameSound.AttackWin);
                }
                else
                {
                    soundPool.Play(GameSound.AttackFail);
                }
            }

            refreshViews();
        }
Пример #2
0
        private void wizardOzWindow_DiceFinished(object sender, DiceFinishedEventArgs e)
        {
            Debug.Assert(stateManager.State == GameState.AttackWaitDice);

            var whiteDices = from g in e.AllDices
                             where g.DiceColor == DiceColor.White
                             orderby g.Value descending
                             select g;

            var redDices = from g in e.AllDices
                           where g.DiceColor == DiceColor.Red
                           orderby g.Value descending
                           select g;

            if (redDices.Count() == 0 || redDices.Count() > stateManager.AttackerMaxDiceNum ||
                whiteDices.Count() != stateManager.DefenderMaxDiceNum)
            {
                stateManager.Error();
                soundPool.Play(GameSound.Error);
            }
            else
            {
                //judgement
                ArmyViz attackerViz = riskMap.GetArmyViz(stateManager.AttackSource);
                ArmyViz defenderViz = riskMap.GetArmyViz(stateManager.AttackDest);
                var     redIt = redDices.GetEnumerator();
                var     whiteIt = whiteDices.GetEnumerator();
                int     attackerLost = 0, defenderLost = 0;

                while (redIt.MoveNext() && whiteIt.MoveNext())
                {
                    if (redIt.Current.Value > whiteIt.Current.Value)
                    {
                        defenderLost++;
                    }
                    else
                    {
                        attackerLost++;
                    }
                }

                Debug.Assert(attackerViz.ArmyCount >= attackerLost + 1);
                Debug.Assert(defenderViz.ArmyCount >= defenderLost);

                bool attackerWin;
                //owner changing
                if (defenderViz.ArmyCount == defenderLost)  //win
                {
                    defenderViz.PlayerId   = stateManager.ActivePlayerId;
                    defenderViz.ArmyCount  = redDices.Count() - attackerLost;
                    attackerViz.ArmyCount -= redDices.Count();
                    attackerWin            = true;
                }
                else    //lose
                {
                    attackerViz.ArmyCount -= attackerLost;
                    defenderViz.ArmyCount -= defenderLost;
                    attackerWin            = false;
                }

                stateManager.AttackDiceDetected(attackerLost, defenderLost, attackerWin);

                if (attackerWin)
                {
                    soundPool.Play(GameSound.AttackWin);
                }
                else
                {
                    soundPool.Play(GameSound.AttackFail);
                }
            }

            refreshViews();
        }