public Game ResumeGame(Player player, int questionSetID, ref bool isNewGame) { Game game; using (var db = new ErgoQuizEntities()) { game = db.Game.FirstOrDefault(g => g.PlayerID == player.PlayerID && g.QuestionSetID == questionSetID); if (game == null) { string sequence = GenerateGameSequence(questionSetID); int firstQuestionID = Int32.Parse(sequence.Split(',')[0]); game = new Game() { PlayerID = player.PlayerID, QuestionSetID = questionSetID, IsGameEnded = false, TotalTimeUsed = 0, ActualTimeUsed = 0, GameSequence = sequence, MostRecentEndedQuestionID = 0, TotalScore = 0, MaxConsecutiveScore = 0, ConsecutiveScore = 0 }; db.Game.Add(game); db.SaveChanges(); isNewGame = true; } } return(game); }
public Question GetQuestion(Session session) { using (var db = new ErgoQuizEntities()) { return(db.Question.Find(session.QuestionID)); } }
public void EndTheGame(Game game) { using (var db = new ErgoQuizEntities()) { game.IsGameEnded = true; db.Game.Attach(game); db.Entry(game).Property(g => g.IsGameEnded).IsModified = true; db.SaveChanges(); } }
public Session GetCurrentSessionForAnswer(Game game) { Session session; using (var db = new ErgoQuizEntities()) { // Find an open session. session = db.Session.FirstOrDefault(s => s.GameID == game.GameID && s.IsAnsered == false && s.IsSkipped == false); } return(session); }
public void Log(int eventID, string value) { using (var db = new ErgoQuizEntities()) { db.Event.Add(new Event() { EventTypeID = eventID, Value = value, At = DateTime.UtcNow }); db.SaveChanges(); } }
private string GenerateGameSequence(int questionSetID) { using (var db = new ErgoQuizEntities()) { List <Int32> allQuestion = new List <Int32>(); foreach (var question in db.Question.Where(q => q.QuestionSetID == questionSetID)) { allQuestion.Add(question.QuestionID); } var rnd = new Random(); var sequence = allQuestion.OrderBy(item => rnd.Next()); var output = String.Join(",", sequence); return(output); } }
// Get Player from DB. Create new if not exists. public Player RetrievePlayer(string playerLanID) { Player player; using (var db = new ErgoQuizEntities()) { player = db.Player.FirstOrDefault(p => p.LanId == playerLanID); if (player == null) { player = new Player() { LanId = playerLanID }; db.Player.Add(player); db.SaveChanges(); } } return(player); }
public bool Evaluate(Session session, int answer, long timeLeft) { DateTime answerAt = DateTime.UtcNow; // Server time diff for waiting answer TimeSpan actualTimeUsed = (answerAt - (DateTime)session.AskAt); long actualMsUsed = (long)actualTimeUsed.TotalMilliseconds; // Time reported by user long totalMsUsed = (long)session.TimeLeftBeforeAsk - timeLeft; Question question; using (var db = new ErgoQuizEntities()) { question = db.Question.Find(session.QuestionID); } int key = (int)question.Answer; bool isCorrect = key == answer; using (var db = new ErgoQuizEntities()) { session.Answer = answer; session.IsAnsered = true; session.isCorrect = isCorrect; session.TimeLeftAfterAnswer = timeLeft; session.AnswerAt = answerAt; session.TotalTimeUsed = totalMsUsed; session.ActualTimeUsed = actualMsUsed; db.Session.Attach(session); db.Entry(session).Property(s => s.Answer).IsModified = true; db.Entry(session).Property(s => s.IsAnsered).IsModified = true; db.Entry(session).Property(s => s.isCorrect).IsModified = true; db.Entry(session).Property(s => s.TimeLeftAfterAnswer).IsModified = true; db.Entry(session).Property(s => s.AnswerAt).IsModified = true; db.Entry(session).Property(s => s.TotalTimeUsed).IsModified = true; db.Entry(session).Property(s => s.ActualTimeUsed).IsModified = true; db.SaveChanges(); } using (var db = new ErgoQuizEntities()) { Game game = db.Game.FirstOrDefault(g => g.GameID == session.GameID); game.MostRecentEndedQuestionID = session.QuestionID; game.TotalTimeUsed += totalMsUsed; game.ActualTimeUsed += actualMsUsed; if (isCorrect) { game.TotalScore += 1; game.ConsecutiveScore += 1; if (game.ConsecutiveScore > game.MaxConsecutiveScore) { game.MaxConsecutiveScore = game.ConsecutiveScore; } } else { game.ConsecutiveScore = 0; } db.Game.Attach(game); db.Entry(game).Property(g => g.MostRecentEndedQuestionID).IsModified = true; db.Entry(game).Property(g => g.TotalTimeUsed).IsModified = true; db.Entry(game).Property(g => g.ActualTimeUsed).IsModified = true; db.Entry(game).Property(g => g.TotalScore).IsModified = true; db.Entry(game).Property(g => g.ConsecutiveScore).IsModified = true; db.Entry(game).Property(g => g.MaxConsecutiveScore).IsModified = true; db.SaveChanges(); } return(isCorrect); }
// return null if no more question to play. public Session GetCurrentSessionForReady(Game game, long timeLeftBeforeAsk) { // If there's open sesssion = skip and determine nextID using last ended to determine // Else create new session with redetermining one Session session; using (var db = new ErgoQuizEntities()) { // Find an open session. session = db.Session.FirstOrDefault(s => s.GameID == game.GameID && s.IsAnsered == false && s.IsSkipped == false); // User try to retrieved question without answered the old one. // Skip the old one first if (session != null) { session.IsSkipped = true; session.SkippedAt = DateTime.UtcNow; db.Session.Attach(session); db.Entry(session).Property(s => s.IsSkipped).IsModified = true; db.Entry(session).Property(s => s.SkippedAt).IsModified = true; game.MostRecentEndedQuestionID = session.QuestionID; db.Game.Attach(game); db.Entry(game).Property(g => g.MostRecentEndedQuestionID).IsModified = true; db.SaveChanges(); } } session = null; // This method should not be called, when game is already ended. if (game.IsGameEnded) { return(null); } int nextQuestionID = determineNextQuestionID(game); if (nextQuestionID == 0) { // For end the game. return(null); } Session newCreatedSession = new Session() { GameID = game.GameID, QuestionID = nextQuestionID, TimeLeftBeforeAsk = timeLeftBeforeAsk, AskAt = DateTime.UtcNow, Answer = 0, IsAnsered = false, isCorrect = false, //TimeLeftAfterAnswer = "N/A", //AnswerAt = "N/A", // GameSequenceAt = 1, /not used anymore/ TotalTimeUsed = 0, ActualTimeUsed = 0, IsSkipped = false //SkippedAt = "N/A" }; using (var db = new ErgoQuizEntities()) { db.Session.Add(newCreatedSession); db.SaveChanges(); } return(newCreatedSession); }