コード例 #1
0
        public void UpdateMemorySetsEyeRefCount()
        {
            var bot = new Bot
            {
                DNA = new[] {
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye1),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye2),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye3),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye4),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye5),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye6),
                    new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye7),
                    new BasePair(BasePairType.Number, (int)MemoryAddresses.Eye1),
                    new BasePair(BasePairType.Basic, (int)MemoryAddresses.Eye2),
                    new BasePair(BasePairType.Boolean, (int)MemoryAddresses.Eye3),
                    new BasePair(BasePairType.Condition, (int)MemoryAddresses.Eye4),
                    new BasePair(BasePairType.Flow, (int)MemoryAddresses.Eye5),
                    new BasePair(BasePairType.Store, (int)MemoryAddresses.Eye6),
                    new BasePair(BasePairType.Unknown, (int)MemoryAddresses.Eye7),
                }
            };

            RuntimeEngine.UpdateMemory(bot);

            bot.GetFromMemory(MemoryAddresses.MyEyeRefCount).Should().Be(7);
        }
コード例 #2
0
        public void UpdateMemoryTransformsSpeed()
        {
            const int   testX     = 10;
            const float testAngle = (float)Math.PI / 3;

            var bot = new Bot()
            {
                Orientation = testAngle,
                Speed       = new Vector2(testX, 0)
            };

            RuntimeEngine.UpdateMemory(bot);

            bot.GetFromMemory(MemoryAddresses.SpeedForward).Should().Be((int)Math.Round(testX * Math.Cos(testAngle)));
            bot.GetFromMemory(MemoryAddresses.SpeedRight).Should().Be((int)Math.Round(-testX * Math.Sin(testAngle)));
        }
コード例 #3
0
        public void UpdateMemoryClearsUserMemory()
        {
            var bot = new Bot();

            bot.SetMemory(MemoryAddresses.MoveDown, 1);
            bot.SetMemory(MemoryAddresses.MoveUp, 2);
            bot.SetMemory(MemoryAddresses.MoveLeft, 3);
            bot.SetMemory(MemoryAddresses.MoveRight, 4);
            bot.SetMemory(MemoryAddresses.TurnLeft, 5);
            bot.SetMemory(MemoryAddresses.TurnRight, 6);

            RuntimeEngine.UpdateMemory(bot);

            bot.GetFromMemory(MemoryAddresses.MoveDown).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.MoveUp).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.MoveLeft).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.MoveRight).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.TurnLeft).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.TurnRight).Should().Be(0);
        }
コード例 #4
0
        public void UpdateMemorySetsBotEyes()
        {
            var testArray = new float[Bot.EyeCount];

            for (var i = 0; i < Bot.EyeCount; i++)
            {
                testArray[i] = i * 3.2f;
            }

            var bot = new Bot
            {
                EyeDistances = testArray
            };

            RuntimeEngine.UpdateMemory(bot);

            for (var i = 0; i < Bot.EyeCount; i++)
            {
                bot.GetFromMemory(MemoryAddresses.EyeFirst, i).Should().Be((int)Math.Round(testArray[i]));
            }
        }
コード例 #5
0
        public void UpdateMemorySetFocusBotMemoryWhenPresent()
        {
            const int TestForward = 3;
            const int TestRight   = 4;

            var bot = new Bot
            {
                Orientation = 0,
                FocussedBot = new Bot
                {
                    Speed = new Vector2(TestForward, TestRight),
                    DNA   = new[] { new BasePair(BasePairType.StarNumber, (int)MemoryAddresses.Eye1) }
                }
            };

            RuntimeEngine.UpdateMemory(bot);

            bot.GetFromMemory(MemoryAddresses.FocusBotSpeed).Should().Be((int)Math.Round(bot.FocussedBotRelativeSpeed.Length()));
            bot.GetFromMemory(MemoryAddresses.FocusBotSpeedForward).Should().Be((int)Math.Round(bot.FocussedBotRelativeSpeed.X));
            bot.GetFromMemory(MemoryAddresses.FocusBotSpeedRight).Should().Be((int)Math.Round(bot.FocussedBotRelativeSpeed.Y));
            bot.GetFromMemory(MemoryAddresses.FocusBotEyeRefCount).Should().Be(1);
        }
コード例 #6
0
        public void UpdateMemoryUpdatesStateMemory()
        {
            const int TestForward = 3;
            const int TestRight   = 4;
            const int TestSpeed   = 5;

            var bot = new Bot()
            {
                Orientation = 0,
                Speed       = new Vector2(TestForward, TestRight)
            };

            RuntimeEngine.UpdateMemory(bot);
            bot.GetFromMemory(MemoryAddresses.Speed).Should().Be(TestSpeed);
            bot.GetFromMemory(MemoryAddresses.SpeedRight).Should().Be(TestRight);
            bot.GetFromMemory(MemoryAddresses.SpeedForward).Should().Be(TestForward);
            for (var i = 0; i < Bot.EyeCount; i++)
            {
                bot.GetFromMemory(MemoryAddresses.EyeFirst, i).Should().Be(0);
            }
            bot.GetFromMemory(MemoryAddresses.FocusBotDistance).Should().Be(0);
            bot.GetFromMemory(MemoryAddresses.MyEyeRefCount).Should().Be(0);
        }