Пример #1
0
        public void ChangePhysicalMap(PhysicalMap map)
        {
            int firstBorder;

            if (location.Y + size.Height > map.Height)
            {
                firstBorder = map.Height;
            }
            else
            {
                firstBorder = location.Y + size.Height;
            }
            int secondBorder;

            if (location.X + size.Width > map.Width)
            {
                secondBorder = map.Width;
            }
            else
            {
                secondBorder = location.X + size.Width;
            }
            for (int i = location.Y; i < firstBorder; i++)
            {
                for (int j = location.X; j < secondBorder; j++)
                {
                    map.MapMatrix[i][j] = (int)PhysicalMap.KindOfArea.EXPLOSION;
                }
            }
        }
        public GameCoreServer
        (
            int width, int height, Size playerSize, Size playerOnDeathSize,
            Size bombSize, Size explosionSize, Size wallSize, string dirResources, SendFunc sendFunc
        )
        {
            this.map      = new PhysicalMap(width, height);
            objectsList   = new ObjectsLists();
            spawnPoints   = new List <Point>();
            this.sendFunc = sendFunc;

            timer          = new Timer();
            delay          = 60;
            timer.Interval = delay;
            timer.Elapsed += TimerEvent;
            randomGen      = new Random();

            scriptEngine = new ScriptEngine();

            this.playerSize        = playerSize;
            this.bombSize          = bombSize;
            this.explosionSize     = explosionSize;
            this.wallSize          = wallSize;
            this.playerOnDeathSize = playerOnDeathSize;

            GenerateWalls();
        }
Пример #3
0
 public virtual void ChangeMapMatrix(PhysicalMap PhysicalMap)
 {
     for (int i = Y; i < Y + size.Height; i++)
     {
         for (int j = X; j < X + size.Width; j++)
         {
             PhysicalMap.MapMatrix[i][j] = (int)PhysicalMap.KindOfArea.BOMB;
         }
     }
 }
 public void ClearPrevPlace(PhysicalMap PhysicalMap)
 {
     for (int i = Y; i < Y + size.Height; i++)
     {
         for (int j = X; j < X + size.Width; j++)
         {
             PhysicalMap.MapMatrix[i][j] = 0;
         }
     }
 }
Пример #5
0
 public override void ChangeMapMatrix(PhysicalMap PhysicalMap)
 {
     for (int i = Y; i < Y + size.Height; i++)
     {
         for (int j = X; j < X + size.Width; j++)
         {
             PhysicalMap.MapMatrix[i][j] = (int)PhysicalMap.KindOfArea.PLAYER;
         }
     }
 }
Пример #6
0
 public Explosion
 (
     Size size, Point location, int radius,
     PhysicalMap map, OnEndAllExplosionFunc funcEnd
 )
 {
     onEndAllExplosionFunc = funcEnd;
     explosionLocation     = location;
     this.size             = size;
     this.radius           = radius;
     InitExplosion(size, location, radius, map);
     ChangeState();
 }
 public bool isWallBlowedUp(PhysicalMap map)
 {
     for (int i = Y; i < Y + size.Height; i++)
     {
         for (int j = X; j < X + size.Width; j++)
         {
             if (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.EXPLOSION)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
Пример #8
0
 public Explosion
 (
     Image explosionTextureCenter, Image explosionTextureUpEdge,
     Image explosionTextureBottomEdge, Image explosionTextureLeftEdge,
     Image explosionTextureRightEdge, Image explosionTextureVerticalMiddle,
     Image explosionTextureHorizontalMiddle, Size size, Point location, int radius,
     PhysicalMap map, OnEndAllExplosionFunc funcEnd
 )
 {
     onEndAllExplosionFunc = funcEnd;
     explosionLocation     = location;
     this.size             = size;
     this.radius           = radius;
     InitExplosion(explosionTextureCenter, explosionTextureUpEdge, explosionTextureBottomEdge, explosionTextureLeftEdge,
                   explosionTextureRightEdge, explosionTextureVerticalMiddle, explosionTextureHorizontalMiddle,
                   size, location, radius, map);
     ChangeState();
 }
Пример #9
0
 public void ChangePhysicalMap(PhysicalMap map)
 {
     for (int i = 0; i < partsExplosionBottom.Count; i++)
     {
         partsExplosionBottom[i].ChangePhysicalMap(map);
     }
     for (int i = 0; i < partsExplosionUp.Count; i++)
     {
         partsExplosionUp[i].ChangePhysicalMap(map);
     }
     for (int i = 0; i < partsExplosionLeft.Count; i++)
     {
         partsExplosionLeft[i].ChangePhysicalMap(map);
     }
     for (int i = 0; i < partsExplosionRight.Count; i++)
     {
         partsExplosionRight[i].ChangePhysicalMap(map);
     }
     partExplosionCenter.ChangePhysicalMap(map);
 }
Пример #10
0
        private bool canWePlaceExplosion(int X, int Y, PhysicalMap map, ExplosionDirection direction)
        {
            bool result = false;

            lock (map.MapMatrix)
            {
                switch (direction)
                {
                case ExplosionDirection.UP:
                {
                    for (int j = X; j < X + size.Width; j++)
                    {
                        for (int k = Y; (k < Y + size.Height) && (k < map.Height); k++)
                        {
                            if (map.MapMatrix[k][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                int i = Y;
                                while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                                {
                                    i++;
                                }
                                newLocation.X = X;
                                newLocation.Y = i - 1;
                                return(true);
                            }
                        }
                    }
                }
                break;

                case ExplosionDirection.DOWN:
                {
                    for (int j = X; j < X + size.Width; j++)
                    {
                        for (int k = Y + size.Height; (k > Y) && (k > 0); k--)
                        {
                            if (map.MapMatrix[k][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                int i = Y + size.Height;
                                while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                                {
                                    i--;
                                }
                                newLocation.X = X;
                                newLocation.Y = i - size.Height + 2;
                                return(true);
                            }
                        }
                    }
                }
                break;

                case ExplosionDirection.LEFT:
                {
                    for (int i = Y; i < Y + size.Height; i++)
                    {
                        for (int k = X; (k < X + size.Width) && (k < map.Width); k++)
                        {
                            if (map.MapMatrix[i][k] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                int j = X;
                                while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                                {
                                    j++;
                                }
                                newLocation.X = j;
                                newLocation.Y = Y;
                                return(true);
                            }
                        }
                    }
                }
                break;

                case ExplosionDirection.RIGHT:
                {
                    for (int i = Y; i < Y + size.Height; i++)
                    {
                        for (int k = X + size.Width; (k > X) && (k > 0); k--)
                        {
                            if (map.MapMatrix[i][k] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                int j = X + size.Width;
                                while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                                {
                                    j--;
                                }
                                newLocation.X = j - size.Width + 2;
                                newLocation.Y = Y;
                                return(true);
                            }
                        }
                    }
                }
                break;
                }
                return(result);
            }
        }
Пример #11
0
        private void InitExplosion
        (
            Size size, Point location, int radius,
            PhysicalMap map
        )
        {
            const int countStates = 7;

            partsExplosionBottom = new List <PartExplosion>();
            partsExplosionLeft   = new List <PartExplosion>();
            partsExplosionRight  = new List <PartExplosion>();
            partsExplosionUp     = new List <PartExplosion>();
            countParts           = 0;
            for (int i = 0; i < radius; i++)
            {
                if ((location.X - size.Width * (i + 1)) > 0)
                {
                    if (!canWePlaceExplosion(location.X - size.Width * (i), location.Y, map, ExplosionDirection.LEFT))
                    {
                        if (i < radius - 1)
                        {
                            partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point((location.X - size.Width * (i + 1)), location.Y), countStates, onEndExplosionFunc));
                        }
                        else
                        {
                            partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureLeftEdge, size, new Point((location.X - size.Width * (i + 1)), location.Y), countStates, onEndExplosionFunc));
                        }
                        countParts++;
                    }
                    else
                    {
                        partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point(newLocation.X, newLocation.Y), countStates, onEndExplosionFunc));
                        break;
                    }
                }
                else
                {
                    if (i < radius - 1)
                    {
                        partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point(0, location.Y), countStates, onEndExplosionFunc));
                    }
                    else
                    {
                        partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureLeftEdge, size, new Point(0, location.Y), countStates, onEndExplosionFunc));
                    }
                    countParts++;
                    break;
                }
            }
            for (int i = 0; i < radius; i++)
            {
                if ((location.X + size.Width * (i + 1)) < map.Width)
                {
                    if (!canWePlaceExplosion(location.X + size.Width * (i), location.Y, map, ExplosionDirection.RIGHT))
                    {
                        if (i < radius - 1)
                        {
                            partsExplosionRight.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point((location.X + size.Width * (i + 1)), location.Y), countStates, onEndExplosionFunc));
                        }
                        else
                        {
                            partsExplosionRight.Add(new PartExplosion(KindExplosionTexture.explosionTextureRightEdge, size, new Point((location.X + size.Width * (i + 1)), location.Y), countStates, onEndExplosionFunc));
                        }
                        countParts++;
                    }
                    else
                    {
                        partsExplosionLeft.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point(newLocation.X, newLocation.Y), countStates, onEndExplosionFunc));
                        break;
                    }
                }
                else
                {
                    if (i < radius - 1)
                    {
                        partsExplosionRight.Add(new PartExplosion(KindExplosionTexture.explosionTextureHorizontalMiddle, size, new Point((map.Width - size.Width), location.Y), countStates, onEndExplosionFunc));
                    }
                    else
                    {
                        partsExplosionRight.Add(new PartExplosion(KindExplosionTexture.explosionTextureRightEdge, size, new Point(map.Width - size.Width, location.Y), countStates, onEndExplosionFunc));
                    }
                    countParts++;
                    break;
                }
            }
            for (int i = 0; i < radius; i++)
            {
                if ((location.Y - size.Height * (i + 1)) > 0)
                {
                    if (!canWePlaceExplosion(location.X, location.Y - size.Height * (i), map, ExplosionDirection.UP))
                    {
                        if (i < radius - 1)
                        {
                            partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(location.X, location.Y - size.Height * (i + 1)), countStates, onEndExplosionFunc));
                        }
                        else
                        {
                            partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureUpEdge, size, new Point(location.X, location.Y - size.Height * (i + 1)), countStates, onEndExplosionFunc));
                        }
                        countParts++;
                    }
                    else
                    {
                        partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(newLocation.X, newLocation.Y), countStates, onEndExplosionFunc));
                        break;
                    }
                }
                else
                {
                    if (i < radius - 1)
                    {
                        partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(location.X, 0), countStates, onEndExplosionFunc));
                    }
                    else
                    {
                        partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureUpEdge, size, new Point(location.X, 0), countStates, onEndExplosionFunc));
                    }
                    countParts++;
                    break;
                }
            }
            for (int i = 0; i < radius; i++)
            {
                if ((location.Y + size.Height * (i + 1)) < map.Height)
                {
                    if (!canWePlaceExplosion(location.X, location.Y + size.Height * (i), map, ExplosionDirection.DOWN))
                    {
                        if (i < radius - 1)
                        {
                            partsExplosionBottom.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(location.X, location.Y + size.Height * (i + 1)), countStates, onEndExplosionFunc));
                        }
                        else
                        {
                            partsExplosionBottom.Add(new PartExplosion(KindExplosionTexture.explosionTextureBottomEdge, size, new Point(location.X, location.Y + size.Height * (i + 1)), countStates, onEndExplosionFunc));
                        }
                        countParts++;
                    }
                    else
                    {
                        partsExplosionUp.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(newLocation.X, newLocation.Y), countStates, onEndExplosionFunc));
                        break;
                    }
                }
                else
                {
                    if (i < radius - 1)
                    {
                        partsExplosionBottom.Add(new PartExplosion(KindExplosionTexture.explosionTextureVerticalMiddle, size, new Point(location.X, map.Height - size.Height), countStates, onEndExplosionFunc));
                    }
                    else
                    {
                        partsExplosionBottom.Add(new PartExplosion(KindExplosionTexture.explosionTextureBottomEdge, size, new Point(location.X, map.Height - size.Height), countStates, onEndExplosionFunc));
                    }
                    countParts++;
                    break;
                }
            }

            partExplosionCenter = new PartExplosion(KindExplosionTexture.explosionTextureCenter, size, location, countStates, onEndExplosionFunc);
            countParts++;
        }
Пример #12
0
        public bool isObjectOnWay(PhysicalMap map)
        {
            lock (map.MapMatrix)
            {
                bool result = false;
                switch (direction)
                {
                case Direction.UP:
                {
                    for (int j = X; j < X + size.Width; j++)
                    {
                        if (map.MapMatrix[Y - 1][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                        {
                            int i = Y;
                            while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                i++;
                            }
                            newLocation.X = X;
                            newLocation.Y = i;
                            return(true);
                        }
                    }
                }
                break;

                case Direction.DOWN:
                {
                    for (int j = X; j < X + size.Width; j++)
                    {
                        if (map.MapMatrix[Y + size.Height][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                        {
                            int i = Y + size.Height;
                            while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                i--;
                            }
                            newLocation.X = X;
                            newLocation.Y = i - size.Height + 1;
                            return(true);
                        }
                    }
                }
                break;

                case Direction.LEFT:
                {
                    for (int i = Y; i < Y + size.Height; i++)
                    {
                        if (map.MapMatrix[i][X - 1] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                        {
                            int j = X;
                            while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                j++;
                            }
                            newLocation.X = j;
                            newLocation.Y = Y;
                            return(true);
                        }
                    }
                }
                break;

                case Direction.RIGHT:
                {
                    for (int i = Y; i < Y + size.Height; i++)
                    {
                        if (map.MapMatrix[i][X + size.Width] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                        {
                            int j = X + size.Width;
                            while (map.MapMatrix[i][j] == (int)PhysicalMap.KindOfArea.PHYSICACOBJECT)
                            {
                                j--;
                            }
                            newLocation.X = j - size.Width + 1;
                            newLocation.Y = Y;
                            return(true);
                        }
                    }
                }
                break;
                }
                return(result);
            }
        }
Пример #13
0
        public void OnMove(PhysicalMap map)
        {
            if (!isDying)
            {
                if (isMoved)
                {
                    switch (direction)
                    {
                    case Player.Direction.UP:
                    {
                        if (Y - step > 0)
                        {
                            if (!isObjectOnWay(map))
                            {
                                Y -= step;
                                if (currAnimState == AnimState.TURNUP)
                                {
                                    currAnimState = AnimState.TURNUP1;
                                }
                                else
                                {
                                    if (currAnimState == AnimState.TURNUP1)
                                    {
                                        currAnimState = AnimState.TURNUP2;
                                    }
                                    else
                                    {
                                        currAnimState = AnimState.TURNUP1;
                                    }
                                }
                            }
                            else
                            {
                                X = newLocation.X;
                                Y = newLocation.Y;
                            }
                        }
                        else
                        {
                            Y = 0;
                        }
                    }
                    break;

                    case Player.Direction.DOWN:
                    {
                        if ((map.Height > (Y + size.Height + step)))
                        {
                            if (!isObjectOnWay(map))
                            {
                                Y += step;
                                if (currAnimState == AnimState.TURNDOWN)
                                {
                                    currAnimState = AnimState.TURNDOWN1;
                                }
                                else
                                {
                                    if (currAnimState == AnimState.TURNDOWN1)
                                    {
                                        currAnimState = AnimState.TURNDOWN2;
                                    }
                                    else
                                    {
                                        currAnimState = AnimState.TURNDOWN1;
                                    }
                                }
                            }
                            else
                            {
                                X = newLocation.X;
                                Y = newLocation.Y;
                            }
                        }
                        else
                        {
                            Y = map.Height - size.Height;
                        }
                    }
                    break;

                    case Player.Direction.LEFT:
                    {
                        if (X - step > 0)
                        {
                            if (!isObjectOnWay(map))
                            {
                                X -= step;
                                if (currAnimState == AnimState.TURNLEFT)
                                {
                                    currAnimState = AnimState.TURNLEFT1;
                                }
                                else
                                {
                                    if (currAnimState == AnimState.TURNLEFT1)
                                    {
                                        currAnimState = AnimState.TURNLEFT2;
                                    }
                                    else
                                    {
                                        currAnimState = AnimState.TURNLEFT1;
                                    }
                                }
                            }
                            else
                            {
                                X = newLocation.X;
                                Y = newLocation.Y;
                            }
                        }
                        else
                        {
                            X = 0;
                        }
                    }
                    break;

                    case Player.Direction.RIGHT:
                    {
                        if ((map.Width > (X + size.Width + step)))
                        {
                            if (!isObjectOnWay(map))
                            {
                                X += step;
                                if (currAnimState == AnimState.TURNRIGHT)
                                {
                                    currAnimState = AnimState.TURNRIGHT1;
                                }
                                else
                                {
                                    if (currAnimState == AnimState.TURNRIGHT1)
                                    {
                                        currAnimState = AnimState.TURNRIGHT2;
                                    }
                                    else
                                    {
                                        currAnimState = AnimState.TURNRIGHT1;
                                    }
                                }
                            }
                            else
                            {
                                X = newLocation.X;
                                Y = newLocation.Y;
                            }
                        }
                        else
                        {
                            X = map.Width - size.Width;
                        }
                    }
                    break;
                    }
                }
                else
                {
                    switch (direction)
                    {
                    case Direction.UP:
                    {
                        currAnimState = AnimState.TURNUP;
                    }
                    break;

                    case Direction.DOWN:
                    {
                        currAnimState = AnimState.TURNDOWN;
                    }
                    break;

                    case Direction.LEFT:
                    {
                        currAnimState = AnimState.TURNLEFT;
                    }
                    break;

                    case Direction.RIGHT:
                    {
                        currAnimState = AnimState.TURNRIGHT;
                    }
                    break;
                    }
                }
            }
        }