public static List<UserProfile> GetFarFromOneRelations(Guid userId) { // On cherche nos relations. On cherche les relations de nos relations => récursif List<UserProfile> listUserRelations = GetRelations(userId); List<UserProfile> listLoggedUserRelation = GetRelations((Guid)(Membership.GetUser(System.Web.HttpContext.Current.User.Identity.Name, false).ProviderUserKey)); List<UserProfile> listFarFromOneRelations = new List<UserProfile>(); // We search all the directly connected users to the actual logged user relations foreach (UserProfile userRelation in listUserRelations) { listFarFromOneRelations.AddRange(GetRelations((Guid)(Membership.GetUser(userRelation.UserName, false).ProviderUserKey))); } UserProfile actualUser = UserProfile.GetUserProfile(System.Web.HttpContext.Current.User.Identity.Name); while(listFarFromOneRelations.Contains(actualUser)) { // We delete all the occurences of the actual user listFarFromOneRelations.Remove(actualUser); } // On supprime les utilisateurs qui sont déjà directement connectés avec l'utilisateur foreach (UserProfile user in listLoggedUserRelation) { if (listFarFromOneRelations.Contains(user)) { listFarFromOneRelations.Remove(user); } } return listFarFromOneRelations; }
//lastKier - kierunek z ktorego weszlismy 0-gora 1-prawo 2-dol 3-lewo private static int[] znajdzDrogePowrotnaRek(int x, int y, int lastKier, List<Wspolrzedne> before, int upCost, int limit) { if (before.Count > limit) { int[] wczesniak = new int[2]; wczesniak[0] = limit * cennikSwiata.moveCost * 2; wczesniak[1] = 0; return wczesniak; } int firstStep = 0; int overalCost = limit * cennikSwiata.moveCost; int koszt = upCost; //Sprawdzenie, czy dalej mamy "po x" czy "po y". //if (Math.Abs(mojaPozycjaX - x) > Math.Abs(mojaPozycjaY - y)) //Sprawdzenie, czy jestesmy u celu! #region jestesUCelu if ((mojaPozycjaX == x) && (mojaPozycjaY == y)) { switch (lastKier) { case 0: switch (kierunek[0]) { case 1: koszt += cennikSwiata.rotateCost; firstStep = 2; break; case 0: if (kierunek[1] == 1) { firstStep = 1; } else { koszt += cennikSwiata.rotateCost * 2; firstStep = 4; } break; case -1: koszt += cennikSwiata.rotateCost; firstStep = 3; break; }; break; case 1: switch (kierunek[0]) { case 1: firstStep = 1; break; case 0: koszt += cennikSwiata.rotateCost; if (kierunek[1] == 1) { firstStep = 3; } else { firstStep = 2; } break; case -1: koszt += cennikSwiata.rotateCost * 2; firstStep = 4; break; }; break; case 2: switch (kierunek[0]) { case 1: koszt += cennikSwiata.rotateCost; firstStep = 3; break; case 0: if (kierunek[1] == 1) { koszt += cennikSwiata.rotateCost * 2; firstStep = 4; } else { firstStep = 1; } break; case -1: koszt += cennikSwiata.rotateCost; firstStep = 2; break; }; break; case 3: switch (kierunek[0]) { case 1: koszt += cennikSwiata.rotateCost * 2; firstStep = 4; break; case 0: koszt += cennikSwiata.rotateCost; if (kierunek[1] == 1) { firstStep = 2; } else { firstStep = 3; } break; case -1: firstStep = 1; break; }; break; } overalCost = koszt; } #endregion #region ifZachod //Sprawdzenie, czy idziemy na wschod czy na zachod. else if (mojaPozycjaX - x > 0) { ZbadanePole nextStep = ZnanaMapa.znajdzPole(x + 1, y); before.Add(new Wspolrzedne(x, y)); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 3; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x + 1) && (w.y == y)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 0) || (lastKier == 2)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 1) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x + 1, y, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } if (mojaPozycjaY - y > 0) { nextStep = ZnanaMapa.znajdzPole(x, y + 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 2; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y + 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 2) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } nextStep = ZnanaMapa.znajdzPole(x, y - 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 0; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y - 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 0) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } else { nextStep = ZnanaMapa.znajdzPole(x, y - 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 0; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y - 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 0) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } nextStep = ZnanaMapa.znajdzPole(x, y + 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 2; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y + 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 2) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } nextStep = ZnanaMapa.znajdzPole(x - 1, y); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 1; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x - 1) && (w.y == y)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 0) || (lastKier == 2)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 3) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x - 1, y, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } #endregion #region elseWschod else //Idziemy na wschod { ZbadanePole nextStep = ZnanaMapa.znajdzPole(x - 1, y); before.Add(new Wspolrzedne(x, y)); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 1; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x - 1) && (w.y == y)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 0) || (lastKier == 2)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 3) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x - 1, y, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } if (mojaPozycjaY - y > 0) { nextStep = ZnanaMapa.znajdzPole(x, y + 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 2; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y + 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 2) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } nextStep = ZnanaMapa.znajdzPole(x, y - 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 0; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y - 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 0) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } else { nextStep = ZnanaMapa.znajdzPole(x, y - 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 0; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y - 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 0) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y - 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } nextStep = ZnanaMapa.znajdzPole(x, y + 1); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 2; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y + 1)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 1) || (lastKier == 3)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 2) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x, y + 1, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } nextStep = ZnanaMapa.znajdzPole(x + 1, y); if (nextStep != null) if (!((nextStep.getPrzeszkoda()) || (nextStep.getUnrechable()))) { int nextKier = 3; int[] temp = new int[2]; temp[0] = upCost; if (!before.Exists(delegate(Wspolrzedne w) { if ((w.x == x + 1) && (w.y == y)) return true; else return false; })) { if (before.Count > 1) { ZbadanePole tuStoje = ZnanaMapa.znajdzPole(x, y); int nowaWysokosc = nextStep.getWysokosc(); temp[0] += cennikSwiata.moveCost; temp[0] += Convert.ToInt32(Math.Ceiling(Convert.ToDouble (cennikSwiata.moveCost * (nowaWysokosc - tuStoje .getWysokosc())) / 100)); if ((lastKier == 0) || (lastKier == 2)) temp[0] += cennikSwiata.rotateCost; if (lastKier == 1) temp[0] += cennikSwiata.rotateCost * 2; } temp = znajdzDrogePowrotnaRek(x + 1, y, nextKier, before, temp[0], limit); if (overalCost > temp[0]) { overalCost = temp[0]; firstStep = temp[1]; } } } } #endregion before.Remove( before.Find(delegate(Wspolrzedne w) { if ((w.x == x) && (w.y == y)) return true; else return false; }) ); int[] zwrot = new int[2]; zwrot[0] = overalCost; zwrot[1] = firstStep; return zwrot; }
protected override void BreakTies(List<Player> tiedPlayers) { tiedPlayers.Remove(tiedPlayers.SingleOrDefault(p => p.Role != null && p.Role.GetType() == typeof(BlackjackDealerRole))); }