示例#1
0
        public void FourPlayerAddDistanceTest()
        {
            PlayerOrderManager orderManager = new PlayerOrderManager(new List <PlayerColor> {
                PlayerColor.Yellow, PlayerColor.Red, PlayerColor.Green, PlayerColor.Blue
            }, GameStage.First);

            //green steps 4, which means he steps over red and yellow, total movement 6
            orderManager.AddDistance(PlayerColor.Green, 4);
            Assert.Equal(22, orderManager.Properties[PlayerColor.Green].PlaceValue);
            List <PlayerColor> expectedOrder = new List <PlayerColor> {
                PlayerColor.Green, PlayerColor.Yellow, PlayerColor.Red, PlayerColor.Blue
            };

            Assert.Equal(expectedOrder, orderManager.GetOrder());

            //blue steps 10, which means he steps over everyone else (3 players), total movement 13
            orderManager.AddDistance(PlayerColor.Blue, 10);
            Assert.Equal(27, orderManager.Properties[PlayerColor.Blue].PlaceValue);
            expectedOrder = new List <PlayerColor> {
                PlayerColor.Blue, PlayerColor.Green, PlayerColor.Yellow, PlayerColor.Red
            };
            Assert.Equal(expectedOrder, orderManager.GetOrder());

            //green steps -5, which means he steps over yellow and red, total movement -7
            orderManager.AddDistance(PlayerColor.Green, -5);
            Assert.Equal(15, orderManager.Properties[PlayerColor.Green].PlaceValue);
            expectedOrder = new List <PlayerColor> {
                PlayerColor.Blue, PlayerColor.Yellow, PlayerColor.Red, PlayerColor.Green
            };
            Assert.Equal(expectedOrder, orderManager.GetOrder());
        }
示例#2
0
        public void CrashTest()
        {
            List <PlayerColor> initialOrder = new List <PlayerColor> {
                PlayerColor.Blue, PlayerColor.Green, PlayerColor.Red, PlayerColor.Yellow
            };
            //dictionary for the ordermanager to use for signaling that a player crashed
            Dictionary <PlayerColor, bool> playersCrashed = new Dictionary <PlayerColor, bool>
            {
                { PlayerColor.Blue, false },
                { PlayerColor.Green, false },
                { PlayerColor.Red, false },
                { PlayerColor.Yellow, false }
            };
            PlayerOrderManager orderManger = new PlayerOrderManager(initialOrder, GameStage.First);

            orderManger.PlayerCrashed += (sender, e) =>
            {
                playersCrashed[e] = true;
            };

            //traveling zero distance crashes the player
            orderManger.AddDistance(PlayerColor.Yellow, 0);
            Assert.True(playersCrashed[PlayerColor.Yellow]);

            //40 is the lapsize, so by traveling -40 units the player surely steps over another player
            //making them crash due to the other player being a lap up on them
            orderManger.AddDistance(PlayerColor.Red, -40);
            Assert.True(playersCrashed[PlayerColor.Red]);

            //resetting ordermanager and the dictionary
            orderManger = new PlayerOrderManager(initialOrder, GameStage.First);
            playersCrashed[PlayerColor.Yellow] = false;
            playersCrashed[PlayerColor.Red]    = false;
            orderManger.PlayerCrashed         += (sender, e) =>
            {
                playersCrashed[e] = true;
            };

            //traveling 40 units makes blue up a lap on green, making everyone else crash
            orderManger.AddDistance(PlayerColor.Blue, 40);
            Assert.True(playersCrashed[PlayerColor.Green]);
            Assert.True(playersCrashed[PlayerColor.Red]);
            Assert.True(playersCrashed[PlayerColor.Yellow]);
        }
示例#3
0
        public void TwoPlayerAddDistanceTest()
        {
            //create a PlayerOrderManager with yellow - red initial order in the first stage
            PlayerOrderManager orderManager = new PlayerOrderManager(new List <PlayerColor> {
                PlayerColor.Yellow, PlayerColor.Red
            }, GameStage.First);

            //stepping 5 with red, given that red stepped over yellow, that means the total distance increases to 6
            orderManager.AddDistance(PlayerColor.Red, 5);
            Assert.Equal(24, orderManager.Properties[PlayerColor.Red].PlaceValue);
            List <PlayerColor> expectedOrder = new List <PlayerColor> {
                PlayerColor.Red, PlayerColor.Yellow
            };

            Assert.Equal(expectedOrder, orderManager.GetOrder());

            //stepping another 5 with red, no step over, so total distance is 5
            orderManager.AddDistance(PlayerColor.Red, 5);
            Assert.Equal(29, orderManager.Properties[PlayerColor.Red].PlaceValue);

            //stepping 9 with yellow - would land on red's tile, so steps another one, landing at 30
            orderManager.AddDistance(PlayerColor.Yellow, 9);
            Assert.Equal(30, orderManager.Properties[PlayerColor.Yellow].PlaceValue);
            expectedOrder = new List <PlayerColor> {
                PlayerColor.Yellow, PlayerColor.Red
            };
            Assert.Equal(expectedOrder, orderManager.GetOrder());

            //stepping -5 with yellow - steps over yellow, so total distance is -6
            orderManager.AddDistance(PlayerColor.Yellow, -5);
            Assert.Equal(24, orderManager.Properties[PlayerColor.Yellow].PlaceValue);
            expectedOrder = new List <PlayerColor> {
                PlayerColor.Red, PlayerColor.Yellow
            };
            Assert.Equal(expectedOrder, orderManager.GetOrder());

            //stepping 4 with yellow - this means no step over
            orderManager.AddDistance(PlayerColor.Yellow, 4);
            Assert.Equal(28, orderManager.Properties[PlayerColor.Yellow].PlaceValue);
            Assert.Equal(expectedOrder, orderManager.GetOrder());
        }
示例#4
0
        /// <summary>
        /// Method called when the server sends a message that a player moved
        /// </summary>
        /// <param name="parts"></param>
        private void PlayerMovedResolve(string[] parts)
        {
            PlayerColor player = Enum.Parse <PlayerColor>(parts[1]);

            if (_serverStage != ServerStage.Flight)
            {
                _pingTimer.Stop();
                _pingTimer.Dispose();
                throw new OutOfSyncException();
            }

            int distance = int.Parse(parts[2]);

            _orderManager.AddDistance(player, distance);
        }