public void UpdatePlayerMatchResult_ValidData_NormalResponse(int accountId, int place, int matchId)
        {
            //Arrange
            var warship = new Warship {
                Id = 1, AccountId = accountId, CurrentSkinTypeId = SkinTypeEnum.Hare, WarshipTypeId = WarshipTypeEnum.Hare
            };
            var account = new Account {
                Id = accountId, ServiceId = "", Username = "", Warships = new List <Warship> {
                    warship
                }
            };
            var matchResult = new MatchResult {
                Id = 1, MatchId = matchId, Warship = warship
            };
            var match = new DataLayer.Tables.Match {
                Id = matchId, GameServerIp = "", MatchResults = new List <MatchResult> {
                    matchResult
                }
            };

            DbContext.Accounts.Add(account);
            DbContext.Matches.Add(match);
            DbContext.SaveChanges();

            var service = GetSetUpService();

            //Act
            var result = service.UpdatePlayerMatchResultInDbAsync(accountId, place, matchId).Result;

            //Assert
            Assert.IsTrue(result, "Method returned false.");
            Assert.IsTrue(matchResult.IsFinished, "Match result was not marked as finished.");
            Assert.AreEqual(place, matchResult.PlaceInMatch, "Incorrect place in match.");
            Assert.AreEqual(accountId, matchResult.Transaction.AccountId, "Incorrect account id.");
        }
        public void UpdatePlayerMatchResult_WrongData_Exception(int accountId, int place, int matchId)
        {
            //Arrange
            var warship = new Warship {
                Id = 1, AccountId = 1, CurrentSkinTypeId = SkinTypeEnum.Hare, WarshipTypeId = WarshipTypeEnum.Hare
            };
            var account = new Account {
                Id = 1, ServiceId = "", Username = "", Warships = new List <Warship> {
                    warship
                }
            };
            var matchResult = new MatchResult {
                Id = 1, MatchId = 1, Warship = warship
            };
            var match = new DataLayer.Tables.Match {
                Id = 1, GameServerIp = "", MatchResults = new List <MatchResult> {
                    matchResult
                }
            };

            DbContext.Accounts.Add(account);
            DbContext.Matches.Add(match);
            DbContext.SaveChanges();

            var service = GetSetUpService();

            //Act
            service.UpdatePlayerMatchResultInDbAsync(accountId, place, matchId).Wait();

            //Assert
            Assert.Fail("Exception was not raised.");
        }
        public void FinishMatchAndWriteToDb_ValidData_NormalResponse()
        {
            //Arrange
            var match = new DataLayer.Tables.Match {
                Id = 1, GameServerIp = "", MatchResults = new List <MatchResult>(10)
            };

            for (var i = 1; i <= 10; i++)
            {
                var account = new Account {
                    Id = i, ServiceId = i.ToString(), Username = i.ToString()
                };
                var warship = new Warship {
                    Id = i, Account = account, CurrentSkinTypeId = SkinTypeEnum.Hare, WarshipTypeId = WarshipTypeEnum.Hare
                };
                match.MatchResults.Add(new MatchResult {
                    Id = i, Match = match, Warship = warship
                });
            }
            DbContext.Matches.Add(match);
            DbContext.SaveChanges();

            var service = GetSetUpService();

            //Act
            service.FinishMatchAndWriteToDbAsync(match.Id).Wait();

            //Assert
            Assert.IsTrue(match.MatchResults.All(r => r.IsFinished), "Match was not finished.");
        }
Exemple #4
0
    /// <summary>
    /// 布局蓝图的MOD部分
    /// </summary>
    /// <param name="tid">蓝图的TID</param>
    /// <param name="materialNode">MOD节点</param>
    private void LayoutBlueprintModList(uint tid, Transform modNode)
    {
        CfgEternityProxy cfg = GetConfig();

        Produce produce = cfg.GetProduceByKey(tid);

        Item     item     = cfg.GetItemByKey((uint)produce.ProductId);
        Category itemType = ItemTypeUtil.GetItemType(item.Type).MainType;

        int modCount = 0;

        if (itemType == Category.Warship)
        {
            Warship     ship      = cfg.GetWarshipByKey(item.Id);
            ModPosition modPosCfg = cfg.GetModPosition((uint)ship.ModPosition);
            modCount = modPosCfg.PositionsLength;
        }
        else if (itemType == Category.Weapon)
        {
            Weapon      weapon    = cfg.GetWeapon(item.Id);
            ModPosition modPosCfg = cfg.GetModPosition((uint)weapon.ModPosition);
            modCount = modPosCfg.PositionsLength;
        }

        LayoutModList(new int[modCount], modNode);
    }
        public static void SetupWarship(ref Warship setupWarship, int soldierAmount, int warshipDistance)
        {
            var totalDistance = 0.0;

            for (var i = 0; i < setupWarship.AmountOfTrips(soldierAmount); i++)
            {
                totalDistance += setupWarship.Swim(warshipDistance);
            }

            setupWarship.TotalFuelConsumption = totalDistance * setupWarship.FuelConsumption / 100;
        }
Exemple #6
0
 public static string OptimalVehicleCalculator(Tank checkTank, Warship checkWarship, Amfibia checkAmfibia)
 {
     if (checkTank.TotalFuelConsumption < checkWarship.TotalFuelConsumption &&
         checkTank.TotalFuelConsumption < checkAmfibia.TotalFuelConsumption)
     {
         return($"\nTank is the optimal vehicle with {checkTank.TotalFuelConsumption}L used");
     }
     if (checkWarship.TotalFuelConsumption < checkAmfibia.TotalFuelConsumption)
     {
         return($"\nWarship is the optimal vehicle with {checkWarship.TotalFuelConsumption}L used");
     }
     return($"\nAmfibia is the optimal vehicle with {checkAmfibia.TotalFuelConsumption}L used");
 }
Exemple #7
0
        public Warship BuildWarship(string name)
        {
            Warship warship = _factory.CreateWarship(name);

            if (warship == null)
            {
                return(null);
            }
            warship.Swim();
            warship.Shoot();
            warship.Reload();
            warship.Repair();
            return(warship);
        }
Exemple #8
0
        public async Task <bool> TryChange(string playerServiceId, int warshipId, string skinName)
        {
            //Корабль принаджлежит аккаунту?
            Warship warship = await dbContext.Warships
                              .Include(warship1 => warship1.Account)
                              .Where(warship1 => warship1.Id == warshipId && warship1.Account.ServiceId == playerServiceId)
                              .SingleOrDefaultAsync();

            if (warship == null)
            {
                return(false);
            }

            //У аккаунта куплен этот скин?
            SkinType skinType = await dbContext.Increments
                                .Include(increment => increment.Transaction)
                                .Include(increment => increment.SkinType)
                                .Where(increment => increment.IncrementTypeId == IncrementTypeEnum.Skin &&
                                       increment.Transaction.AccountId == warship.AccountId &&
                                       increment.WarshipId == warshipId &&
                                       increment.SkinType.Name == skinName)
                                .Select(increment => increment.SkinType)
                                .SingleOrDefaultAsync();

            bool isSkinBought = skinType != null;

            if (!isSkinBought)
            {
                return(false);
            }

            warship.CurrentSkinTypeId = skinType.Id;
            await dbContext.SaveChangesAsync();

            return(true);
        }
Exemple #9
0
    public IEnumerator TestFire_2WarShips_2ShipsFighting()
    {
        SceneManager.LoadScene("MainMenuScene");
        yield return(new WaitForSeconds(1));

        MainMenuSceneInit initializer = GameObject.Find("Initializer").GetComponent <MainMenuSceneInit>();

        initializer.ChangeScene("NewGameMapScene");
        yield return(new WaitForSeconds(1));

        GameApp gameApp = GameObject.Find("GameApp").GetComponent <GameApp>();

        gameApp.PersistAllParameters(SceneManager.GetActiveScene().name);
        gameApp.Parameters.Remove("ServerAddress");
        gameApp.Parameters.Remove("ServerPort");
        gameApp.Parameters.Add("ServerAddress", "127.0.0.1");
        gameApp.Parameters.Add("ServerPort", "9999");
        LevelLoader levelLoader = GameObject.Find("LevelLoader").GetComponent <LevelLoader>();

        levelLoader.LoadLevel("NewGameScene");
        yield return(new WaitForSeconds(1));

        NewGameSceneInit newGameSceneInit = GameObject.Find("Initializer").GetComponent <NewGameSceneInit>();

        newGameSceneInit.AddPlayer();
        newGameSceneInit.AddPlayer();
        List <GameApp.PlayerMenu> playerMenuList = new List <GameApp.PlayerMenu>();

        GameApp.PlayerMenu player1 = new GameApp.PlayerMenu
        {
            name       = "player1",
            password   = "******",
            race       = "human",
            playerType = "L"
        };
        GameApp.PlayerMenu player2 = new GameApp.PlayerMenu
        {
            name       = "player12",
            password   = "******",
            race       = "human",
            playerType = "L"
        };
        playerMenuList.Add(player1);
        playerMenuList.Add(player2);
        gameApp.SavePlayersFromMenu(playerMenuList);
        ServerNetworkManager serverNetworkManager = GameObject.Find("ServerNetworkManager").GetComponent <ServerNetworkManager>();

        serverNetworkManager.SetupNewGame();
        yield return(new WaitForSeconds(1));

        GameController gameController     = GameObject.Find("GameController").GetComponent <GameController>();
        GameObject     gameObjectKorriban = GameObject.Find("Korriban");
        GameObject     gameObjectWarShip  = Resources.Load("Object/Warship", typeof(GameObject)) as GameObject;
        Planet         Korriban           = gameObjectKorriban.GetComponent <Planet>();

        gameController.GetCurrentPlayer().minerals   = 100;
        gameController.GetCurrentPlayer().population = 100;
        gameController.GetCurrentPlayer().solarPower = 100;
        EventManager.selectionManager.SelectedObject = gameObjectKorriban;
        yield return(new WaitForSeconds(1));

        gameController.BuildSpaceship(gameObjectWarShip);
        yield return(new WaitForSeconds(1));

        GameObject gameObjectWarshipSpaceShip1 = GameObject.Find("Warship(Clone)");
        Warship    warShip1 = gameObjectWarshipSpaceShip1.GetComponent <Warship>();

        gameController.GetCurrentPlayer().engines = 100;
        warShip1.actionPoints = 100;
        gameController.GetCurrentPlayer().attack = 100;

        gameController.NextTurn();
        yield return(new WaitForSeconds(1));

        gameController.GetCurrentPlayer().minerals   = 100;
        gameController.GetCurrentPlayer().population = 100;
        gameController.GetCurrentPlayer().solarPower = 100;
        GameObject noVa = GameObject.Find("Nova");

        EventManager.selectionManager.SelectedObject = noVa;
        yield return(new WaitForSeconds(1));

        gameController.BuildSpaceship(gameObjectWarShip);
        yield return(new WaitForSeconds(1));

        GameObject gameObjectWarshipSpaceShip2 = GameObject.Find("Warship(Clone)");
        Warship    warShip2 = gameObjectWarshipSpaceShip2.GetComponent <Warship>();

        gameController.NextTurn();
        yield return(new WaitForSeconds(1));

        HexGrid grid = (GameObject.Find("HexGrid").GetComponent <HexGrid>());

        EventManager.selectionManager.SelectedObject = gameObjectWarshipSpaceShip1;
        yield return(new WaitForSeconds(1));

        HexCoordinates des = new HexCoordinates(warShip2.Coordinates.X - 1, warShip2.Coordinates.Z);

        grid.TouchCell(des);
        yield return(new WaitForSeconds(10));

        EventManager.selectionManager.TargetObject = gameObjectWarshipSpaceShip2;
        yield return(new WaitForSeconds(1));

        gameController.Attack();
        yield return(new WaitForSeconds(2));

        Assert.IsTrue(gameObjectWarshipSpaceShip2 == null);
    }
        public void UpdatePlayerMatchResult_RewardCalculations_NormalResponse(int lootboxReward, int softCurrencyReward, int ratingReward)
        {
            //Arrange
            var warship = new Warship {
                Id = 1, AccountId = 1, CurrentSkinTypeId = SkinTypeEnum.Hare, WarshipTypeId = WarshipTypeEnum.Hare
            };
            var account = new Account {
                Id = 1, ServiceId = "", Username = "", Warships = new List <Warship> {
                    warship
                }
            };
            var matchResult = new MatchResult {
                Id = 1, MatchId = 1, Warship = warship
            };
            var match = new DataLayer.Tables.Match {
                Id = 1, GameServerIp = "", MatchResults = new List <MatchResult> {
                    matchResult
                }
            };

            DbContext.Accounts.Add(account);
            DbContext.Matches.Add(match);
            DbContext.SaveChanges();

            var service = GetSetUpService(lootboxReward, softCurrencyReward, ratingReward);

            //Act
            var result = service.UpdatePlayerMatchResultInDbAsync(1, 1, 1).Result;

            //Assert
            var transaction = matchResult.Transaction;

            Assert.IsTrue(result, "Method returned false.");
            Assert.IsFalse(transaction.WasShown, "Transaction was shown.");

            var increments = transaction.Increments;
            var decrements = transaction.Decrements;

            Assert.IsTrue(increments.All(i => i.MatchRewardTypeId == MatchRewardTypeEnum.RankingReward), "Incorrect reward type.");

            CheckReward(lootboxReward, IncrementTypeEnum.LootboxPoints, DecrementTypeEnum.LootboxPoints, "lootbox");
            CheckReward(softCurrencyReward, IncrementTypeEnum.SoftCurrency, DecrementTypeEnum.SoftCurrency, "soft currency");
            CheckReward(ratingReward, IncrementTypeEnum.WarshipRating, DecrementTypeEnum.WarshipRating, "rating", true);

            void CheckReward(int expectedReward, IncrementTypeEnum incrementType, DecrementTypeEnum decrementType, string rewardName, bool canHaveDecrement = false)
            {
                var increment = increments.SingleOrDefault(i => i.IncrementTypeId == incrementType);
                var decrement = decrements.SingleOrDefault(d => d.DecrementTypeId == decrementType);

                // ReSharper disable PossibleNullReferenceException
                if (expectedReward > 0)
                {
                    Assert.AreEqual(expectedReward, increment.Amount, $"Incorrect {rewardName} increment.");
                    Assert.IsNull(decrement, $"The {rewardName} decrement was not null.");
                }
                else if (expectedReward < 0 && canHaveDecrement)
                {
                    Assert.IsNull(increment, $"The {rewardName} increment was not null.");
                    Assert.AreEqual(-expectedReward, decrement.Amount, $"Incorrect {rewardName} decrement.");
                }
                else
                {
                    Assert.IsNull(increment, $"The {rewardName} increment was not null.");
                    Assert.IsNull(decrement, $"The {rewardName} decrement was not null.");
                }
                // ReSharper restore PossibleNullReferenceException
            }
        }
Exemple #11
0
        static void Main(string[] args)
        {
            WarShip   NavePlayer      = new WarShip("Bob Nelson", 100, 30, 1, 10, 10, false);
            CargoShip NavePlayerCena2 = new CargoShip("Bob Nelson", 200, 30, 1, 10, 10);
            WarShip   NaveInimigo1    = new WarShip("inimigoTeste1", 100, 1, 1, 15, 20, true);
            WarShip   NaveInimigo2    = new WarShip("inimigoTeste2", 100, 1, 1, 10, 20, true);
            WarShip   NaveInimigo3    = new WarShip("inimigoTeste3", 100, 1, 1, 5, 20, true);

            WarShip []      NavesEmJogo    = new Warship[] { NavePlayer, NaveInimigo1, NaveInimigo2, NaveInimigo3 };
            int             cena           = 1;
            int             delayTiro      = 1;
            int             delayMeteoros  = 1;
            bool            verificarDanos = false;
            bool            atirou         = false;
            int             ação           = 0;
            List <Projetil> ListaTiros     = new List <Projetil>();
            List <Meteoro>  ListaMeteoros  = new List <Meteoro>();

            ListaMeteoros.Add(new Meteoro(10, 0, NavePlayer.Posição[1] - 1));
            string[,] Campo;
            Campo = new string[20, 20];
            while (NavePlayer.Energia > 0)
            {
                DelimitarEspaço();
                if (atirou)
                {
                    AtirarPlayer();
                    atirou = false;
                }
                Colisoes();
                DeterminarEspaços();
                DesenharEspaço();
                FimDeJogo();
                foreach (Projetil elemento in ListaTiros)
                {
                    elemento.MovimentaçãoTiro();
                }
                foreach (Meteoro elementoMeteoro in ListaMeteoros)
                {
                    elementoMeteoro.Posição[0] += 1;
                }
                ação = int.Parse(Console.ReadLine());

                switch (ação)
                {
                case 5:
                    if (cena == 1)
                    {
                        atirou = true;
                    }
                    break;

                case 0:
                    verificarDanos = true;
                    break;

                case 8:
                    NavePlayer.MoverCima();
                    NavePlayer.LimitarEspaço();
                    break;

                case 2:
                    NavePlayer.MoverBaixo();
                    NavePlayer.LimitarEspaço();
                    break;

                case 6:
                    NavePlayer.MoverDireita();
                    NavePlayer.LimitarEspaço();
                    break;

                case 4:
                    NavePlayer.MoverEsquerda();
                    NavePlayer.LimitarEspaço();
                    break;
                }
                AtirarInimigo();
                CriarMeteoros();
                Console.Clear();
            }

            while (NavePlayer.Energia > 0)
            {
            }


            Console.Read();

            void DesenharEspaço()
            {
                for (int i = 0; i < 20; i++)
                {
                    for (int j = 0; j < 20; j++)
                    {
                        Console.Write(Campo[i, j]);
                    }
                    Console.WriteLine("");
                }
                if (verificarDanos == true)
                {
                    Console.WriteLine($"{NavePlayer.VerificarDanos()}\n(5)Ataque\n(0)Dano\n(8)Cima\n(2)Baixo\n" +
                                      "(6)Direira\n(4)Esquerda\n");
                    verificarDanos = false;
                }
                else
                {
                    Console.WriteLine("\n(5)Ataque\n(0)Dano\n(8)Cima\n(2)Bbaixo\n" +
                                      "(6)Direita\n(4)Esquerda\n");
                }
            }

            void DelimitarEspaço()
            {
                for (int i = 0; i < 20; i++)
                {
                    for (int j = 0; j < 20; j++)
                    {
                        Campo[i, j] = "    ";
                    }
                }
            }

            void DeterminarEspaços()
            {
                foreach (Warship Naves in NavesEmJogo)
                {
                    for (int i = 0; i < 20; i++)
                    {
                        for (int j = 0; j < 20; j++)
                        {
                            if (Naves.Posição[0] == i + 1 && Naves.Posição[1] == j + 1)
                            {
                                if (Naves.EInimigo == true && Naves.Vivo == true)
                                {
                                    Campo[i, j] = "<=E   ";
                                }
                                else if (Naves.EInimigo == false && Naves.Vivo == true)
                                {
                                    Campo[i, j] = "B=>   ";
                                }
                                else
                                {
                                }
                            }
                            if (ListaTiros.Count > 0)
                            {
                                foreach (Projetil elemento in ListaTiros)
                                {
                                    if (elemento.Posição[0] == i && elemento.Posição[1] == j)
                                    {
                                        if (elemento.VeldeTiro > 0)
                                        {
                                            Campo[i, j] = "*   ";
                                        }
                                        else
                                        {
                                            Campo[i, j] = "-   ";
                                        }
                                    }
                                }
                            }
                            if (ListaMeteoros.Count > 0)
                            {
                                foreach (Meteoro elementoAsteroide in ListaMeteoros)
                                {
                                    if (elementoAsteroide.Posição[0] == i && elementoAsteroide.Posição[1] == j)
                                    {
                                        Campo[i, j] = "O   ";
                                    }
                                }
                            }
                        }
                    }
                }
            }

            void AtirarPlayer()
            {
                atirou = true;
                ListaTiros.Add(new Projetil(10, 1, NavePlayer.Posição[0] - 1, NavePlayer.Posição[1]));
            }

            void AtirarInimigo()
            {
                foreach (Nave elementoNave in NavesEmJogo)
                {
                    if (elementoNave.EInimigo && elementoNave.Vivo && delayTiro >= 5)
                    {
                        ListaTiros.Add(new Projetil(10, -1, elementoNave.Posição[0] - 1, elementoNave.Posição[1] - 2));
                        delayTiro = 0;
                    }
                    delayTiro += 1;
                }
            }

            void Colisoes()
            {
                foreach (Projetil elementoTiro in ListaTiros)
                {
                    foreach (Nave elementoNave in NavesEmJogo)
                    {
                        if (elementoTiro.Posição[0] + 1 == elementoNave.Posição[0] && elementoTiro.Posição[1] + 1 == elementoNave.Posição[1])
                        {
                            elementoNave.LevarDano(elementoTiro.ForcaTiro);
                        }
                    }
                }
                foreach (Meteoro elementoMeteoro in ListaMeteoros)
                {
                    if (elementoMeteoro.Posição[0] + 1 == NavePlayer.Posição[0] && elementoMeteoro.Posição[1] + 1 == NavePlayer.Posição[1])
                    {
                        NavePlayer.LevarDano(elementoMeteoro.Dano);
                    }
                }
            }

            void FimDeJogo()
            {
                if (NavePlayer.Vivo == false || NavePlayer.NivelCombustivel <= 0)
                {
                    Console.Clear();
                    Console.WriteLine("A carga foi perdida. Fim de Jogo.");
                    Console.ReadLine();
                    Environment.Exit(0);
                }
                else if (NaveInimigo1.Vivo == false &&
                         NaveInimigo2.Vivo == false &&
                         NaveInimigo3.Vivo == false)
                {
                    Console.Clear();
                    Console.WriteLine("Bob Nelson passou pela armadilha dos piratas do espaço e entregou a carga. Fim de Jogo.");
                    Console.ReadLine();
                    Environment.Exit(0);
                }
                else
                {
                    return;
                }
            }

            void CriarMeteoros()
            {
                if (delayMeteoros >= 5)
                {
                    ListaMeteoros.Add(new Meteoro(10, 0, NavePlayer.Posição[1] - 1));
                    delayMeteoros = 0;
                }
                else
                {
                    delayMeteoros += 1;
                }
            }
        }
        static void Main(string[] args)
        {
            #region Strategy
            Console.WriteLine("------------Strategy------------------");
            Console.WriteLine("\r\n ------Strategy Test");
            {
                CashNormal cn = new CashNormal();
                Context    ct = new Context(cn);
                ct.PayAmount(100);

                CashDiscount cd = new CashDiscount(0.1);
                ct = new Context(cd);
                ct.PayAmount(100);

                CashReturn cr = new CashReturn(300, 100);
                ct = new Context(cr);
                ct.PayAmount(400);
            }
            #endregion

            #region Observer
            Console.WriteLine("------------Observer------------------");
            Console.WriteLine("\r\n ------Observer Test");
            SydneyStock   ss  = new SydneyStock();
            StockObserver ob1 = new StockObserver();
            ss.Register(ob1);
            ss.Notify(100);
            ss.Register(new StockObserver());
            ss.Notify(200);
            ss.Unregister(ob1);
            ss.Notify(300);
            #endregion

            #region Factory
            Console.WriteLine("------------Factory------------------");
            Console.WriteLine("\r\n ------Factory Test");
            WarshipFactory wf = new WarshipFactory();
            String         s  = "A";
            Warship        ws = wf.GetWarship(s);
            if (ws != null)
            {
                ws.Fight();
            }

            s  = "B";
            ws = wf.GetWarship(s);
            if (ws != null)
            {
                ws.Fight();
            }
            #endregion

            #region Abstract Factory
            Console.WriteLine("------------Abstract Factory------------------");
            Console.WriteLine("\r\n ------Abstract Factory Test");
            IRestaurant ir = new ChineseRestaurant();
            IVegetable  iv = ir.CookVegetable();
            iv.Display();
            IMeat im = ir.CookMeat();
            im.Display();

            ir = new AustralianRestaurant();
            iv = ir.CookVegetable();
            iv.Display();
            im = ir.CookMeat();
            im.Display();
            #endregion

            #region Singleton
            Console.WriteLine("------------Singleton------------------");
            Console.WriteLine("\r\n ------Singleton Test");
            MySingleton ms1 = MySingleton.GetInstance();
            MySingleton ms2 = MySingleton.GetInstance();
            if (ms1 == ms2)
            {
                Console.WriteLine("Same Instance of Singleton");
            }
            #endregion

            #region Builder
            Console.WriteLine("------------Builder------------------");
            Console.WriteLine("\r\n ------Builder Test");
            {
                IPersonBuilder        pb  = new FatPersonBuilder();
                PersonBuilderDirector pbd = new PersonBuilderDirector(pb);
                pbd.BuildPerson();
                pbd = new PersonBuilderDirector(new ThinPersonBuilder());
                pbd.BuildPerson();
            }
            #endregion

            #region AdvanceBuilder
            Console.WriteLine("\r\n ------AdvanceBuilder Test");
            {
                PersonBuilderDirectorBase pbd = new PersonBuilderDirector1();
                pbd.SetPersonBuilder(new FatPersonBuilder());
                pbd.BuildPerson();
                pbd.SetPersonBuilder(new ThinPersonBuilder());
                pbd.BuildPerson();
                Console.WriteLine();
                pbd = new PersonBuilderDirector2();
                pbd.SetPersonBuilder(new FatPersonBuilder());
                pbd.BuildPerson();
                pbd.SetPersonBuilder(new ThinPersonBuilder());
                pbd.BuildPerson();
            }
            #endregion

            #region Prototype
            Console.WriteLine("------------Prototype------------------");
            Resume r1 = new Resume();
            r1.id   = 1;
            r1.Name = "P1";
            r1.Experience.Company = "C1";
            Console.WriteLine(r1);
            Resume r2 = (Resume)r1.Clone();
            r2.id   = 2;
            r2.Name = "P2";
            r2.Experience.Company = "C2";
            Console.WriteLine(r2);
            #endregion

            #region Decorator
            Console.WriteLine("------------Decorator------------------");
            Pizza        pp = new PlainPizza();
            ToppingPizza tp = new Mozzarella(pp);
            ToppingPizza ts = new TomatoSauce(tp);
            ts.GetDescription();

            #endregion

            #region Command
            Console.WriteLine("------------Command------------------");
            Cook            barbecuerCook    = new BarbecuerCook();
            Cook            fryDishCook      = new FryDishCook();
            Command.Command barbecuerCommand = new BarbecuerCommand(barbecuerCook);
            Command.Command fryDishCommand   = new FryDishCommand(fryDishCook);

            Waiter waiter = new Waiter();
            waiter.AddCommand(barbecuerCommand);
            waiter.AddCommand(fryDishCommand);
            waiter.Notify();

            #endregion

            #region Adapter
            Console.WriteLine("------------Adapter------------------");
            BasketballPlayer        bp1 = new Forward();
            BasketballPlayer        bp2 = new Guard();
            ChineseCenter           cc  = new ChineseCenter();
            BasketballPlayer        bp3 = new CenterInterPreter(cc);
            List <BasketballPlayer> bps = new List <BasketballPlayer>();
            bps.Add(bp1);
            bps.Add(bp2);
            bps.Add(bp3);
            foreach (var item in bps)
            {
                item.Attack();
                item.Defense();
            }
            #endregion

            #region Facade
            Console.WriteLine("------------Facade------------------");
            FundFacade ff = new FundFacade();
            ff.Buy();
            ff.Sell();
            #endregion


            #region Bridge
            {
                Console.WriteLine("------------Bridge---------------------");
                IProtocol     udp = new Bridge.Udp();
                IProtocol     tcp = new Bridge.Tcp();
                Communication c   = new Communication();
                c.SetProtocol(udp);
                c.Work();
                c.SetProtocol(tcp);
                c.Work();
            }
            #endregion

            #region Template
            {
                Console.WriteLine("------------Template-----------------------");
                MediaProtocol tcp = new Template.Tcp();
                tcp.Work();
                MediaProtocol udp = new Template.Udp();
                udp.Work();
            }

            #endregion

            #region Composite
            {
                Console.WriteLine("------------Composite-----------------------");
                FileComponent First = new FileFolder()
                {
                    Name = "C"
                };
                FileComponent second1 = new FileFolder()
                {
                    Name = "-Folder1"
                };
                FileComponent second2 = new File()
                {
                    Name = "-File2"
                };
                FileComponent second1_1 = new File()
                {
                    Name = "--File1_1"
                };
                second1.Add(second1_1);
                First.Add(second1);
                First.Add(second2);
                First.Display();
            }
            #endregion

            Console.ReadLine();
        }