public void ExtractPlaySessionsDataTest() { playsessions.Clear(); ps1.BoardGame = catan; playsessions.Add(ps1); participants.Clear(); participants.Add(par1); participants.Add(par2); players.Clear(); players.Add(peter); players.Add(will); List <playerSearch> newParticipants = new List <playerSearch>(); var playerSearch1 = new playerSearch(peter.Id, peter.Name); playerSearch1.Winner = true; playerSearch1.Team = 1; var playerSearch2 = new playerSearch(will.Id, will.Name); playerSearch2.Winner = true; playerSearch2.Team = 2; newParticipants.Add(playerSearch1); newParticipants.Add(playerSearch2); List <PlaySessionData> testPSD = new List <PlaySessionData>(); var sample = new PlaySessionData(catan, newParticipants, TimeSpan.Zero, new DateTime(2017, 11, 15, 9, 30, 00).ToString()); List <playerSearch> team1Members = new List <playerSearch>(); team1Members.Add(playerSearch1); var team1 = new Team(); team1.Name = 1; team1.Name = 1; team1.TeamMates = team1Members; team1.Winner = true; sample.Teams = new List <Team>(); sample.Teams.Add(team1); List <playerSearch> team2Members = new List <playerSearch>(); team2Members.Add(playerSearch2); var team2 = new Team(); team2.Name = 2; team2.TeamMates = team2Members; team2.Winner = false; sample.Teams.Add(team2); testPSD.Add(sample); //heres the method List <PlaySessionData> returned = p.ExtractPlaySessionsData(playsessions, playerSearch1); //testPSD.ForEach(TestContext.WriteLine); TestContext.WriteLine(testPSD[0].BoardGame.Name.ToString()); //returned.ForEach(TestContext.WriteLine); TestContext.WriteLine(returned[0].BoardGame.Name.ToString()); var testLikeness = new Likeness <List <PlaySessionData>, List <PlaySessionData> >(testPSD); Assert.AreEqual(testLikeness, returned); }
public bool CanMiniGameBePlayedAtPlaySession(PlaySessionData psData, MiniGameCode code) { if (psData != null) { var mgIndex = psData.Minigames.ToList().FindIndex(x => x.MiniGameCode == code); if (mgIndex >= 0) { return(true); } } return(false); }
private List <MiniGameData> PerformSelection_Sequence(PlaySessionData playSessionData, int numberToSelect) { // Get all minigame codes for the given playsession // ... also, use the weights to determine insertion order (used to determine the sequential order) var ordered_minigamecodes = new SortedDictionary <float, MiniGameCode>(); int fakeNumber = 1000; foreach (var minigameInPlaySession in playSessionData.Minigames) { if (ordered_minigamecodes.ContainsKey(minigameInPlaySession.Weight)) { ordered_minigamecodes[fakeNumber] = minigameInPlaySession.MiniGameCode; fakeNumber++; } else { ordered_minigamecodes[minigameInPlaySession.Weight] = minigameInPlaySession.MiniGameCode; } } // Get, in order, each minigame data, filter by availability (from the static DB) var minigame_data_list = new List <MiniGameData>(); foreach (var orderedPair in ordered_minigamecodes) { var data = dbManager.GetMiniGameDataByCode(orderedPair.Value); if (data.Active) { minigame_data_list.Add(data); } } // Number checks int actualNumberToSelect = UnityEngine.Mathf.Min(numberToSelect, minigame_data_list.Count); if (minigame_data_list.Count == 0) { throw new System.Exception("Cannot find even a single minigame for play session " + playSessionData.Id); } if (numberToSelect > minigame_data_list.Count) { UnityEngine.Debug.LogWarning("Could not select the requested number of " + numberToSelect + " minigames for play session " + playSessionData.Id + " (only " + minigame_data_list.Count + " are available)"); } // Choose the first N minigames in the ordered list var selectedMiniGameData = minigame_data_list.GetRange(0, actualNumberToSelect); return(selectedMiniGameData); }
private string[] GetAllLetterIdsFromPreviousPlaySessions(PlaySessionData current_ps) { // @note: this assumes that all play sessions are correctly ordered var all_ps_list = dbManager.GetAllPlaySessionData(); int current_id = all_ps_list.IndexOf(current_ps); List <string> all_ids = new List <string>(); for (int prev_id = 0; prev_id < current_id; prev_id++) { all_ids.AddRange(all_ps_list[prev_id].Letters); } return(all_ids.ToArray()); }
public List <MiniGameData> PerformSelection(string playSessionId, int numberToSelect) { PlaySessionData playSessionData = dbManager.GetPlaySessionDataById(playSessionId); List <MiniGameData> selectedMiniGameData = null; switch (playSessionData.Order) { case PlaySessionDataOrder.Sequence: selectedMiniGameData = PerformSelection_Sequence(playSessionData, numberToSelect); break; case PlaySessionDataOrder.Random: selectedMiniGameData = PerformSelection_Random(playSessionData, numberToSelect); break; } return(selectedMiniGameData); }
public PlaySessionState(PlaySessionData _psData, JourneyScoreData _scoreData) { this.psData = _psData; this.scoreData = _scoreData; }
private List <MiniGameData> PerformSelection_Random(PlaySessionData playSessionData, int numberToSelect) { // Get all minigames ids for the given playsession (from PlaySessionData) // ... also, keep the weights around var minigame_id_list = new List <string>(); var playsession_weights_dict = new Dictionary <MiniGameCode, float>(); foreach (var minigameInPlaySession in playSessionData.Minigames) { minigame_id_list.Add(minigameInPlaySession.MiniGameCode.ToString()); playsession_weights_dict[minigameInPlaySession.MiniGameCode] = minigameInPlaySession.Weight; } // Get all minigame data, filter by availability (from the static DB) var minigame_data_list = dbManager.FindMiniGameData(x => x.Active && minigame_id_list.Contains(x.GetId())); // Create the weights list too var weights_list = new List <float>(minigame_data_list.Count); // Retrieve the current score data (state) for each minigame (from the dynamic DB) var minigame_score_list = dbManager.Query <MiniGameScoreData>("SELECT * FROM " + typeof(MiniGameScoreData).Name); //UnityEngine.Debug.Log("M GAME SCORE LIST: " + minigame_score_list.Count); //foreach(var l in minigame_score_list) UnityEngine.Debug.Log(l.ElementId); // Determine the final weight for each minigame var required_minigames = new List <MiniGameData>(); string debugString = ConfigAI.FormatTeacherReportHeader("Minigame Selection"); foreach (var minigame_data in minigame_data_list) { float cumulativeWeight = 0; var minigame_scoredata = minigame_score_list.Find(x => x.MiniGameCode == minigame_data.Code); int daysSinceLastScore = 0; if (minigame_scoredata != null) { var timespanFromLastScoreToNow = GenericHelper.GetTimeSpanBetween(minigame_scoredata.UpdateTimestamp, GenericHelper.GetTimestampForNow()); daysSinceLastScore = timespanFromLastScoreToNow.Days; } debugString += minigame_data.Code + " --- \t"; // PlaySession Weight [0,1] float playSessionWeight = playsession_weights_dict[minigame_data.Code] / 100f; // [0-100] cumulativeWeight += playSessionWeight * ConfigAI.MiniGame_PlaySession_Weight; debugString += " PSw: " + playSessionWeight * ConfigAI.MiniGame_PlaySession_Weight + "(" + playSessionWeight + ")"; // Some minigames are required to appear (weight 100+) if (playsession_weights_dict[minigame_data.Code] >= 100) { required_minigames.Add(minigame_data); debugString += " REQUIRED!\n"; continue; } // RecentPlay Weight [1,0] const float dayLinerWeightDecrease = 1f / ConfigAI.DaysForMaximumRecentPlayMalus; float weightMalus = daysSinceLastScore * dayLinerWeightDecrease; float recentPlayWeight = 1f - UnityEngine.Mathf.Min(1, weightMalus); cumulativeWeight += recentPlayWeight * ConfigAI.MiniGame_RecentPlay_Weight; debugString += " RPw: " + recentPlayWeight * ConfigAI.MiniGame_RecentPlay_Weight + "(" + recentPlayWeight + ")"; // Save cumulative weight weights_list.Add(cumulativeWeight); debugString += " TOTw: " + cumulativeWeight + "\n"; } if (ConfigAI.VerboseMinigameSelection) { ConfigAI.AppendToTeacherReport(debugString); } // Number checks int actualNumberToSelect = UnityEngine.Mathf.Min(numberToSelect, minigame_data_list.Count); // Remove the required ones actualNumberToSelect -= required_minigames.Count; foreach (var requiredMinigame in required_minigames) { minigame_data_list.Remove(requiredMinigame); } if (actualNumberToSelect > 0 && minigame_data_list.Count == 0) { throw new System.Exception("Cannot find even a single minigame for play session " + playSessionData.Id); } if (actualNumberToSelect > minigame_data_list.Count) { UnityEngine.Debug.LogWarning("Could not select the requested number of " + numberToSelect + " minigames for play session " + playSessionData.Id + " (only " + minigame_data_list.Count + " are available)"); } // Choose N minigames based on these weights var selectedMiniGameData = RandomHelper.RouletteSelectNonRepeating(minigame_data_list, weights_list, actualNumberToSelect); // Output var finalList = new List <MiniGameData>(); finalList.AddRange(required_minigames); finalList.AddRange(selectedMiniGameData); return(finalList); }
public void AnalyzePlayStats() { playsessions.Clear(); ps1.BoardGame = catan; playsessions.Add(ps1); participants.Clear(); participants.Add(par1); participants.Add(par2); players.Clear(); players.Add(peter); players.Add(will); List <playerSearch> newParticipants = new List <playerSearch>(); var playerSearch1 = new playerSearch(peter.Id, peter.Name); playerSearch1.Winner = true; playerSearch1.Team = 1; var playerSearch2 = new playerSearch(will.Id, will.Name); playerSearch2.Winner = true; playerSearch2.Team = 2; newParticipants.Add(playerSearch1); newParticipants.Add(playerSearch2); List <PlaySessionData> testPSD = new List <PlaySessionData>(); var sample = new PlaySessionData(catan, newParticipants, TimeSpan.Zero, new DateTime(2017, 11, 15, 9, 30, 00).ToString()); List <playerSearch> team1Members = new List <playerSearch>(); team1Members.Add(playerSearch1); var team1 = new Team(); team1.Name = 1; team1.Name = 1; team1.TeamMates = team1Members; team1.Winner = true; sample.Teams = new List <Team>(); sample.Teams.Add(team1); List <playerSearch> team2Members = new List <playerSearch>(); team2Members.Add(playerSearch2); var team2 = new Team(); team2.Name = 2; team2.TeamMates = team2Members; team2.Winner = false; sample.Teams.Add(team2); testPSD.Add(sample); var testlist = new List <PlayerStats>(); PlayerStats willstats = new PlayerStats(will.Id, will.Name); willstats.Plays = 1; //willstats.Wins = 1; willstats.OpponentWin = 1; testlist.Add(willstats); var results = StatsCtrl.AnalyzePlayStats(testPSD, playerSearch1); var testlistlikeness = new Likeness <List <PlayerStats>, List <PlayerStats> >(testlist); //Assert.AreEqual(results.AshamedLosers, new List<PlayerStats>()); //Assert.AreEqual(results.CourageousAllies, new List<PlayerStats>()); //Assert.AreEqual(results.FrailAllies, new List<PlayerStats>()); //Assert.AreEqual(results.TieGuys, new List<PlayerStats>()); //Assert.AreEqual(results.Conqueror, new List<PlayerStats>()); //Assert.AreEqual(results.DastardlyVillan, new List<PlayerStats>()); //Assert.AreEqual( testlistlikeness, results.Buddies); //Assert.AreEqual(testlistlikeness, results.CowardlyVillan); //Assert.AreEqual(testlistlikeness, results.Fodder); }
public void RegisterSessionStar(string gameName, string levelOrMode) { currentData = new PlaySessionData(); currentData.GameMode = levelOrMode; currentData.StartTime = DateTime.Now; }