Exemplo n.º 1
0
 private static void OnDice(Message msg)
 {
     DiceEvent?.Invoke(new MessageEventArgs()
     {
         msg = msg
     });
 }
        public static bool Scatter(DiceEvent d8event, int length, BoardPosition position)
        {
            var d8 = Convert.ToInt32(d8event.Dices.First());

            for (var i = 0; i < length; i++)
            {
                switch (d8)
                {
                case 1:
                    position.X--;
                    position.Y--;
                    break;

                case 2:
                    position.Y--;
                    break;

                case 3:
                    position.X++;
                    position.Y--;
                    break;

                case 4:
                    position.X--;
                    break;

                case 5:
                    position.X++;
                    break;

                case 6:
                    position.X--;
                    position.Y++;
                    break;

                case 7:
                    position.Y++;
                    break;

                case 8:
                    position.X++;
                    position.Y++;
                    break;

                default:
                    throw new NotImplementedException();
                }

                if (position.X < 0 || position.X >= BoardWidth ||
                    position.Y < 0 || position.Y >= BoardHeight)
                {
                    // Out of bounds
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 3
0
 public Event deSerializeEvent(byte[] b)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         ms.Write(b, 0, b.Length);
         ms.Seek(0, SeekOrigin.Begin);
         DiceEvent eventData = (DiceEvent)bf.Deserialize(ms);
         return(eventData);
     }
 }
        public static bool ThrowIn(DiceEvent d6event, BoardPosition position)
        {
            var d6       = d6event.Dices.Select(d => Convert.ToInt32(d)).ToList();
            var throwIn  = d6[0];
            var distance = d6[1] + d6[2];

            var dx = 0;
            var dy = 0;

            if ((position.X < 0 && position.Y < 0) ||
                (position.X >= BoardWidth && position.Y < 0))
            {
                // Out from top corners. Force it to be end zone.
                position.Y = 0;
            }
            else if ((position.X < 0 && position.Y >= BoardHeight) ||
                     (position.X >= BoardWidth && position.Y >= BoardHeight))
            {
                // Out from bottom corners. Force it to be end zone.
                position.Y = BoardHeight - 1;
            }

            switch (throwIn)
            {
            case 1:
            case 2:
                if (position.X < 0)
                {
                    // Out from left side
                    dx = 1;
                    dy = -1;
                }
                else if (position.X >= BoardWidth)
                {
                    // Out from right side
                    dx = -1;
                    dy = 1;
                }
                else if (position.Y < 0)
                {
                    // Out from top side
                    dx = 1;
                    dy = 1;
                }
                else if (position.Y >= BoardHeight)
                {
                    // Out from bottom side
                    dx = -1;
                    dy = -1;
                }
                break;

            case 3:
            case 4:
                if (position.X < 0)
                {
                    // Out from left side
                    dx = 1;
                }
                else if (position.X >= BoardWidth)
                {
                    // Out from right side
                    dx = -1;
                }
                else if (position.Y < 0)
                {
                    // Out from top side
                    dy = 1;
                }
                else if (position.Y >= BoardHeight)
                {
                    // Out from bottom side
                    dy = -1;
                }
                break;

            case 5:
            case 6:
                if (position.X < 0)
                {
                    // Out from left side
                    dx = 1;
                    dy = 1;
                }
                else if (position.X >= BoardWidth)
                {
                    // Out from right side
                    dx = -1;
                    dy = -1;
                }
                else if (position.Y < 0)
                {
                    // Out from top side
                    dx = -1;
                    dy = 1;
                }
                else if (position.Y >= BoardHeight)
                {
                    // Out from bottom side
                    dx = 1;
                    dy = -1;
                }
                break;

            default:
                throw new NotImplementedException();
            }

            for (var i = 0; i < distance; i++)
            {
                position.X += dx;
                position.Y += dy;

                if (position.X < 0 || position.X >= BoardWidth ||
                    position.Y < 0 || position.Y >= BoardHeight)
                {
                    // Out of bounds
                    return(true);
                }
            }

            return(false);
        }