示例#1
0
        public void backInTableRoom(string Login)
        {
            ActionPlayer Player = Ap.ActionPlayers.Where(o => o.Name == Login).FirstOrDefault();

            if (Player.idRoom != 0)
            {
                ClientRoomModel roomModel = Rb.ClientRoomModels.Where(o => o.id == Player.idRoom).FirstOrDefault();
                if (roomModel.nameGod == Player.Name)
                {
                    Rb.ClientRoomModels.Remove(roomModel);
                    Rb.SaveChanges();
                    Clients.Group("WaitPlayer").upDateTableRoom();
                    Clients.Group(Player.idRoom.ToString()).upDateTableRoom();
                    Player.idRoom = 0;
                    if (roomModel.nameSecondPlayer != "")
                    {
                        ActionPlayer SecondPlayer = Ap.ActionPlayers.Where(o => o.Name == roomModel.nameSecondPlayer).FirstOrDefault();
                        SecondPlayer.idRoom = 0;
                    }
                    Ap.SaveChanges();
                }
                else
                {
                    roomModel.nameSecondPlayer = "";
                    roomModel.numberPlayer--;
                    Rb.SaveChanges();
                    Clients.Group("WaitPlayer").upDateTableRoom();
                    Clients.OthersInGroup(Player.idRoom.ToString()).upDateRoom();

                    Player.idRoom = 0;
                    Ap.SaveChanges();
                    Clients.Caller.upDateTableRoom();
                }
            }
        }
示例#2
0
        //Отобразить комнату
        public void viewRoomGroup(string user, string nameroom, string password)
        {
            ClientRoomModel model = new ClientRoomModel();

            var currentUser = user;



            model.name             = nameroom;
            model.password         = password;
            model.nameFirstPlayer  = currentUser;
            model.nameSecondPlayer = "";
            model.nameGod          = currentUser;
            model.numberPlayer     = 1;
            Rb.ClientRoomModels.Add(model);
            Rb.SaveChanges();


            ActionPlayer player = Ap.ActionPlayers.Where(o => o.Name == currentUser).FirstOrDefault();

            player.idRoom = model.id;
            Ap.SaveChanges();
            Clients.Group("WaitPlayer").UpDateTableRoom();
            Clients.Caller.upDateRoom();
        }
示例#3
0
        public ActionResult ClientRoom(ClientRoomModel model)
        {
            ViewBag.name           = "";
            model.nameFirstPlayer  = "";
            model.nameSecondPlayer = "";


            if (HttpContext.Request.UrlReferrer == null)
            {
                return(RedirectToAction("Register", "Account"));
            }

            //Проверка авторизации
            if (Request.Cookies["Login"] == null)
            {
                return(RedirectToAction("Register", "Account"));
            }

            currentUser = Request.Cookies["Login"].Value;


            if (Request.Cookies["Login"] != null)
            {
                ViewBag.name = Request.Cookies["Login"].Value;
            }



            ViewBag.RoomBase = Rb.ClientRoomModels;

            return(View(model));
        }
示例#4
0
        public void getActiveMomentCard(string Login)
        {
            ActionPlayer    Player = Ap.ActionPlayers.Where(o => o.Name == Login).FirstOrDefault();
            var             idRoom = Player.idRoom;
            ClientRoomModel model  = Rb.ClientRoomModels.Where(o => o.id == Player.idRoom).FirstOrDefault();

            if (model.nameGod == Player.Name)
            {
                Clients.Caller.getMoment(model.firstPLayerActiveCard);
            }
            else
            {
                Clients.Caller.getMoment(model.secondPLayerActiveCard);
            }
        }
示例#5
0
        //Описание битвы
        public void battleround(string cardId, string Login)
        {
            ActionPlayer    Player = Ap.ActionPlayers.Where(o => o.Name == Login).FirstOrDefault();
            var             idRoom = Player.idRoom;
            ClientRoomModel model  = Rb.ClientRoomModels.Where(o => o.id == Player.idRoom).FirstOrDefault();

            //Если разыграын обе карты
            if ((model.firstPLayerActiveCard == true) && (model.secondPLayerActiveCard == true))
            {
                CardModel card1 = Cb.CardModels.Where(o => o.number == model.idFirstPlayerCad).FirstOrDefault();
                CardModel card2 = Cb.CardModels.Where(o => o.number == model.idSecondPlayerCad).FirstOrDefault();

                var win = Winner(card1, card2, model);

                switch (win)
                {
                case 0:
                    Clients.Group(idRoom.ToString()).resultbattle("Раунд отложен", model.vPointFerstPlayer, model.vPointSecondPlayer);
                    break;

                case 1:
                    Clients.Group(idRoom.ToString()).resultbattle("Раунд Победа синих", model.vPointFerstPlayer, model.vPointSecondPlayer);
                    break;

                case 2:
                    Clients.Group(idRoom.ToString()).resultbattle("Раунд Победа красных", model.vPointFerstPlayer, model.vPointSecondPlayer);
                    break;

                case 3:
                    Clients.Group(idRoom.ToString()).resultbattle("Конец игры: Победа синих");
                    Clients.Group(idRoom.ToString()).upDateRoom();
                    return;

                case 4:
                    Clients.Group(idRoom.ToString()).resultbattle("Конец игры: Победа красных");
                    Clients.Group(idRoom.ToString()).upDateRoom();
                    return;

                case 5:
                    Clients.Group(idRoom.ToString()).resultbattle("Конец игры: ничья");
                    Clients.Group(idRoom.ToString()).upDateRoom();
                    return;

                default:
                    break;
                }
            }
        }
示例#6
0
        public ActionResult CreatedRoom()
        {
            //Проверка авторизации
            if (Request.Cookies["Login"] == null)
            {
                return(RedirectToAction("Register", "Account"));
            }

            currentUser = Request.Cookies["Login"].Value;

            ActionPlayer player = Ap.ActionPlayers.Where(o => o.Name == currentUser).FirstOrDefault();

            ClientRoomModel model = Rb.ClientRoomModels.Where(o => o.id == player.idRoom).FirstOrDefault();

            return(View(model));
        }
示例#7
0
        //присоединиться к комнате
        public void joinRoomGroup(string user, string idroom)
        {
            var currentUser = user;

            ActionPlayer    player        = Ap.ActionPlayers.Where(o => o.Name == currentUser).FirstOrDefault();
            int             integerIdRoom = Int32.Parse(idroom);
            ClientRoomModel model         = Rb.ClientRoomModels.Where(o => o.id == integerIdRoom).FirstOrDefault();

            if (model.numberPlayer < 2)
            {
                player.idRoom = Int32.Parse(idroom);
                Ap.SaveChanges();
                model.nameSecondPlayer = player.Name;
                model.numberPlayer    += 1;
                Rb.SaveChanges();
                Clients.OthersInGroup("WaitPlayer").UpDateTableRoom();
                Clients.Caller.upDateRoom();
                Clients.Group(idroom).upDateRoom();
            }
        }
示例#8
0
        public void startgame(string Login, int flag)
        {
            ActionPlayer    Player = Ap.ActionPlayers.Where(o => o.Name == Login).FirstOrDefault();
            var             idRoom = Player.idRoom;
            ClientRoomModel model  = Rb.ClientRoomModels.Where(o => o.id == Player.idRoom).FirstOrDefault();

            if ((flag == 0) && (model.nameGod == Player.Name) && (model.numberPlayer == 2))
            {
                model.firstPLayerActiveCard  = false;
                model.secondPLayerActiveCard = false;
                model.delayedRound           = 0;
                model.P1bonusLegate          = 0;
                model.P2bonusLegate          = 0;
                model.P1bonusGeneral         = 0;
                model.P2bonusGeneral         = 0;
                model.vPointFerstPlayer      = 0;
                model.vPointSecondPlayer     = 0;
                model.numberRound            = 0;
                model.P1bonusSpook           = 0;
                model.P2bonusSpook           = 0;
                Rb.SaveChanges();
                Clients.Group(idRoom.ToString()).startGame(idRoom);
            }
            //Если начало игры
            if (flag == 1)
            {
                if (model.nameGod == Player.Name)
                {
                    Player.ColorTeam = "С";
                    Ap.SaveChanges();
                }
                else
                {
                    Player.ColorTeam = "K";
                    Ap.SaveChanges();
                }
                Groups.Add(Context.ConnectionId, idRoom.ToString());
                Clients.Caller.generatedTeam(Player.ColorTeam);
            }
        }
示例#9
0
        public void inputCard(string cardId, string Login)
        {
            ActionPlayer    Player = Ap.ActionPlayers.Where(o => o.Name == Login).FirstOrDefault();
            var             idRoom = Player.idRoom;
            ClientRoomModel model  = Rb.ClientRoomModels.Where(o => o.id == Player.idRoom).FirstOrDefault();

            if (model.nameGod == Player.Name)
            {
                model.firstPLayerActiveCard = true;
                model.idFirstPlayerCad      = Int32.Parse(cardId);
                Clients.Caller.getboolcard(model.firstPLayerActiveCard);
                if (model.secondPLayerActiveCard == true)
                {
                    Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 1);
                    if (model.P1bonusSpook == 0)
                    {
                        Clients.Caller.enemyCard(model.idSecondPlayerCad.ToString(), "K", 1);
                    }
                    else
                    {
                        model.P1bonusSpook = 0;
                    }
                }
                else
                {
                    if (model.P2bonusSpook != 0)
                    {
                        Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 1);
                    }
                    else
                    {
                        Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 0);
                        if (model.P1bonusSpook != 0)
                        {
                            model.P1bonusSpook = 0;
                        }
                    }
                }
            }
            else
            {
                model.secondPLayerActiveCard = true;
                model.idSecondPlayerCad      = Int32.Parse(cardId);
                Clients.Caller.getboolcard(model.secondPLayerActiveCard);
                if (model.firstPLayerActiveCard == true)
                {
                    Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 1);
                    if (model.P2bonusSpook == 0)
                    {
                        Clients.Caller.enemyCard(model.idFirstPlayerCad.ToString(), "С", 1);
                    }
                    else
                    {
                        model.P2bonusSpook = 0;
                    }
                }
                else
                {
                    if (model.P1bonusSpook != 0)
                    {
                        Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 1);
                    }
                    else
                    {
                        Clients.OthersInGroup(idRoom.ToString()).enemyCard(cardId, Player.ColorTeam, 0);
                        if (model.P2bonusSpook != 0)
                        {
                            model.P2bonusSpook = 0;
                        }
                    }
                }
            }
            Rb.SaveChanges();


            battleround(cardId, Login);
        }
示例#10
0
        //Определить победителя
        int Winner(CardModel card1, CardModel card2, ClientRoomModel model)
        {
            bool win1 = false;
            bool win2 = false;

            //Матрица правил
            int[,] rule = new int[8, 8] {
                { 0, 1, 1, 1, 1, 1, 2, 0 },
                { 2, 0, 1, 1, 2, 1, 1, 0 },
                { 2, 2, 0, 1, 1, 1, 1, 1 },
                { 2, 2, 2, 0, 2, 1, 1, 0 },
                { 2, 1, 2, 1, 0, 2, 2, 0 },
                { 2, 2, 2, 2, 1, 0, 1, 0 },
                { 1, 2, 2, 2, 1, 2, 0, 0 },
                { 0, 0, 2, 0, 0, 0, 0, 0 }
            };

            var stregth1 = card1.strength;
            var stregth2 = card2.strength;

            //Если в раунде побеждает принцесса.
            if (card1.id == 2 || card2.id == 2)
            {
                if (card1.id == 2 && card2.id == 8)
                {
                    return(3);
                }

                if (card2.id == 2 && card1.id == 8)
                {
                    return(4);
                }
            }

            //Если кто-то сыграл посла, активация свойства
            if (card1.number == 4 || card2.number == 4)
            {
                if (card1.number == 4)
                {
                    model.P1bonusLegate = 2;
                }
                if (card2.number == 4)
                {
                    model.P2bonusLegate = 2;
                }
            }

            //Активация навыка шпиона
            if (card1.number == 2 || card2.number == 2)
            {
                if (card1.number == 2 && card2.number != 5)
                {
                    model.P1bonusSpook = 1;
                }
                if (card2.number == 2 && card1.number != 5)
                {
                    model.P2bonusSpook = 1;
                }
                if (card2.number == 2 && card1.number == 2)
                {
                    model.P1bonusSpook = 0;
                    model.P2bonusSpook = 0;
                }
            }



            //Просчёт раунда с учётом свойства генерала
            if (model.P1bonusGeneral != 0 || model.P2bonusGeneral != 0)
            {
                if (model.P1bonusGeneral != 0)
                {
                    stregth1            += model.P1bonusGeneral;
                    model.P1bonusGeneral = 0;
                }
                if (model.P2bonusGeneral != 0)
                {
                    stregth2            += model.P2bonusGeneral;
                    model.P2bonusGeneral = 0;
                }

                if (card1.number != 0 && card2.number != 0)

                {
                    if (stregth1 > stregth2)
                    {
                        if (card2.number == 3)
                        {
                            if (model.P2bonusLegate != 0)
                            {
                                model.vPointSecondPlayer += model.P2bonusLegate;
                                model.P2bonusLegate       = 0;
                            }
                            else
                            {
                                model.vPointSecondPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (model.P1bonusLegate != 0)
                            {
                                model.P1bonusLegate = 0;
                            }

                            if (model.delayedRound != 0)
                            {
                                model.vPointSecondPlayer = model.vPointSecondPlayer + model.delayedRound;
                                model.delayedRound       = 0;
                            }
                            win2 = true;
                        }
                        else
                        {
                            if (model.P1bonusLegate != 0)
                            {
                                model.vPointFerstPlayer += model.P1bonusLegate;
                                model.P1bonusLegate      = 0;
                            }
                            else
                            {
                                model.vPointFerstPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (model.P2bonusLegate != 0)
                            {
                                model.P2bonusLegate = 0;
                            }

                            if (model.delayedRound != 0)
                            {
                                model.vPointFerstPlayer = model.vPointFerstPlayer + model.delayedRound;
                                model.delayedRound      = 0;
                            }
                            win1 = true;
                        }
                    }
                    if (stregth2 > stregth1)
                    {
                        if (card1.number == 3)
                        {
                            if (model.P1bonusLegate != 0)
                            {
                                model.vPointFerstPlayer += model.P1bonusLegate;
                                model.P1bonusLegate      = 0;
                            }
                            else
                            {
                                model.vPointFerstPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (model.P2bonusLegate != 0)
                            {
                                model.P2bonusLegate = 0;
                            }

                            if (model.delayedRound != 0)
                            {
                                model.vPointFerstPlayer = model.vPointFerstPlayer + model.delayedRound;
                                model.delayedRound      = 0;
                            }
                            win1 = true;
                        }
                        else
                        {
                            if (model.P2bonusLegate != 0)
                            {
                                model.vPointSecondPlayer += model.P2bonusLegate;
                                model.P2bonusLegate       = 0;
                            }
                            else
                            {
                                model.vPointSecondPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (model.P1bonusLegate != 0)
                            {
                                model.P1bonusLegate = 0;
                            }

                            if (model.delayedRound != 0)
                            {
                                model.vPointSecondPlayer = model.vPointSecondPlayer + model.delayedRound;
                                model.delayedRound       = 0;
                            }
                            win2 = true;
                        }
                    }

                    if (stregth1 == stregth2)
                    {
                        model.delayedRound++;
                    }
                }
                else
                {
                    model.delayedRound++;
                }
            }
            //Обычный просчёт игры
            else
            {
                int win = rule[7 - stregth2, 7 - stregth1];
                switch (win)
                {
                case 0:
                    model.delayedRound++;
                    break;

                case 1:
                    if (model.P2bonusLegate != 0)
                    {
                        model.vPointSecondPlayer += model.P2bonusLegate;
                        model.P2bonusLegate       = 0;
                    }
                    else
                    {
                        model.vPointSecondPlayer++;
                    }

                    //Отменяем навык вражеского посла
                    if (model.P1bonusLegate != 0)
                    {
                        model.P1bonusLegate = 0;
                    }

                    if (model.delayedRound != 0)
                    {
                        model.vPointSecondPlayer = model.vPointSecondPlayer + model.delayedRound;
                        model.delayedRound       = 0;
                    }
                    win2 = true;
                    break;

                case 2:
                    if (model.P1bonusLegate != 0)
                    {
                        model.vPointFerstPlayer += model.P1bonusLegate;
                        model.P1bonusLegate      = 0;
                    }
                    else
                    {
                        model.vPointFerstPlayer++;
                    }

                    //Отменяем навык вражеского посла
                    if (model.P2bonusLegate != 0)
                    {
                        model.P2bonusLegate = 0;
                    }

                    if (model.delayedRound != 0)
                    {
                        model.vPointFerstPlayer = model.vPointFerstPlayer + model.delayedRound;
                        model.delayedRound      = 0;
                    }
                    win1 = true;
                    break;
                }
            }

            //Если кто-то сыграл Генерала, активация свойства
            if (card1.number == 6 || card2.number == 6)
            {
                if (card1.number == 6 && card2.number != 5)
                {
                    model.P1bonusGeneral = 2;
                }

                if (card2.number == 6 && card1.number != 5)
                {
                    model.P2bonusGeneral = 2;
                }
            }


            model.numberRound++;
            model.firstPLayerActiveCard  = false;
            model.secondPLayerActiveCard = false;
            Rb.SaveChanges();


            if (model.numberRound == 8)
            {
                if (model.vPointFerstPlayer > model.vPointSecondPlayer)
                {
                    return(3);
                }
                if (model.vPointFerstPlayer < model.vPointSecondPlayer)
                {
                    return(4);
                }
                if (model.vPointFerstPlayer == model.vPointSecondPlayer)
                {
                    return(5);
                }
            }

            if (win1 == true)
            {
                return(1);
            }
            if (win2 == true)
            {
                return(2);
            }
            if (win1 == false && win2 == false)
            {
                return(0);
            }
            return(0);
        }
示例#11
0
        //Подсчё победы в алгоритме минимакс.
        int BotWinner(ClientRoomModel BotRoom, int kote)
        {
            CardModel card1 = Cb.CardModels.Where(o => o.number == BotRoom.idFirstPlayerCad).FirstOrDefault();
            CardModel card2 = Cb.CardModels.Where(o => o.number == BotRoom.idSecondPlayerCad).FirstOrDefault();

            bool win1 = false;
            bool win2 = false;

            //Матрица правил
            int[,] rule = new int[8, 8] {
                { 0, 1, 1, 1, 1, 1, 2, 0 },
                { 2, 0, 1, 1, 2, 1, 1, 0 },
                { 2, 2, 0, 1, 1, 1, 1, 1 },
                { 2, 2, 2, 0, 2, 1, 1, 0 },
                { 2, 1, 2, 1, 0, 2, 2, 0 },
                { 2, 2, 2, 2, 1, 0, 1, 0 },
                { 1, 2, 2, 2, 1, 2, 0, 0 },
                { 0, 0, 2, 0, 0, 0, 0, 0 }
            };

            var stregth1 = card1.strength;
            var stregth2 = card2.strength;

            //Если в раунде побеждает принцесса.
            if (card1.id == 2 || card2.id == 2)
            {
                if (card1.id == 2 && card2.id == 8)
                {
                    return(3);
                }

                if (card2.id == 2 && card1.id == 8)
                {
                    return(4);
                }
            }

            //Если кто-то сыграл посла, активация свойства
            if (card1.number == 4 || card2.number == 4)
            {
                if (card1.number == 4)
                {
                    BotRoom.P1bonusLegate = 2;
                }
                if (card2.number == 4)
                {
                    BotRoom.P2bonusLegate = 2;
                }
            }

            //Активация навыка шпиона
            if (card1.number == 2 || card2.number == 2)
            {
                if (card1.number == 2 && card2.number != 5)
                {
                    BotRoom.P1bonusSpook = 1;
                }
                if (card2.number == 2 && card1.number != 5)
                {
                    BotRoom.P2bonusSpook = 1;
                }
                if (card2.number == 2 && card1.number == 2)
                {
                    BotRoom.P1bonusSpook = 0;
                    BotRoom.P2bonusSpook = 0;
                }
            }



            //Просчёт раунда с учётом свойства генерала
            if (BotRoom.P1bonusGeneral != 0 || BotRoom.P2bonusGeneral != 0)
            {
                if (BotRoom.P1bonusGeneral != 0)
                {
                    stregth1 += BotRoom.P1bonusGeneral;
                    BotRoom.P1bonusGeneral = 0;
                }
                if (BotRoom.P2bonusGeneral != 0)
                {
                    stregth2 += BotRoom.P2bonusGeneral;
                    BotRoom.P2bonusGeneral = 0;
                }

                if (card1.number != 0 && card2.number != 0)

                {
                    if (stregth1 > stregth2)
                    {
                        if (card2.number == 3)
                        {
                            if (BotRoom.P2bonusLegate != 0)
                            {
                                BotRoom.vPointSecondPlayer += BotRoom.P2bonusLegate;
                                BotRoom.P2bonusLegate       = 0;
                            }
                            else
                            {
                                BotRoom.vPointSecondPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (BotRoom.P1bonusLegate != 0)
                            {
                                BotRoom.P1bonusLegate = 0;
                            }

                            if (BotRoom.delayedRound != 0)
                            {
                                BotRoom.vPointSecondPlayer = BotRoom.vPointSecondPlayer + BotRoom.delayedRound;
                                BotRoom.delayedRound       = 0;
                            }
                            win2 = true;
                        }
                        else
                        {
                            if (BotRoom.P1bonusLegate != 0)
                            {
                                BotRoom.vPointFerstPlayer += BotRoom.P1bonusLegate;
                                BotRoom.P1bonusLegate      = 0;
                            }
                            else
                            {
                                BotRoom.vPointFerstPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (BotRoom.P2bonusLegate != 0)
                            {
                                BotRoom.P2bonusLegate = 0;
                            }

                            if (BotRoom.delayedRound != 0)
                            {
                                BotRoom.vPointFerstPlayer = BotRoom.vPointFerstPlayer + BotRoom.delayedRound;
                                BotRoom.delayedRound      = 0;
                            }
                            win1 = true;
                        }
                    }
                    if (stregth2 > stregth1)
                    {
                        if (card1.number == 3)
                        {
                            if (BotRoom.P1bonusLegate != 0)
                            {
                                BotRoom.vPointFerstPlayer += BotRoom.P1bonusLegate;
                                BotRoom.P1bonusLegate      = 0;
                            }
                            else
                            {
                                BotRoom.vPointFerstPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (BotRoom.P2bonusLegate != 0)
                            {
                                BotRoom.P2bonusLegate = 0;
                            }

                            if (BotRoom.delayedRound != 0)
                            {
                                BotRoom.vPointFerstPlayer = BotRoom.vPointFerstPlayer + BotRoom.delayedRound;
                                BotRoom.delayedRound      = 0;
                            }
                            win1 = true;
                        }
                        else
                        {
                            if (BotRoom.P2bonusLegate != 0)
                            {
                                BotRoom.vPointSecondPlayer += BotRoom.P2bonusLegate;
                                BotRoom.P2bonusLegate       = 0;
                            }
                            else
                            {
                                BotRoom.vPointSecondPlayer++;
                            }

                            //Отменяем навык вражеского посла
                            if (BotRoom.P1bonusLegate != 0)
                            {
                                BotRoom.P1bonusLegate = 0;
                            }

                            if (BotRoom.delayedRound != 0)
                            {
                                BotRoom.vPointSecondPlayer = BotRoom.vPointSecondPlayer + BotRoom.delayedRound;
                                BotRoom.delayedRound       = 0;
                            }
                            win2 = true;
                        }
                    }

                    if (stregth1 == stregth2)
                    {
                        BotRoom.delayedRound++;
                    }
                }
                else
                {
                    BotRoom.delayedRound++;
                }
            }
            //Обычный просчёт игры
            else
            {
                int win = rule[7 - stregth2, 7 - stregth1];
                switch (win)
                {
                case 0:
                    BotRoom.delayedRound++;
                    break;

                case 1:
                    if (BotRoom.P2bonusLegate != 0)
                    {
                        BotRoom.vPointSecondPlayer += BotRoom.P2bonusLegate;
                        BotRoom.P2bonusLegate       = 0;
                    }
                    else
                    {
                        BotRoom.vPointSecondPlayer++;
                    }

                    //Отменяем навык вражеского посла
                    if (BotRoom.P1bonusLegate != 0)
                    {
                        BotRoom.P1bonusLegate = 0;
                    }

                    if (BotRoom.delayedRound != 0)
                    {
                        BotRoom.vPointSecondPlayer = BotRoom.vPointSecondPlayer + BotRoom.delayedRound;
                        BotRoom.delayedRound       = 0;
                    }
                    win2 = true;
                    break;

                case 2:
                    if (BotRoom.P1bonusLegate != 0)
                    {
                        BotRoom.vPointFerstPlayer += BotRoom.P1bonusLegate;
                        BotRoom.P1bonusLegate      = 0;
                    }
                    else
                    {
                        BotRoom.vPointFerstPlayer++;
                    }

                    //Отменяем навык вражеского посла
                    if (BotRoom.P2bonusLegate != 0)
                    {
                        BotRoom.P2bonusLegate = 0;
                    }

                    if (BotRoom.delayedRound != 0)
                    {
                        BotRoom.vPointFerstPlayer = BotRoom.vPointFerstPlayer + BotRoom.delayedRound;
                        BotRoom.delayedRound      = 0;
                    }
                    win1 = true;
                    break;
                }
            }

            //Если кто-то сыграл Генерала, активация свойства
            if (card1.number == 6 || card2.number == 6)
            {
                if (card1.number == 6 && card2.number != 5)
                {
                    BotRoom.P1bonusGeneral = 2;
                }

                if (card2.number == 6 && card1.number != 5)
                {
                    BotRoom.P2bonusGeneral = 2;
                }
            }


            BotRoom.numberRound++;
            Rb.SaveChanges();



            if (BotRoom.numberRound == kote)
            {
                if (BotRoom.vPointFerstPlayer > BotRoom.vPointSecondPlayer)
                {
                    return(3);
                }
                if (BotRoom.vPointFerstPlayer < BotRoom.vPointSecondPlayer)
                {
                    return(4);
                }
                if (BotRoom.vPointFerstPlayer == BotRoom.vPointSecondPlayer)
                {
                    return(5);
                }
            }

            if (win1 == true)
            {
                return(1);
            }
            if (win2 == true)
            {
                return(2);
            }
            if (win1 == false && win2 == false)
            {
                return(0);
            }
            return(0);
        }
示例#12
0
        move step(List <String> BotCard, ClientRoomModel BotaRoom, List <String> PlayerCard, bool flag, int kote)
        {
            ClientRoomModel Room              = new ClientRoomModel();
            List <String>   RoomBotCard       = new List <string>();
            List <String>   RoomPlayerCard    = new List <string>();
            List <String>   NewRoomBotCard    = new List <string>();
            List <String>   NewRoomPlayerCard = new List <string>();

            //Копирвание карт бота на текущую рекурсию
            for (int i = 0; i < BotCard.Count; i++)
            {
                RoomBotCard.Add(BotCard[i]);
            }
            //Копирование карт игрока на текущую рекурсию
            for (int i = 0; i < PlayerCard.Count; i++)
            {
                RoomPlayerCard.Add(PlayerCard[i]);
            }

            Room.delayedRound          = BotaRoom.delayedRound;
            Room.firstPLayerActiveCard = BotaRoom.firstPLayerActiveCard;
            Room.id = BotaRoom.id;
            Room.idFirstPlayerCad  = BotaRoom.idFirstPlayerCad;
            Room.idSecondPlayerCad = BotaRoom.idSecondPlayerCad;
            Room.name                   = BotaRoom.name;
            Room.nameFirstPlayer        = BotaRoom.nameFirstPlayer;
            Room.nameGod                = BotaRoom.nameGod;
            Room.nameSecondPlayer       = BotaRoom.nameSecondPlayer;
            Room.numberPlayer           = BotaRoom.numberPlayer;
            Room.numberRound            = BotaRoom.numberRound;
            Room.P1bonusGeneral         = BotaRoom.P1bonusGeneral;
            Room.P1bonusLegate          = BotaRoom.P1bonusLegate;
            Room.P1bonusSpook           = BotaRoom.P1bonusSpook;
            Room.P2bonusGeneral         = BotaRoom.P2bonusGeneral;
            Room.P2bonusLegate          = BotaRoom.P2bonusLegate;
            Room.P2bonusSpook           = BotaRoom.P2bonusSpook;
            Room.password               = BotaRoom.password;
            Room.secondPLayerActiveCard = BotaRoom.secondPLayerActiveCard;
            Room.vPointFerstPlayer      = BotaRoom.vPointFerstPlayer;
            Room.vPointSecondPlayer     = BotaRoom.vPointSecondPlayer;

            //Опеределение конца игры ( Выход из рекурсии)
            if (flag == true)
            {
                switch (BotWinner(Room, kote))
                {
                case 4:
                    return(new move {
                        score = -10
                    });

                case 3:
                    return(new move {
                        score = 10
                    });

                case 5:
                    return(new move {
                        score = 0
                    });
                }
            }



            // Создание массива объектов move
            List <move> moves = new List <move>();

            //Цикл до конца игры
            for (int i = 0; i < RoomBotCard.Count; i++)
            {
                move move = new move();
                move.index = Int32.Parse(RoomBotCard[i]);
                for (int j = 0; j < RoomPlayerCard.Count; j++)
                {
                    Room.firstPLayerActiveCard  = true;
                    Room.secondPLayerActiveCard = true;
                    Room.idFirstPlayerCad       = Int32.Parse(RoomPlayerCard[j]);
                    Room.idSecondPlayerCad      = move.index;

                    NewRoomBotCard.RemoveRange(0, NewRoomBotCard.Count);
                    NewRoomPlayerCard.RemoveRange(0, NewRoomPlayerCard.Count);

                    //Создание новой колоды бота для отправки
                    for (int k = 0; k < RoomBotCard.Count; k++)
                    {
                        if (RoomBotCard[k] == Room.idSecondPlayerCad.ToString())
                        {
                            continue;
                        }
                        NewRoomBotCard.Add(RoomBotCard[k]);
                    }

                    //Создание новой колоды игрока для отправки
                    for (int k = 0; k < RoomPlayerCard.Count; k++)
                    {
                        if (RoomPlayerCard[k] == Room.idFirstPlayerCad.ToString())
                        {
                            continue;
                        }
                        NewRoomPlayerCard.Add(RoomPlayerCard[k]);
                    }

                    int kotik = BotRoom.numberRound + 2;
                    if (kotik >= 8)
                    {
                        kotik = 8;
                    }
                    var result = step(NewRoomBotCard, Room, NewRoomPlayerCard, true, kotik);
                    move.score = move.score + result.score;
                }
                moves.Add(move);
            }

            int bestMove  = 0;
            var bestScore = -10000;

            for (var i = 0; i < moves.Count; i++)
            {
                if (moves[i].score > bestScore)
                {
                    bestScore = moves[i].score;
                    bestMove  = i;
                }
            }
            return(moves[bestMove]);
        }