Ejemplo n.º 1
0
        public void GameStartSendOut(IEnumerable <Tile> tiles)
        {
            var    pms = tiles.Select(SendOutImplement).ToArray();
            string log;
            int    pm1, pm2;

            if (pms.Length == 1)
            {
                log = Ls.SendOut1;
                pm1 = pm2 = 0;
            }
            else if (pms.Length == 2)
            {
                log = pms[0].Pokemon.Owner == pms[1].Pokemon.Owner ? Ls.SendOut2 : Ls.SendOut22;
                pm1 = pms[1].Id;
                pm2 = 0;
            }
            else
            {
                log = Ls.SendOut3;
                pm1 = pms[1].Id;
                pm2 = pms[2].Id;
            }
            ReportBuilder.ShowLog(log, pms[0].Id, pm1, pm2);
        }
Ejemplo n.º 2
0
        internal Controller(IGameSettings settings, IPokemonData[, ][] pms)
        {
            GameSettings = settings;
            Board        = new Board(GameSettings);

            Teams = new Team[2];
            var ppt = settings.Mode.PlayersPerTeam();

            for (int t = 0; t < Teams.Length; ++t)
            {
                var players = new Player[ppt];
                players[0] = new Player(this, t, 0, pms[t, 0]);
                if (ppt == 2)
                {
                    players[1] = new Player(this, t, 1, pms[t, 1]);
                }
                Teams[t] = new Team(t, players, settings);
            }

            ReportBuilder    = new ReportBuilder(this);
            SwitchController = new SwitchController(this);
            InputController  = new InputController(this);
            TurnController   = new TurnController(this);
#if TEST
            randomSeeds = new Random(1);
            random      = new Random(randomSeeds.Next());
#else
            random = new Random();
#endif
            Timer = new GoTimer(GameSettings.Mode.PlayersPerTeam() == 1 ? new Player[] { Teams[0].GetPlayer(0), Teams[1].GetPlayer(0) } : new Player[] { Teams[0].GetPlayer(0), Teams[0].GetPlayer(1), Teams[1].GetPlayer(0), Teams[1].GetPlayer(1) });
            Timer.Start();
        }
Ejemplo n.º 3
0
        private void Mega()
        {
            var m = false;

            foreach (var p in ActingPokemons)
            {
                p.BeforeMegaSpeed = p.Speed;
            }
            foreach (var p in ActingPokemons)
            {
                if (p.Action == PokemonAction.MoveAttached && p.SelectMega)
                {
                    if (p.Pokemon.Item == 0)
                    {
                        p.ShowLogPm(Ls.MegaPre384);
                    }
                    else
                    {
                        p.ShowLogPm("MegaPre", p.Pokemon.Item);
                    }
                    p.Pokemon.Mega = true;
                    p.ChangeForm(ITs.MegaForm(p.Pokemon.Item), true, "Mega");
                    p.CalculatePriority();
                    p.BeforeMegaSpeed = p.Speed; //mega速度刷新只对自己有效 雨天下mega轻快会变快,正常天气mega降雨不会使轻快队友变快
                    m = true;
                }
            }
            if (m)
            {
                ReportBuilder.AddHorizontalLine();
                ActingPokemons.Sort(MegaComparer);
            }
        }
Ejemplo n.º 4
0
        private void Mega()
        {
            var m = false;

            foreach (var p in ActingPokemons)
            {
                if (p.Action == PokemonAction.MoveAttached && p.SelectMega)
                {
                    if (p.Pokemon.Item == 0)
                    {
                        p.ShowLogPm(Ls.MegaPre384);
                    }
                    else
                    {
                        p.ShowLogPm("MegaPre", p.Pokemon.Item);
                    }
                    p.Pokemon.Mega = true;
                    p.ChangeForm(ITs.MegaForm(p.Pokemon.Item), true, "Mega");
                    m = true;
                }
            }
            if (m)
            {
                ReportBuilder.AddHorizontalLine();
            }
        }
Ejemplo n.º 5
0
 private void EndTurnEffects()
 {
     if (Controller.TurnNumber != 0)
     {
         SortTiles();
         EndTurn.Execute(Controller);
         ReportBuilder.AddHorizontalLine();
     }
 }
Ejemplo n.º 6
0
 private void Prepare()
 {
     Controller.Timer.NewTurn();
     ReportBuilder.NewTurn();
     SortTiles();
     SortActingPokemons();
     foreach (PokemonProxy p in ActingPokemons)
     {
         p.AttachBehaviors();
     }
 }
Ejemplo n.º 7
0
 private PokemonProxy SendOutImplement(Tile tile)
 {
     var origin = tile.WillSendOutPokemonIndex;
     var pm = Controller.GetPlayer(tile).GetPokemon(origin);
     pm.Action = PokemonAction.Debuting;
     tile.Pokemon = pm;
     tile.WillSendOutPokemonIndex = Tile.NOPM_INDEX;
     pm.OnboardPokemon = new OnboardPokemon(pm.Pokemon, tile.X);
     STs.SendingOut(pm);
     Controller.ActingPokemons.Insert(0, pm);
     ReportBuilder.SendOut(pm, origin);
     return pm;
 }
Ejemplo n.º 8
0
        private void Switch()
        {
LOOP:
            foreach (var p in ActingPokemons)
            {
                if (p.Action == PokemonAction.WillSwitch)
                {
                    p.Switch();
                    ReportBuilder.AddHorizontalLine();
                    goto LOOP; //ActingPokemons的顺序可能变化,重新查找第一个符合条件的精灵
                }
            }
        }
Ejemplo n.º 9
0
        private void Move()
        {
LOOP:
            var pm = Board.GetCondition <PokemonProxy>(Cs.NextActingPokemon);

            if (pm == null || !pm.CanMove)
            {
                pm = null;
                foreach (var p in ActingPokemons)
                {
                    if (p.CanMove && !p.OnboardPokemon.HasCondition(Cs.Quash))
                    {
                        pm = p;
                        break;
                    }
                }
            }
            if (pm == null)
            {
                foreach (var p in ActingPokemons)
                {
                    if (p.CanMove)
                    {
                        pm = p;
                        break;
                    }
                }
            }
            if (pm != null)
            {
                if (pm.OnboardPokemon.HasCondition(Cs.SkyDrop))
                {
                    pm.Action = PokemonAction.Done;
                }
                else
                {
                    pm.Move();
                    if (Controller.CanContinue)
                    {
                        ReportBuilder.AddHorizontalLine();
                    }
                    else
                    {
                        return;
                    }
                }
                goto LOOP;
            }
        }
Ejemplo n.º 10
0
 public bool Withdraw(PokemonProxy pm, string log, int arg1, bool canPursuit)
 {
     if (CanWithdraw(pm))
     {
         if (log != null) pm.ShowLogPm(log, arg1);
         STs.Withdrawing(pm, canPursuit);
         if (pm.Tile != null)
         {
             ReportBuilder.Withdraw(pm);
             var ability = pm.Ability;
             pm.Action = PokemonAction.InBall;
             pm.Tile.Pokemon = null;
             pm.OnboardPokemon = pm.NullOnboardPokemon;
             Controller.ActingPokemons.Remove(pm);
             ATs.Withdrawn(pm, ability);
             return true;
         }
     }
     return false;
 }
Ejemplo n.º 11
0
 private void NextTurn()
 {
     ATs.SlowStart(Controller);
     Board.ClearTurnCondition();
     foreach (var f in Board.Fields)
     {
         f.ClearTurnCondition();
     }
     foreach (var t in Tiles)
     {
         if (t.Pokemon != null)
         {
             t.Pokemon.OnboardPokemon.ClearTurnCondition();
             if (t.Pokemon.AtkContext != null)
             {
                 t.Pokemon.AtkContext.ClearTurnCondition();
             }
         }
         t.ClearTurnCondition();
     }
     ReportBuilder.Add(new GameEvents.EndTurn());
 }