public ActionResult Index(int? tourId)
        {
            Tour tour = null;
            if (tourId.HasValue) {
                tour = (db.Tours.FirstOrDefault(t => t.Id == tourId.Value));
            }

            if (tour == null) {
                var ip = Request.ServerVariables["REMOTE_ADDR"] ?? "";
                tour = new Tour(ip);

                db.Tours.Add(tour);

                var game = new Game("Dynamo", "Hurricanes", "Field 1", "8:00 AM");
                db.Games.Add(game);
                var tourGame = new TourGame {
                    Game = game,
                    Tour = tour
                };
                db.TourGames.Add(tourGame);

                db.SaveChanges();

                // create games for the tour

                return new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Tours" }, { "tourId", tour.Id } });
            }

            var inputModel = new TourInputModel {
                TourId = tour.Id
            };

            return View(inputModel);
        }
        public void InitTests()
        {
            var engine = new Game(4);
            engine.Init();

            Assert.AreEqual(4, engine.GetPlayers().Count);
            Assert.AreEqual(7, engine.GetPlayerHand(0).Count);
        }
        public void PlayRoundTest()
        {
            var engine = new Game(4);
            engine.Init();

            engine.PlayRound(1);

            Assert.AreEqual(6, engine.GetPlayerHand(0).Count);
        }
        public void PlayGameTest()
        {
            var engine = new Game(4);
            engine.Init();

            engine.SimulateGame();

            Assert.AreEqual(1, engine.GetPlayerHand(0).Count);
        }
        public void PlayGameCardsPlayedTest()
        {
            var engine = new Game(4);
            engine.Init();

            engine.SimulateGame();

            var players = engine.GetPlayers();
            for (int i = 0; i < players.Count; i++)
                Assert.AreEqual(6, players[i].PlayedCards.Count);
        }
        public void CalculateScoreTest()
        {
            var engine = new Game(4);
            engine.Init();

            engine.SimulateGame();

            var players = engine.GetPlayers();
            for (int i = 0; i < players.Count; i++)
            {
                Assert.Greater(players[i].FinalVictoryPoints, 0, String.Format("User {0} has 0 points of victory", i));
            }
        }
        public void SwapCardsTest()
        {
            var engine = new Game(4);
            engine.Init();

            List<Card> initialCards_1 = new List<Card>(engine.GetPlayerHand(1));

            engine.PlayRound(1);

            Assert.AreEqual(6, engine.GetPlayerHand(0).Count);

            var players = engine.GetPlayers();
            for(int i = 0; i < players.Count; i++)
                Assert.AreEqual(1, players[i].PlayedCards.Count);

            Assert.AreEqual(6, players[1].Hand.Count);
            List<Card> initialCards = new List<Card>(players[0].Hand);
            initialCards.Add(players[1].PlayedCards.First());

            var areEqual1 = Card.HandsAreEqual(initialCards_1, initialCards);
            Assert.AreEqual(true, areEqual1);
        }