Ejemplo n.º 1
0
        static QueenAction GetQueenAction(int frame, QueenAction previousAction, RngManipulation rngManipulation = RngManipulation.None)
        {
            var index = frame + frame - 0x2C + (int)rngManipulation;

            if (previousAction == QueenAction.Stomp)
            {
                index += 8;
            }
            else if (previousAction == QueenAction.None || previousAction == QueenAction.StepBack)
            {
                return((Numbers[index & 0xFF] & 0x01) == 0x01 ? QueenAction.Scream : QueenAction.Stomp);
            }

            var number = Numbers[index & 0xFF] & 0x07;

            if (number < 5)
            {
                return(QueenAction.StepBack);
            }
            else if (number < 7)
            {
                return(QueenAction.Scream);
            }
            else
            {
                return(QueenAction.Stomp);
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            var translation = new string[] { null, "A", "B", ">" };
            var durations   = new List <int>();
            var sequenceStartRngManipulation = new RngManipulation[] { RngManipulation.None, RngManipulation.None, RngManipulation.None, RngManipulation.None, RngManipulation.None, RngManipulation.None, RngManipulation.None, RngManipulation.None };

            for (int startFrame = 0; startFrame < 256; startFrame++)
            {
                var queenActions  = new List <QueenAction>();
                var currentFrame  = startFrame;
                var queenAction   = QueenAction.None;
                var stepBackCount = 0;

                for (int i = 0; stepBackCount < 9; i++)
                {
                    var rngManipulation = RngManipulation.None;
                    if ((i == 0 || queenActions[i - 1] == QueenAction.StepBack) && stepBackCount < sequenceStartRngManipulation.Length)
                    {
                        rngManipulation = sequenceStartRngManipulation[stepBackCount];
                    }

                    queenAction   = GetQueenAction(currentFrame, queenAction, rngManipulation);
                    currentFrame += GetFrameCount(queenAction);
                    queenActions.Add(queenAction);

                    if (queenAction == QueenAction.StepBack)
                    {
                        stepBackCount++;
                    }
                }

                var duration = currentFrame - startFrame;
                Console.WriteLine("{0:X2} ({1}): {2}", startFrame, duration, string.Join("", queenActions.Select(x => translation[(int)x])));
                durations.Add(duration);
            }
            Console.WriteLine("RNG manip: {0}", string.Join(", ", sequenceStartRngManipulation));
            Console.WriteLine("Average: {0}", durations.Average());
            Console.WriteLine("Best: {0}", durations.Min());
            Console.WriteLine("Worst: {0}", durations.Max());
            Console.WriteLine("Median: {0}", durations.OrderBy(x => x).Skip(durations.Count / 2).First());

            Console.ReadKey();
        }