예제 #1
0
 static void GetXYFromDirection(DirectionKey dkey, out byte x, out byte y)
 {
     if (dkey.HasFlag(DirectionKey.Left) && !dkey.HasFlag(DirectionKey.Right))
     {
         x = STICK_MIN;
     }
     else if (!dkey.HasFlag(DirectionKey.Left) && dkey.HasFlag(DirectionKey.Right))
     {
         x = STICK_MAX;
     }
     else
     {
         x = STICK_CENTER;
     }
     if (dkey.HasFlag(DirectionKey.Up) && !dkey.HasFlag(DirectionKey.Down))
     {
         y = STICK_MIN;
     }
     else if (!dkey.HasFlag(DirectionKey.Up) && dkey.HasFlag(DirectionKey.Down))
     {
         y = STICK_MAX;
     }
     else
     {
         y = STICK_CENTER;
     }
 }
예제 #2
0
            public static Key RStick(DirectionKey dkey)
            {
                byte x, y;

                GetXYFromDirection(dkey, out x, out y);
                return(RStick(x, y));
            }
예제 #3
0
 private void Direction(DirectionKey dkey, bool down, ref DirectionKey flags, Func <byte, byte, ECKey> getkey)
 {
     if (down)
     {
         flags |= dkey;
     }
     else
     {
         flags &= ~dkey;
     }
     GetXYFromDirection(flags, out byte x, out byte y);
     Down(getkey(x, y));
 }
        public void culebritaTest()
        {
            Console.Title = "Culebrita Cola Circular";
            DirectionKey direction       = new DirectionKey();
            ColaCircular cirular         = new ColaCircular();
            var          punteo          = 0;
            var          velocidad       = 80;
            var          posiciónComida  = Point.Empty;
            var          tamañoPantalla  = new Size(60, 20);
            var          longitudCulebra = 15;
            var          posiciónActual  = new Point(0, 9);

            cirular.insertar(posiciónActual);
            var dirección = DirectionKey.Direction.Derecha;

            direction.DibujaPantalla(tamañoPantalla);
            direction.MuestraPunteo(punteo);

            while (MoverLaCulebrita1(cirular, posiciónActual, longitudCulebra, tamañoPantalla))
            {
                if (velocidad > 0)
                {
                    Thread.Sleep(velocidad);
                }
                dirección      = direction.ObtieneDireccion(dirección);
                posiciónActual = direction.ObtieneSiguienteDireccion(dirección, posiciónActual);

                if (posiciónActual.Equals(posiciónComida))
                {
                    posiciónComida = Point.Empty;
                    longitudCulebra++;;
                    punteo += 10;
                    direction.MuestraPunteo(punteo);
                    Console.Beep();
                    velocidad -= 3;
                }

                if (posiciónComida == Point.Empty)
                {
                    posiciónComida = MostrarComida1(tamañoPantalla, cirular);
                }
            }

            Console.ResetColor();
            Console.SetCursorPosition(tamañoPantalla.Width / 2 - 4, tamañoPantalla.Height / 2);
            Console.Write("Fin del Juego");
            Thread.Sleep(2000);
            new Game().Start();
        }
예제 #5
0
        void Direction(DirectionKey dkey, bool down, ref DirectionKey flags, Func <byte, byte, Key> getkey)
        {
            var oldflags = flags;

            if (down)
            {
                flags |= dkey;
            }
            else
            {
                flags &= ~dkey;
            }
            byte x, y;

            GetXYFromDirection(flags, out x, out y);
            Down(getkey(x, y));
        }
예제 #6
0
 static HAT GetHATFromDirection(DirectionKey dkey)
 {
     if (dkey.HasFlag(DirectionKey.Up) && dkey.HasFlag(DirectionKey.Down))
     {
         dkey &= ~DirectionKey.Up & ~DirectionKey.Down;
     }
     if (dkey.HasFlag(DirectionKey.Left) && dkey.HasFlag(DirectionKey.Right))
     {
         dkey &= ~DirectionKey.Left & ~DirectionKey.Right;
     }
     if (dkey == DirectionKey.Up)
     {
         return(HAT.TOP);
     }
     if (dkey == DirectionKey.Down)
     {
         return(HAT.BOTTOM);
     }
     if (dkey == DirectionKey.Left)
     {
         return(HAT.LEFT);
     }
     if (dkey == DirectionKey.Right)
     {
         return(HAT.RIGHT);
     }
     if (dkey.HasFlag(DirectionKey.Up) && dkey.HasFlag(DirectionKey.Left))
     {
         return(HAT.TOP_LEFT);
     }
     if (dkey.HasFlag(DirectionKey.Up) && dkey.HasFlag(DirectionKey.Right))
     {
         return(HAT.TOP_RIGHT);
     }
     if (dkey.HasFlag(DirectionKey.Down) && dkey.HasFlag(DirectionKey.Left))
     {
         return(HAT.BOTTOM_LEFT);
     }
     if (dkey.HasFlag(DirectionKey.Down) && dkey.HasFlag(DirectionKey.Right))
     {
         return(HAT.BOTTOM_RIGHT);
     }
     return(HAT.CENTER);
 }
예제 #7
0
 public void RightDirection(DirectionKey dkey, bool down)
 {
     Direction(dkey, down, ref _rightStick, Key.RStick);
 }
예제 #8
0
 public void LeftDirection(DirectionKey dkey, bool down)
 {
     Direction(dkey, down, ref _leftStick, Key.LStick);
 }
예제 #9
0
 public static Key HAT(DirectionKey dkey)
 {
     return(HAT(GetHATFromDirection(dkey)));
 }
 protected abstract KeyControl GetKeyControl(DirectionKey key);