예제 #1
0
 public CollisionData(MatrixCoords CollisionForceDirection, 
     string objectCollisionGroupString)
 {
     this.CollisionForceDirection = CollisionForceDirection;
     this.hitObjectsCollisionGroupStrings = new List<string>();
     this.hitObjectsCollisionGroupStrings.Add(objectCollisionGroupString);
 }
예제 #2
0
        public GameObject(MatrixCoords topLeft, char[,] body)
        {
            this.TopLeft = topLeft;

            int imageRows = body.GetLength(0);
            int imageCols = body.GetLength(1);

            this.body = this.CopyBodyMatrix(body);

            this.IsDestroyed = false;
        }
예제 #3
0
        public CollisionData(MatrixCoords collisionForceDirection, List<string> hitObjectsCollisionGroupStrings)
        {
            this.CollisionForceDirection = collisionForceDirection;

            this.hitObjectsCollisionGroupStrings = new List<string>();

            foreach (var str in hitObjectsCollisionGroupStrings)
            {
                this.hitObjectsCollisionGroupStrings.Add(str);
            }
        }
예제 #4
0
        public void DoNotEating()
        {
            foreach (var uneatable in DoNotEatingList)
            {
                if (uneatable.TopLeft.Row == this.topLeft.Row
                    && uneatable.TopLeft.Col == this.topLeft.Col)
                {
                    this.Speed = new MatrixCoords(0, 0);
                    SnakeHead.playing = false;

                }
            }
        }
 public IndestructableWall(MatrixCoords topLeft)
     : base(topLeft, new char[,] { { '#' } })
 {
     Console.ForegroundColor = ConsoleColor.Green;
 }
예제 #6
0
 public SnakeHead(MatrixCoords topLeft, MatrixCoords speed, int tailLength)
     : base(topLeft,new char[,]{{'O'}}, speed)
 {
     this.Speed = new MatrixCoords(speed.Row, speed.Col);
     this.tailLength = tailLength;
 }
예제 #7
0
 public FoodForSnake(MatrixCoords topLeft)
     : base(topLeft, new char[,] { { '@' } })
 {
     //Console.ForegroundColor = ConsoleColor.Yellow;
 }
예제 #8
0
 public MovingObject(MatrixCoords topLeft, char[,] body, MatrixCoords speed)
     : base(topLeft, body)
 {
     this.Speed = speed;
 }
        private static void HandleMovingWithStaticCollisions(List<MovingObject> movingObjects,
            List<GameObject> staticObjects)
        {
            foreach (var movingObject in movingObjects)
            {
                int verticalIndex = VerticalCollisionIndex(movingObject, staticObjects);
                int horizontalIndex = HorizontalCollisionIndex(movingObject, staticObjects);

                MatrixCoords movingCollisionForceDirection = new MatrixCoords(0, 0);

                if (verticalIndex != -1)
                {
                    movingCollisionForceDirection.Row = -movingObject.Speed.Row;
                    staticObjects[verticalIndex].RespondToCollision(
                        new CollisionData(new MatrixCoords(movingObject.Speed.Row, 0),
                            movingObject.GetCollisionGroupString())
                            );
                }

                if (horizontalIndex != -1)
                {
                    movingCollisionForceDirection.Col = -movingObject.Speed.Col;
                    staticObjects[horizontalIndex].RespondToCollision(
                        new CollisionData(new MatrixCoords(0, movingObject.Speed.Col),
                            movingObject.GetCollisionGroupString())
                            );
                }

                int diagonalIndex = -1;
                if (horizontalIndex == -1 && verticalIndex == -1)
                {
                    diagonalIndex = DiagonalCollisionIndex(movingObject, staticObjects);
                    if (diagonalIndex != -1)
                    {
                        movingCollisionForceDirection.Row = -movingObject.Speed.Row;
                        movingCollisionForceDirection.Col = -movingObject.Speed.Col;

                        staticObjects[diagonalIndex].RespondToCollision(
                            new CollisionData(new MatrixCoords(movingObject.Speed.Row,0),
                                movingObject.GetCollisionGroupString())
                            );
                    }

                    List<string> hitByMovingCollisionGroups = new List<string>();

                    if (verticalIndex != -1)
                    {
                        hitByMovingCollisionGroups.Add(staticObjects[verticalIndex].GetCollisionGroupString());
                    }

                    if(horizontalIndex != -1)
                    {
                        hitByMovingCollisionGroups.Add(staticObjects[horizontalIndex].GetCollisionGroupString());
                    }

                    if(diagonalIndex != -1)
                    {
                        hitByMovingCollisionGroups.Add(staticObjects[diagonalIndex].GetCollisionGroupString());
                    }
                    if (verticalIndex != -1 || horizontalIndex != -1 || diagonalIndex != -1)
                    {
                        movingObject.RespondToCollision(
                            new CollisionData(movingCollisionForceDirection,
                                hitByMovingCollisionGroups)
                                );
                    }
                }
            }
        }
예제 #10
0
 public TrailObject(MatrixCoords topLeft, char[,] body, int lifeTime)
     : base(topLeft, new char[,] { { '+' } })
 {
     this.lifeTime = lifeTime;
 }
예제 #11
0
 public Score(MatrixCoords topLeft, char[,] body)
     : base(topLeft, body)
 {
 }