Example #1
0
        /// <summary>
        /// 设置淘汰赛人员
        /// </summary>
        /// <param name="order"></param>
        /// <param name="isDefault"></param>
        public static void SetPositionListTwo(GameOrder order, bool isDefault)
        {
            //初始化所有位置
            order.PositionList = new List <GamePosition>();
            for (int i = 0; i < order.KnockoutTotalAB; i++)
            {
                order.PositionList.Add(new GamePosition {
                    Index = i
                });
            }

            //获取1,2名位置列表
            var posList1 = KnockoutDrawHelper.CalRankPosAndSort(order.KnockoutTotalAB, order.KnockoutCountAB, 1);
            var posList2 = KnockoutDrawHelper.CalRankPosAndSort(order.KnockoutTotalAB, order.KnockoutCountAB, 2);

            //获取出线成员列表
            var memberList = SortGroupMember(order, isDefault, posList1);

            //添加前1,2名位置
            AttachOneAndTwo(order, posList1, posList2, memberList);

            //非AB模式前4名出线,附加3,4名位置
            if (!order.IsKnockOutAB && order.KnockoutCount == 4)
            {
                AttachThreeAndFour(order, memberList);
            }

            CheckByeOrKnock(order, posList1, memberList);
        }
Example #2
0
        private static Response Validate(GameOrder order)
        {
            //验证人员设置
            if (order.PositionList.IsNullOrEmpty())
            {
                return(ResultHelper.Fail("请设置所有位置人员,再保存。"));
            }

            //验证重复设置
            foreach (var obj in order.PositionList)
            {
                if (obj.UserId.IsNotNullOrEmpty() && IsExists(order.PositionList, obj))
                {
                    return(ResultHelper.Fail("某人员被设置到了多个位置,请修改后再保存。"));
                }
            }

            //验证相邻奇偶位置至少有一人
            for (int i = 0; i < order.PositionList.Count / 2; i++)
            {
                if (order.PositionList[i * 2].UserId.IsNullOrEmpty() && order.PositionList[i * 2 + 1].UserId.IsNullOrEmpty())
                {
                    string msg = string.Format("{0}和{1}位置都没有人员,请至少设置1人再保存。", i * 2 + 1, i * 2 + 2);
                    return(ResultHelper.Fail(msg));
                }
            }

            return(ResultHelper.Success());
        }
Example #3
0
        public int Create(int userCount, List <EntityBase> entities, GameOrder order, int beginRank, int endRank)
        {
            extraOrder++;
            int currentOrder = extraOrder;

            //创建本轮所有比赛
            var tempList = new List <GameLoop>();

            for (int i = 0; i < userCount; i = i + 2)
            {
                GameLoop loop = CreateExtraLoop(order, beginRank, endRank, currentOrder, i);
                entities.Add(loop);
                tempList.Add(loop);
            }

            int winOrder  = 0;
            int failOrder = 0;

            if (userCount > 2)
            {
                int rankCount = (endRank + 1 - beginRank) / 2;
                //递归创建负者赛
                failOrder = Create(userCount / 2, entities, order, endRank - rankCount + 1, endRank);
                //递归创建胜者赛
                winOrder = Create(userCount / 2, entities, order, beginRank, beginRank + rankCount - 1);
            }
            foreach (var obj in tempList)
            {
                obj.ExtraWinOrder  = winOrder;
                obj.ExtraFailOrder = failOrder;
            }

            return(currentOrder);
        }
Example #4
0
        private ValidationResult Validate(Game game, GameOrder firstOrder)
        {
            var result = new ValidationResult {
                IsSuccess = true
            };

            if (firstOrder.KnockoutOption == KnockoutOption.ROUND.Id)
            {
                if (firstOrder.KnockoutCount < 2)
                {
                    result.IsSuccess = false;
                    result.Message   = "请选择前2名或者前4名出线。";
                }

                if (game.IsKnockOutAB && firstOrder.KnockoutCount < 4)
                {
                    result.IsSuccess = false;
                    result.Message   = "已启用淘汰阶段AB组模式,请选择前4名出线。";
                }
            }
            else
            {
                //单淘汰第一轮设置KnockOutAB
                firstOrder.KnockOutAB = KnockOutAB.A;
            }

            if (firstOrder.KnockoutTotal == 0)
            {
                result.IsSuccess = false;
                result.Message   = "请选择淘汰赛第一轮总人数。";
            }
            return(result);
        }
Example #5
0
        public static void CheckSameCorpTeamId(GameOrder order)
        {
            var corpTeamList = GameHelper.GetSameCorpTeamList(order.GameId);

            if (corpTeamList.IsNotNullOrEmpty())
            {
                int count = order.PositionList.Count / 2;
                for (int i = 0; i < count; i++)
                {
                    var team1 = corpTeamList.FirstOrDefault(p => p.Id == order.PositionList[i * 2].UserId.GetId());
                    var team2 = corpTeamList.FirstOrDefault(p => p.Id == order.PositionList[i * 2 + 1].UserId.GetId());
                    if (team1 == null || team2 == null)
                    {
                        continue;
                    }
                    //相同单位队伍第一轮淘汰赛相遇,调整位置
                    if (team2.CompanyId == team1.CompanyId)
                    {
                        var pos1 = order.PositionList[i * 2];
                        var pos2 = order.PositionList[i * 2 + 1];
                        //交换低排名的相同单位队伍
                        var switchPos = pos1.Rank > pos2.Rank ? pos1 : pos2;
                        //查找相同本middle区域排名相同的非轮空队伍
                        var other = order.PositionList.FirstOrDefault(p => p.Index / order.Middle() == switchPos.Index / order.Middle() && p.Rank == switchPos.Rank && p.Index != switchPos.Index && !p.IsBye);
                        if (other != null)
                        {
                            //交换位置
                            var tempUserId = switchPos.UserId;
                            switchPos.UserId = other.UserId;
                            other.UserId     = tempUserId;
                        }
                    }
                }
            }
        }
Example #6
0
 public void GiveOrder(GameOrder order)
 {
     CompleteTask();
     currentOrder        = order;
     order.ObjectToOrder = this.gameObject;
     currentOrder.StartOrder();
 }
Example #7
0
        private static void CreateSingleRound(GameOrder firstOrder, List <EntityBase> entities, Game game, List <GameTeam> teamList)
        {
            firstOrder.OrderNo = 1;
            firstOrder.Name    = "单循环赛";

            var group = new GameGroup {
                Name = "单循环组", GameId = game.Id, IsTeam = game.IsTeam, OrderNo = 1, LeaderId = game.CreatorId, OrderId = firstOrder.Id, MemberList = new List <GameGroupMember>()
            };

            group.SetNewEntity();
            //构建单分组
            entities.Add(group);

            int memberOrderNo = 0;

            teamList.ForEach(p =>
            {
                memberOrderNo++;
                var member = new GameGroupMember {
                    TeamId = p.Id, GameId = firstOrder.GameId, GroupId = group.Id, IsTeam = firstOrder.IsTeam, OrderNo = memberOrderNo
                };
                member.SetNewEntity();
                group.MemberList.Add(member);
            });

            //构建分组成员
            SaveGameGroup.CreateOneGroupMembers(entities, group);
            //构建单循环比赛
            SaveGameGroup.CreateOneGroupLoops(entities, group);
        }
Example #8
0
        private static List <GameGroupMember> SortGroupMember(GameOrder order, bool isDefault, List <int> posList1)
        {
            var allMemberList = GetGroupKnockUserList(order, order.BeginRankAB, order.EndRankAB);
            var memberList    = new List <GameGroupMember>();

            if (!isDefault)
            {
                //非默认,按抽签重新组织顺序
                foreach (var index in posList1)
                {
                    var pos = order.SeedList.FirstOrDefault(P => P.Index == index);
                    if (pos.UserId.IsNotNullOrEmpty())
                    {
                        foreach (var mem in allMemberList.Where(p => p.GroupId.GetId() == pos.GroupId.GetId()))
                        {
                            memberList.Add(mem);
                        }
                    }
                    else
                    {
                        //按小组补轮空位置
                        for (int i = 0; i < order.KnockoutCountAB; i++)
                        {
                            memberList.Add(new GameGroupMember {
                            });
                        }
                    }
                }
                //尝试加入抢号人员
                if (allMemberList.Count > memberList.Count)
                {
                    foreach (var more in allMemberList)
                    {
                        if (!memberList.Contains(more))
                        {
                            memberList.Add(more);
                        }
                    }
                }
            }
            else
            {
                //默认,按小组顺序
                memberList = allMemberList;

                //补人数轮空位置
                var needPos = order.KnockoutTotalAB - order.ActualCount();
                if (needPos > 0)
                {
                    for (int i = 0; i < needPos; i++)
                    {
                        memberList.Add(new GameGroupMember {
                        });
                    }
                }
            }
            return(memberList);
        }
Example #9
0
 /// <summary>
 /// Start this instance.
 /// Use this for initialization
 /// добавление обработчиков событий для объекта GameOrder
 /// </summary>
 void Start()
 {
     mGameOrder                   = GameOrder.GetComponent <GameOrder>();
     mGameOrder.OnBeginGame      += mGameOrder_OnBeginGame;
     mGameOrder.OnYourTurnBegin  += mGameOrder_OnYourTurnBegin;
     mGameOrder.OnYourTurnEnd    += mGameOrder_OnYourTurnEnd;
     mGameOrder.OnEnemyTurnBegin += mGameOrder_OnEnemyTurnBegin;
     mGameOrder.OnEnemyTurnEnd   += mGameOrder_OnEnemyTurnEnd;
 }
        private static List <GameTeam> GetGameTeamList(GameOrder currentOrder)
        {
            var cmdMember = CommandHelper.CreateProcedure <GameTeam>(text: "sp_GetGameTeamListForKnock");

            cmdMember.Params.Add(CommandHelper.CreateParam("@gameId", currentOrder.GameId));
            var memberList = DbContext.GetInstance().Execute(cmdMember).Entities.ToList <EntityBase, GameTeam>();

            return(memberList);
        }
Example #11
0
 public static void GiveOrderToUnits(OrderableObject[] orderableObjects, GameOrderInitParams gameOrderInitParams, GameOrderVariableParams gameOrderVariableParams)
 {
     foreach (OrderableObject orderableObject in orderableObjects)
     {
         gameOrderVariableParams.ObjectToOrder = orderableObject.gameObject;
         GameOrder order = gameOrderInitParams.CreateOrder(gameOrderVariableParams);
         orderableObject.GiveOrder(order);
     }
 }
Example #12
0
        private static int FindIndex(GameOrder order, int groupCount, int scale, int i, int j)
        {
            //查找位置
            int index = 0;

            switch (j)
            {
            case 0:
                index = i % 2 == 0 ? i * order.KnockoutCount : i * order.KnockoutCount + (order.KnockoutCount - 1);
                break;

            case 1:
                index = i % 2 == 0 ? ((groupCount - 1) - i) * order.KnockoutCount : (groupCount - i) * order.KnockoutCount;

                /*
                 * if (i < groupCount / 2)
                 * {
                 *  index = i % 2 == 0 ? (i + 2 * scale) * order.KnockoutCount + order.KnockoutCount : (i + 2 * scale) * order.KnockoutCount - 1;
                 * }
                 * else
                 * {
                 *  index = i % 2 == 0 ? (i - 2 * scale) * order.KnockoutCount + order.KnockoutCount : (i - 2 * scale) * order.KnockoutCount - 1;
                 * }*/
                break;

            case 2:
                index = i % 2 == 0 ? (i + 1) * order.KnockoutCount + 1 : (i - 1) * order.KnockoutCount + 2;

                /*
                 * if ((i / 2) % 2 == 0)
                 * {
                 *  index = i % 2 == 0 ? (i + (scale > 0 ? 2 : 0)) * order.KnockoutCount + 2 : (i + (scale > 0 ? 2 : 0)) * order.KnockoutCount + 1;
                 * }
                 * else
                 * {
                 *  index = i % 2 == 0 ? (i - (scale > 0 ? 2 : 0)) * order.KnockoutCount + 2 : (i - (scale > 0 ? 2 : 0)) * order.KnockoutCount + 1;
                 * }*/
                break;

            case 3:
                //if (groupCount == 8 && order.KnockoutCount == 4)
            {
                index = i % 2 == 0 ? ((groupCount - 1) - i) * order.KnockoutCount + 2 : ((groupCount - 1) - i) * order.KnockoutCount + 1;
            }
                //else
                //{
                //index = i % 2 == 0 ? (i + 1) * order.KnockoutCount + 2 : (i - 1) * order.KnockoutCount + 1;
                //}
                break;

            default:
                throw new Exception("现在仅支持前2名,前4名出线淘汰赛。");
            }
            return(index);
        }
Example #13
0
        private static List <GameGroupMember> GetGroupKnockUserList(GameOrder currentOrder, int beginRank, int endRank)
        {
            var cmdMember = CommandHelper.CreateProcedure <GameGroupMember>(text: "sp_GetGameGroupRankList");

            cmdMember.Params.Add(CommandHelper.CreateParam("@gameId", currentOrder.GameId));
            cmdMember.Params.Add(CommandHelper.CreateParam("@beginRank", beginRank, DataType.Int32));
            cmdMember.Params.Add(CommandHelper.CreateParam("@endRank", endRank, DataType.Int32));
            var memberList = DbContext.GetInstance().Execute(cmdMember).Entities.ToList <EntityBase, GameGroupMember>();

            return(memberList);
        }
Example #14
0
        private static void CreateOrderLoops(GameOrder current, List <EntityBase> entities)
        {
            for (int i = 1; i <= current.GroupCount; i++)
            {
                current.BeginRank = 1;
                current.EndRank   = current.GroupCount * 2;

                var loop = createLoopGame(current, i, 1, current.GroupCount * 2);
                entities.Add(loop);
            }
        }
Example #15
0
        public ActionResult GameOrderOperation(string gameId, string knockoutId, string stateId, bool isCreator)
        {
            try
            {
                ViewBag.KnockoutId  = knockoutId;
                ViewBag.GameStateId = stateId;
                ViewBag.IsCreator   = isCreator;

                Request <Game> request = new Request <Game>();
                request.Token  = CurrentUser.Token;
                request.Filter = new Game {
                    Id = gameId
                };
                var result = ServiceBuilder.GetInstance().Execute(ServiceType.GetGameOrderList, request);

                //获取第一轮次信息,主要得到小组数和晋级名次
                GameOrder firstOrder;
                if (result.Entities.Count > 0)
                {
                    firstOrder = result.Entities.FirstOrDefault() as GameOrder;
                }
                else
                {
                    firstOrder = new GameOrder {
                        GameId = gameId, KnockoutOption = knockoutId, GroupCount = 0, KnockoutCount = 0
                    }
                };

                firstOrder.GroupList = new List <GameGroup>();


                //获取小组列表
                Request <GetGameGroupListFilter> groupReq = new Request <GetGameGroupListFilter>();
                groupReq.Token  = CurrentUser.Token;
                groupReq.Filter = new GetGameGroupListFilter {
                    GameId = gameId, IsContainMember = true
                };
                result = ServiceBuilder.GetInstance().Execute(ServiceType.GetGameGroupList, groupReq);
                if (result.Entities.Count > 0)
                {
                    result.Entities.ForEach(o =>
                    {
                        firstOrder.GroupList.Add(o as GameGroup);
                    });
                }

                return(View(firstOrder));
            }
            catch (Exception ex)
            {
                return(this.RedirectToErrorPage(ex.Message));
            }
        }
Example #16
0
        /// <summary>
        /// Inserts order based on phase
        /// </summary>
        /// <param name="order"></param>
        public void AddOrder(GameOrder orderToAdd)
        {
            for (int i = 0; i < Orders.Count; i++)
            {
                if ((int)orderToAdd.OccursInPhase.Value < (int)Orders[i].OccursInPhase.Value)
                {
                    Orders.Insert(i, orderToAdd);
                    return;
                }
            }

            Orders.Add(orderToAdd);
        }
Example #17
0
        public void Update(GameOrder entity)
        {
            var gameOrder = Get(entity.Id);

            if (gameOrder == null)
            {
                Console.WriteLine("Oyun Siparişi bulunamadı!");
            }

            gameOrder.IsDeleted    = entity.IsDeleted;
            gameOrder.AmountPaid   = entity.AmountPaid;
            gameOrder.PurchaseDate = entity.PurchaseDate;
        }
Example #18
0
        private static void GetExtraNextOrderLoop(GameLoop loop, GameOrder order, int nextOrderNo, ref GameLoop winLoop, ref GameLoop failLoop)
        {
            var cmdWinLoop = CommandHelper.CreateText <GameLoop>(text: "SELECT * FROM dbo.GameLoop "
                                                                 + " WHERE OrderId=@OrderId AND OrderNo=@OrderNo AND (ExtraOrder = @ExtraWinOrder OR ExtraOrder = @ExtraFailOrder) AND IsExtra = 1");

            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@OrderId", order.Id));
            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@OrderNo", nextOrderNo));
            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@ExtraWinOrder", loop.ExtraWinOrder));
            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@ExtraFailOrder", loop.ExtraFailOrder));
            var result = DbContext.GetInstance().Execute(cmdWinLoop).Entities.ToList <EntityBase, GameLoop>();

            winLoop  = result.First(p => p.ExtraOrder == loop.ExtraWinOrder);
            failLoop = result.First(p => p.ExtraOrder == loop.ExtraFailOrder);
        }
Example #19
0
        public Game(GameType gT, GameMode gM, GardenGraph g, int c, ContentManager content, Player p1, Player p2, GameOrder go)
        {
            player2 = new Computer(true);
            colorBoxes = new List<ColorBox>();
            gameType = gT;
            gameMode = gM;
            graph = g;
            gameOrder = go;
            colors = ColorsCreator.GetColors(c);
            usedColors = new List<Color>();
            this.whoseTurn = 0;
            this.gardenerStartedMove = false;
            int distx = 55;
            int disty = 30;
            int offset = 10;

            colorsText = new TextBox(content, "", new Vector2(0, 0), new Vector2(0, 0), "KoloryText");

            for(int i =0;i<colors.Length;i++)
            {
                Vector2 vect = new Vector2(10+offset + (distx) * (i % 3), 30 +offset + (disty) * ((int)i / 3));
                colorBoxes.Add(new ColorBox(colors[i], content, vect));
            }

            player1 = p1;
            player2 = p2;
            panels = new List<TextBox>() { new TextBox(content, "",new Vector2(0,0),new Vector2(0,0),"Panel") };
            string ps1 = p1.isGardener ? "O: " : "S: ";
            string ps2 = p2.isGardener ? "O: " : "S: ";

            WhoseTurnText = new TextBox(content, "Tura: " + (p1.isGardener ? "Ogrodnika" : "Sasiada"), new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(250, 0)), Color.White, null, 0, "CzcionkaUI");
            Escape = new Button(Game1.GetRatioDimensions(new Vector2(1010, 740)), content, "wyjscie");

            if(p2 is Computer)
            {
                PlayersTexts = new TextBox[] { new TextBox(content, ps1 + p1.login, new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(10, 400)), Color.White, null, 0, "CzcionkaUI") };
                PlayerPoints = new TextBox[] { new TextBox(content, p1.points.ToString(), new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(30, 440)), Color.White, null, 0, "CzcionkaUI") };
            }
            else
            {
                PlayersTexts = new TextBox[] { new TextBox(content, ps1 + p1.login, new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(10, 400)), Color.White, null, 0, "CzcionkaUI"),
                                            new TextBox(content, ps2 + p2.login, new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(10, 600)), Color.White, null, 0, "CzcionkaUI"),};
                PlayerPoints = new TextBox[] { new TextBox(content, p1.points.ToString(), new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(30, 440)), Color.White, null, 0, "CzcionkaUI"),
                                           new TextBox(content, p2.points.ToString(), new Vector2(0, 0), Game1.GetRatioDimensions(new Vector2(30, 640)), Color.White, null, 0, "CzcionkaUI"),

                };
            }
        }
Example #20
0
        private static ValidationResult CheckWinOption(GameOrder obj)
        {
            if (obj.IsTeam)
            {
                ////直接根据模板规则得出团体胜局数,迎合新团体模板规则  20180601 zq
                string sqlStr = "SELECT CASE WHEN ISNULL(a2.LoopCount, 0)=0 THEN 0 ELSE a2.LoopCount/2+1 END AS WinLoopCount FROM Game a1 INNER JOIN GameTeamLoopTemplet a2 ON a1.TeamMode=a2.Id WHERE a1.Id=@gameId";
                var    cmd    = CommandHelper.CreateText <Game>(FetchType.Fetch, sqlStr);
                cmd.Params.Add("@gameId", obj.GameId);
                var res = DbContext.GetInstance().Execute(cmd);
                try
                {
                    if (res.Entities.Count > 0)
                    {
                        obj.WinTeam = res.FirstEntity <Game>().WinLoopCount;
                    }
                }
                catch { }

                if (obj.WinTeam == 0)
                {
                    return(new ValidationResult {
                        IsSuccess = false, Message = "请设置团队胜场。"
                    });
                }

                if (obj.KnockoutOption == KnockoutOption.ROUND.Id && obj.TeamScoreMode.IsNullOrEmpty())
                {
                    return(new ValidationResult {
                        IsSuccess = false, Message = "请设置团队循环比赛的计分模式。"
                    });
                }
            }
            else
            {
                obj.WinTeam = 0;
            }

            if (obj.WinGame == 0)
            {
                return(new ValidationResult {
                    IsSuccess = false, Message = "请设置胜局。"
                });
            }

            return(new ValidationResult {
                IsSuccess = true
            });;
        }
Example #21
0
        private static void createGameGroup(GameOrder firstOrder, List <EntityBase> groupEntities)
        {
            for (int i = 1; i <= firstOrder.GroupCount; i++)
            {
                GameGroup group = new GameGroup();
                group.SetCreateDate();
                group.SetNewId();
                group.SetRowAdded();

                group.GameId  = firstOrder.GameId;
                group.IsTeam  = firstOrder.IsTeam;
                group.Name    = string.Format("第{0}组", i);
                group.OrderId = firstOrder.Id;
                group.OrderNo = i;
                groupEntities.Add(group);
            }
        }
Example #22
0
        private static void CreateMoreOrder(Game game, GameOrder firstOrder, List <EntityBase> entities, int orderNo, List <EntityBase> loopEntities)
        {
            int       orderCount = firstOrder.KnockoutOption == KnockoutOption.KNOCKOUT.Id ? firstOrder.KnockoutTotalAB / 4 : firstOrder.KnockoutTotalAB / 2;
            GameOrder preOrderA  = firstOrder;
            GameOrder preOrderB  = firstOrder;

            while (orderCount >= 1)
            {
                orderNo++;
                //大轮次
                GameOrder orderA = CreateOneGameOrder(orderNo, orderCount, preOrderA);
                orderA.KnockOutAB = KnockOutAB.A;
                entities.Add(orderA);

                //设置前轮次下轮次-即本轮
                preOrderA.NextOrderId = orderA.Id;

                //生成大轮次比赛场次列表
                CreateOrderLoops(orderA, loopEntities);

                preOrderA = orderA;

                //生成淘汰B组
                if (game.IsKnockOutAB)
                {
                    GameOrder orderB = CreateOneGameOrder(orderNo, orderCount, preOrderB);
                    orderB.KnockOutAB = KnockOutAB.B;
                    entities.Add(orderB);
                    if (preOrderB == firstOrder)
                    {
                        //设置第一轮B组后续轮次Id
                        preOrderB.NextOrderBId = orderB.Id;
                    }
                    else
                    {
                        preOrderB.NextOrderId = orderB.Id;
                    }
                    CreateOrderLoops(orderB, loopEntities);
                    preOrderB = orderB;
                }
                //处理循环变量
                orderCount = orderCount / 2;
            }
        }
Example #23
0
        private static void AttachOneAndTwo(GameOrder order, List <int> posList1, List <int> posList2, List <GameGroupMember> memberList)
        {
            for (int i = 0; i < order.KnockoutTotalAB / order.KnockoutCountAB; i++)
            {
                order.PositionList[posList1[i]].UserId  = memberList[i * order.KnockoutCountAB].TeamId;
                order.PositionList[posList1[i]].GroupId = memberList[i * order.KnockoutCountAB].GroupId;

                order.PositionList[posList1[i]].IsSeed           = true;
                memberList[i * order.KnockoutCountAB].IsEnterPos = true;
            }

            for (int i = 0; i < order.KnockoutTotalAB / order.KnockoutCountAB; i++)
            {
                order.PositionList[posList2[i]].UserId  = memberList[i * order.KnockoutCountAB + 1].TeamId;
                order.PositionList[posList2[i]].GroupId = memberList[i * order.KnockoutCountAB + 1].GroupId;

                memberList[i * order.KnockoutCountAB + 1].IsEnterPos = true;
            }
        }
Example #24
0
        private static void GetNextOrderLoop(GameOrder order, int nextOrderNo, ref GameLoop nextLoop, ref GameLoop extraLoop)
        {
            //下一步正赛轮次
            var cmdWinLoop = CommandHelper.CreateText <GameLoop>(text: "SELECT * FROM dbo.GameLoop WHERE OrderId=@OrderId AND OrderNo=@OrderNo AND IsExtra = 0");

            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@OrderId", order.NextOrderId));
            cmdWinLoop.Params.Add(CommandHelper.CreateParam("@OrderNo", nextOrderNo));
            nextLoop = DbContext.GetInstance().Execute(cmdWinLoop).Entities.FirstOrDefault() as GameLoop;

            //如果本轮存在附加赛,负者进入附加赛第一轮
            if (order.IsExtra)
            {
                var cmdFailLoop = CommandHelper.CreateText <GameLoop>(text: "SELECT * FROM dbo.GameLoop "
                                                                      + " WHERE OrderId=@OrderId AND OrderNo=@OrderNo AND ExtraOrder = 1 AND IsExtra = 1");
                cmdFailLoop.Params.Add(CommandHelper.CreateParam("@OrderId", order.Id));
                cmdFailLoop.Params.Add(CommandHelper.CreateParam("@OrderNo", nextOrderNo));
                extraLoop = DbContext.GetInstance().Execute(cmdFailLoop).Entities.FirstOrDefault() as GameLoop;
            }
        }
Example #25
0
        private static void SetPositionListFirst(GameOrder order)
        {
            //获取抽签位置
            order.PositionList = new List <GamePosition>();
            for (int i = 0; i < order.KnockoutTotalAB; i++)
            {
                order.PositionList.Add(new GamePosition {
                    Index = i
                });
            }
            //设置种子位置
            var seedList = KnockoutDrawHelper.CalRankPosAndSort(order.KnockoutTotalAB, order.KnockoutCountAB, 1);

            foreach (int index in seedList)
            {
                order.PositionList[index].Index  = index;
                order.PositionList[index].IsSeed = true;
            }
        }
Example #26
0
        private static GameOrder CreateOneGameOrder(int orderNo, int count, GameOrder preOrder)
        {
            GameOrder order = new GameOrder();

            order.SetNewId();
            order.SetCreateDate();
            order.SetRowAdded();

            order.IsTeam         = preOrder.IsTeam;
            order.GameId         = preOrder.GameId;
            order.PreOrderId     = preOrder.Id;                //前轮次
            order.OrderNo        = orderNo;                    //当前轮次
            order.Name           = string.Format(count > 1 ? "1/{1}决赛" : "决赛", order.OrderNo, count);
            order.KnockoutOption = KnockoutOption.KNOCKOUT.Id; //淘汰制度
            order.KnockoutCount  = 1;
            order.GroupCount     = count;
            order.KnockoutTotal  = count * 2;
            order.State          = GameOrderState.NOTSTART.Id;
            return(order);
        }
Example #27
0
        private static void AttachThreeAndFour(GameOrder order, List <GameGroupMember> memberList)
        {
            var posList3 = KnockoutDrawHelper.CalRankPosAndSort(order.KnockoutTotalAB, order.KnockoutCountAB, 3);
            var posList4 = KnockoutDrawHelper.CalRankPosAndSort(order.KnockoutTotalAB, order.KnockoutCountAB, 4);

            for (int i = 0; i < order.KnockoutTotalAB / order.KnockoutCountAB; i++)
            {
                order.PositionList[posList3[i]].UserId  = memberList[i * order.KnockoutCountAB + 2].TeamId;
                order.PositionList[posList3[i]].GroupId = memberList[i * order.KnockoutCountAB + 2].GroupId;

                memberList[i * order.KnockoutCountAB + 2].IsEnterPos = true;
            }

            for (int i = 0; i < order.KnockoutTotalAB / order.KnockoutCountAB; i++)
            {
                order.PositionList[posList4[i]].UserId  = memberList[i * order.KnockoutCountAB + 3].TeamId;
                order.PositionList[posList4[i]].GroupId = memberList[i * order.KnockoutCountAB + 3].GroupId;

                memberList[i * order.KnockoutCountAB + 3].IsEnterPos = true;
            }
        }
Example #28
0
        public void ProcessOrder(GameOrder order)
        {
            yace.DrawCardToZone("MainDeck", PlayerIndex.Current, "PlayerHand", PlayerIndex.Current);
            Zone playerHand = yace.GetSingleZone("PlayerHand");

            if (order is Order_Score)
            {
                int          multiplier = yace.GetRessourceValue("Multiplier");
                CardInstance card       = playerHand.Cards[0];
                int          value      = card.GetValue("Value");
                yace.AlterRessource("Score", multiplier * value);
                yace.SetRessource("Multiplier", 1, PlayerIndex.Current);
            }
            else if (order is Order_Multiply)
            {
                yace.AlterRessource("Multiplier", 1);
            }

            yace.DrawCartToZone("PlayerHand", "DiscardPile");
            yace.EndPlayerTurn();
        }
        private static List <GameTeam> CheckByeOrKnock(GameOrder order, List <int> posListAll, List <GameTeam> memberList)
        {
            var emptyCount = Math.Abs(order.KnockoutTotal - memberList.Count);

            if (emptyCount > 0)
            {
                if (order.KnockoutTotal > memberList.Count)
                {
                    //设置轮空
                    for (int i = 0; i < emptyCount; i++)
                    {
                        var pos = posListAll[i] % 2 == 0 ? posListAll[i] + 1 : posListAll[i] - 1;
                        //查找本middle区域非轮空的空位
                        var targetPos = order.PositionList.FirstOrDefault(p =>
                                                                          p.Index / order.Middle() == pos / order.Middle() && p.UserId.IsNullOrEmpty() && !p.IsBye);
                        if (targetPos != null)
                        {
                            targetPos.UserId  = order.PositionList[pos].UserId;
                            targetPos.GroupId = order.PositionList[pos].GroupId;
                            order.PositionList[pos].UserId  = null;
                            order.PositionList[pos].GroupId = null;
                            order.PositionList[pos].IsBye   = true;
                        }
                    }
                }
                else
                {
                    //抢号人员
                    var knockList = memberList.Where(p => p.IsEnterPos == false).ToList();
                    //设置抢号,取小值循环
                    int count = Math.Min(Math.Min(emptyCount, knockList.Count), posListAll.Count);
                    for (int i = 0; i < count; i++)
                    {
                        var pos = posListAll[i] % 2 == 0 ? posListAll[i] + 1 : posListAll[i] - 1;
                        order.PositionList[pos].KnockUserId = knockList[i].Id.Link(knockList[i].TeamName);
                    }
                }
            }
            return(memberList);
        }
Example #30
0
        public JsonResult GameOrderWinSave(GameOrder order)
        {
            try
            {
                order.RowState = RowState.Modified;

                Request <GameOrder> request = new Request <GameOrder>();
                request.Token    = CurrentUser.Token;
                request.Entities = new List <GameOrder>()
                {
                    order
                };

                var result = ServiceBuilder.GetInstance().Execute(ServiceType.SaveGameOrderWin, request);

                return(ToJson(result));
            }
            catch (Exception ex)
            {
                var errResult = ResultHelper.Fail(ex.Message);
                return(ToJson(errResult));
            }
        }
    /// <summary>
    /// Start this instance.
    /// Use this for initialization
    /// высчитывание размеров клеток и положения поля
    /// создание различных вспомогательных объектов для поля - клетки, красные рамки, точки
    /// </summary>
    // Use this for initialization
    void Start()
    {
        //высчитывание размеров клеток и положения поля
        Vector3 pos    = transform.position;
        Vector3 bounds = GetComponent <Renderer>().bounds.size;

        mFieldStart = new Vector3(
            pos.x - bounds.x / 2,
            pos.y,
            pos.z - bounds.z / 2);

        mFieldEnd = new Vector3(
            pos.x + bounds.x / 2,
            pos.y,
            pos.z + bounds.z / 2);

        mFieldWidth  = (mFieldEnd.x - mFieldStart.x) / FieldsHorCount;
        mFieldHeight = (mFieldEnd.z - mFieldStart.z) / FieldsVerCount;

        mGame = GameObj.GetComponent <GameOrder>();

        //создание различных вспомогательных объектов для поля - клетки, красные рамки, точки
        CreateCellObjects(mFieldStart, mFieldEnd);

        RefreshRedPlanes();
        RefreshBusyCells();

        for (int i = 0; i < FieldsHorCount; ++i)
        {
            for (int j = 0; j < FieldsVerCount; ++j)
            {
                mAttackedCells[i, j] = false;
            }
        }

        LastCell.GetComponent <MeshRenderer>().enabled = false;
    }
Example #32
0
 /// <summary>
 /// Funkcja sprawdzajaca nacisk myszy na element w oknie kreatora nowej gry
 /// </summary>
 /// <param name="mousePos"></param>
 /// <param name="game"></param>
 /// <param name="content"></param>
 public void NewGameCheck(Point mousePos, ref Game game, ContentManager content)
 {
     for (int i = 0; i < NewGameButtons.Count; i++)
     {
         if (NewGameButtons[i].ContainsPoint(mousePos))
         {
             switch (NewGameButtons[i].name)
             {
                 case "start":
                     if (p1 != null && chosenGraph != null)
                         state = p2 is Computer ? InterfaceState.LoginSingle : InterfaceState.LoginMulti;
                     else
                         Game1.MessageBox(new IntPtr(), "Wybierz graf do rozgrywki", "", 0);
                     break;
                 case "anuluj":
                     state = InterfaceState.MainMenu;
                     break;
                 case "graf1":
                     ClearButtons(GraphButtons);
                     chosenGraph = PredefinedGraphs.graphs[0].Copy();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "graf2":
                     ClearButtons(GraphButtons);
                     chosenGraph = PredefinedGraphs.graphs[1].Copy();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "graf3":
                     ClearButtons(GraphButtons);
                     chosenGraph = PredefinedGraphs.graphs[2].Copy();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "graphcreated":
                     ClearButtons(GraphButtons);
                     chosenGraph = PredefinedGraphs.graphs[NewGameButtons[i].index].Copy();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "gra-vs-gra":
                     ClearButtons(GameTypeButtons);
                     p1 = new Player("Gracz1");
                     p2 = new Player("Gracz2");
                     UpdateLogins();
                     UpdatePlayers();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "gra-vs-komp":
                     ClearButtons(GameTypeButtons);
                     p1 = new Player("Gracz1");
                     p2 = new Computer(easyMode);
                     UpdateLogins();
                     UpdatePlayers();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "kwiatkow":
                     ClearButtons(GameColoringButtons);
                     gT = GameType.VerticesColoring;
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "plotkow":
                     ClearButtons(GameColoringButtons);
                     gT = GameType.EdgesColoring;
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "sasiad-ogrodnik":
                     ClearButtons(GameModeButtons);
                     gO = GameOrder.NG;
                     UpdatePlayers();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "ogrodnik-sasiad":
                     ClearButtons(GameModeButtons);
                     gO = GameOrder.GN;
                     UpdatePlayers();
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "latwy":
                     ClearButtons(GameDifButtons);
                     easyMode = true;
                     if(p2 is Computer)
                     {
                         Computer c = p2 as Computer;
                         c.easyMode = true;
                     }
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
                 case "trudny":
                     ClearButtons(GameDifButtons);
                     easyMode = false;
                     if (p2 is Computer)
                     {
                         Computer c = p2 as Computer;
                         c.easyMode = false;
                     }
                     NewGameButtons[i].color = Color.LightBlue;
                     break;
             }
         }
     }
 }