/// <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); }
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()); }
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); }
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); }
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; } } } } }
public void GiveOrder(GameOrder order) { CompleteTask(); currentOrder = order; order.ObjectToOrder = this.gameObject; currentOrder.StartOrder(); }
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); }
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); }
/// <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); }
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); } }
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); }
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); }
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); } }
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)); } }
/// <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); }
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; }
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); }
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"), }; } }
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 });; }
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); } }
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; } }
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; } }
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; } }
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; } }
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); }
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; } }
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); }
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; }
/// <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; } } } }