Пример #1
0
        public MonsterGameObject(MonsterGameObjectColor color)
        {
            monsterColor = color;
            //TODO: remove magic numbers
            screenVectorPosition = (new GameCoordinates(random.Next(24), random.Next(18))).GetScreenPosition();

            startLastMovePosition = GameVectorPosition;
            Ghost = false;
        }
Пример #2
0
        public MonsterGameObject(int x, int y, MonsterGameObjectColor color)
        {
            monsterColor = color;
            //TODO: remove magic numbers
            screenVectorPosition = (new GameCoordinates(x, y)).GetScreenPosition();

            startLastMovePosition = GameVectorPosition;
            Ghost = false;
        }
Пример #3
0
        private bool IsPacmanMakeCollisionWithDots(Rectangle pacmanRect, PacmanGameObject.direction direction)
        {
            if (DotGameObject.VisibleDotCounter > 0)
            {
                GameCoordinates pacEnvironmet = GameCoordinates.ScreenPositionToGameCoortinates(new Vector2(pacmanRect.X, pacmanRect.Y));

                List <DotGameObject> dotsToCheck = new List <DotGameObject>();

                dotsToCheck.Add(DotGameObject.array[pacEnvironmet.X, pacEnvironmet.Y]);

                if (pacEnvironmet.X < 24 - 1 /*BoardSize*/)
                {
                    dotsToCheck.Add(DotGameObject.array[pacEnvironmet.X + 1, pacEnvironmet.Y]);
                }

                if (pacEnvironmet.Y < 18 - 1)
                {
                    dotsToCheck.Add(DotGameObject.array[pacEnvironmet.X, pacEnvironmet.Y + 1]);
                }

                if (pacEnvironmet.X < 24 - 1 /*BoardSize*/ && pacEnvironmet.Y < 18 - 1)
                {
                    dotsToCheck.Add(DotGameObject.array[pacEnvironmet.X + 1, pacEnvironmet.Y + 1]);
                }

                int radius = 3;

                Rectangle pacmanMiniRect = new Rectangle(pacmanRect.X + (GameObject.OBJECT_SIZE / 2) - radius,
                                                         pacmanRect.Y + (GameObject.OBJECT_SIZE / 2) - radius,
                                                         2 * radius,
                                                         2 * radius);

                foreach (DotGameObject dot in dotsToCheck)
                {
                    if (pacmanMiniRect.Intersects(dot.ScreenRectangle))
                    {
                        dot.Clear();
                        return(true);
                    }
                }
            }
            return(false);
        }
Пример #4
0
        private void DrawEnd(GameCoordinates gameCoordinates)
        {
            Vector2 position = gameCoordinates.GetScreenPosition();

            Color color = new Color(255, 255, 255, 255);

            //topRight
            GameObject.SpriteBatch.Draw(sprite,
                new Rectangle((int)(position.X),
                              (int)(position.Y - LINE_TICKNESS * SCALE),
                              LINE_TICKNESS * SCALE,
                              LINE_TICKNESS * SCALE),
                topRight,
                color);

            //bottomRight
            GameObject.SpriteBatch.Draw(sprite,
                new Rectangle((int)(position.X),
                              (int)(position.Y),
                              LINE_TICKNESS * SCALE,
                              LINE_TICKNESS * SCALE),
                bottomRight,
                color);
        }
Пример #5
0
        public override bool makeMove()
        {
            bool stillThisSameGamePosition = (startLastMovePosition.X == GameVectorPosition.X && startLastMovePosition.Y == GameVectorPosition.Y);
            bool wantsChangeDirection = nextMove != movementDirection;
            direction lastMoveBackUp = nextMove;

            //System.Console.WriteLine("wantsChangeDirection: " + wantsChangeDirection.ToString() +
            //                       "\nstillThisSameGamePosition: " + stillThisSameGamePosition.ToString());

            if (wantsChangeDirection//we want to take a turn
                && (stillThisSameGamePosition && moved))
            {
                nextMove = movementDirection;
            }
            //else
              //  System.Console.WriteLine("turn from " + lastMoveBackUp.ToString() + " to " +lastMove.ToString());

            Vector2 move = CalculateMove(nextMove, updateDelta, STEP);
            moved = false;

            //calculate how far coordinate is from Path and compere it with Torerance
            int moduloY = ((int)(screenVectorPosition.Y + move.Y)) % GameObject.OBJECT_SIZE;
            bool onHorizontalPath = GameObject.OBJECT_SIZE / 2 - Math.Abs(moduloY - GameObject.OBJECT_SIZE / 2) <= TOLERANCE;

            int moduloX = ((int)(screenVectorPosition.X + move.X)) % GameObject.OBJECT_SIZE;
            bool onVerticalPath = GameObject.OBJECT_SIZE / 2 - Math.Abs(moduloX - GameObject.OBJECT_SIZE / 2) <= TOLERANCE;

            //changing move direction
            if (((onVerticalPath && !WasOnVerticalPath()) || onHorizontalPath && !WasOnHorizontalPath()) &&
                !CollisionManager.getInstance().IsCollision(roundRectangleToPath(this.ScreenRectanglePosition, move, nextMove, onHorizontalPath, onVerticalPath), nextMove, GameObjectType.WALLS))
            {
                this.screenVectorPosition += new Vector2((int)move.X, (int)move.Y);
                this.ScreenRectanglePosition = roundRectangleToPath(this.ScreenRectanglePosition, move, movementDirection, onHorizontalPath, onVerticalPath);

                if(movementDirection != nextMove)
                    startLastMovePosition = GameVectorPosition;

                movementDirection = nextMove;

                moved = true;

            }
            else if (!CollisionManager.getInstance().IsCollision(roundRectangleToPath(this.ScreenRectanglePosition,
                move = CalculateMove(movementDirection, updateDelta, STEP),
                movementDirection, onHorizontalPath, onVerticalPath), movementDirection, GameObjectType.WALLS))
            {

                this.screenVectorPosition += new Vector2((int)move.X, (int)move.Y);
                this.ScreenRectanglePosition = roundRectangleToPath(this.ScreenRectanglePosition, move, movementDirection, onHorizontalPath, onVerticalPath);
                moved = true;
            }

            if (!moved)
            {
                if (nextMoveAlternativeNumber < 3)
                {
                    nextMove = nextMoveAlternative[nextMoveAlternativeNumber];
                    nextMoveAlternativeNumber++;
                    makeMove();
                }
            }
            else
            {
                if(nextMoveAlternativeNumber!=0)
                System.Console.WriteLine("Move number" + nextMoveAlternativeNumber.ToString());

                nextMoveAlternativeNumber = 0;
            }

            return moved;
        }
Пример #6
0
        public override void HandleInput(KeyboardState keyboardState)
        {
            if (dead)
            {

            }
            if (true)
            {
                List<GameCoordinates> pacmansPositions = PacmanGameObject.PacmansPositions;

                float min = float.MaxValue;

                if (ghost)
                {
                    if (!fakePacmanPositionSet)
                    {
                        gameCoordinatesOfNearestPacman = new GameCoordinates(random.Next(23), random.Next(17));
                        fakePacmanPositionSet = true;
                    }
                }
                else
                {
                    gameCoordinatesOfNearestPacman = pacmansPositions[0];
                    foreach (GameCoordinates gc in pacmansPositions)
                    {
                        float tmp = Vector2.Distance(new Vector2(gc.X, gc.Y), new Vector2(GameVectorPosition.X, GameVectorPosition.Y));
                        if (tmp < min)
                        {
                            min = tmp;
                            gameCoordinatesOfNearestPacman = gc;
                        }
                    }
                }
                bool equal = Math.Abs(gameCoordinatesOfNearestPacman.X - GameVectorPosition.X) ==
                    Math.Abs(gameCoordinatesOfNearestPacman.Y - GameVectorPosition.Y);

                if ((equal && random.Next(2) == 0) ||
                    (Math.Abs(gameCoordinatesOfNearestPacman.X - GameVectorPosition.X) >
                     Math.Abs(gameCoordinatesOfNearestPacman.Y - GameVectorPosition.Y)))
                {//closer by X

                    nextMove = (gameCoordinatesOfNearestPacman.X > GameVectorPosition.X) ? direction.Right : direction.Left;
                    nextMoveAlternative[0] = (gameCoordinatesOfNearestPacman.Y > GameVectorPosition.Y) ? direction.Down : direction.Up;
                    nextMoveAlternative[1] = (gameCoordinatesOfNearestPacman.X > GameVectorPosition.X) ? direction.Left : direction.Right;
                    nextMoveAlternative[2] = (gameCoordinatesOfNearestPacman.Y > GameVectorPosition.Y) ? direction.Up : direction.Down;
                }
                else
                {
                    nextMove = (gameCoordinatesOfNearestPacman.Y > GameVectorPosition.Y) ? direction.Down : direction.Up;
                    nextMoveAlternative[0] = (gameCoordinatesOfNearestPacman.X > GameVectorPosition.X) ? direction.Right : direction.Left;
                    nextMoveAlternative[1] = (gameCoordinatesOfNearestPacman.Y > GameVectorPosition.Y) ? direction.Up : direction.Down;
                    nextMoveAlternative[2] = (gameCoordinatesOfNearestPacman.X > GameVectorPosition.X) ? direction.Left : direction.Right;
                }
            }
            else
            {
                // Otherwise move the player position.
                Vector2 movement = Vector2.Zero;

                if (keyboardState.IsKeyDown(Keys.Left))
                {
                    movement.X--;
                    nextMove = direction.Left;

                }

                if (keyboardState.IsKeyDown(Keys.Right))
                {
                    movement.X++;
                    nextMove = direction.Right;
                }

                if (keyboardState.IsKeyDown(Keys.Up))
                {
                    movement.Y--;
                    nextMove = direction.Up;
                }

                if (keyboardState.IsKeyDown(Keys.Down))
                {
                    movement.Y++;
                    nextMove = direction.Down;
                }

                if (movement.Length() > 1)
                    movement.Normalize();
            }
        }
Пример #7
0
        public void LoadContent()
        {
            if (mode == Mode.Demo)
            {
                pacmans.Add(new PacmanGameObject(-1, 0));

                monsters.Add(new MonsterGameObject(-3, 0, MonsterGameObject.MonsterGameObjectColor.Blue));
                monsters.Add(new MonsterGameObject(-4, 0, MonsterGameObject.MonsterGameObjectColor.Pink));
                monsters.Add(new MonsterGameObject(-5, 0, MonsterGameObject.MonsterGameObjectColor.Green));
                monsters.Add(new MonsterGameObject(-6, 0, MonsterGameObject.MonsterGameObjectColor.Red));

                listOfAllGameObjects.Add(pacmans);
                listOfAllGameObjects.Add(monsters);

            }
            else if (mode == Mode.Normal)
            {

                monsters.Add(new MonsterGameObject(MonsterGameObject.MonsterGameObjectColor.Blue));
                monsters.Add(new MonsterGameObject(MonsterGameObject.MonsterGameObjectColor.Green));
                monsters.Add(new MonsterGameObject(MonsterGameObject.MonsterGameObjectColor.Pink));
                monsters.Add(new MonsterGameObject(MonsterGameObject.MonsterGameObjectColor.Red));

                Viewport viewport = ScreenManager.GraphicsDevice.Viewport;

                GameCoordinates topLeftArena = new GameCoordinates(0, 0);
                GameCoordinates bottomRightArena = new GameCoordinates();

                //TODO:remove magic number
                bottomRightArena.X = viewport.Width / 24 - 2;
                bottomRightArena.Y = viewport.Height / 24 - 2;

                walls = board.Walls;

                //borders
                if (
                    //false
                    true
                    )
                {
                    walls.Add(new HorizontalWallGameObject(topLeftArena.Y, topLeftArena.X, bottomRightArena.X));
                    walls.Add(new HorizontalWallGameObject(bottomRightArena.Y, topLeftArena.X, bottomRightArena.X));

                    walls.Add(new VerticalWallGameObject(topLeftArena.X, topLeftArena.Y, bottomRightArena.Y));
                    walls.Add(new VerticalWallGameObject(bottomRightArena.X, topLeftArena.Y, bottomRightArena.Y));
                }

                dots = DotGameObject.Generate(bottomRightArena.X, bottomRightArena.Y);

                listOfAllGameObjects.Add(dots);

                pills = MagicPillGameObject.Generate();

                listOfAllGameObjects.Add(pills);
                listOfAllGameObjects.Add(walls);
                listOfAllGameObjects.Add(portals);
                listOfAllGameObjects.Add(fruits);

                pacman = new PacmanGameObject();
                pacmans.Add(pacman);
                listOfAllGameObjects.Add(pacmans);
                listOfAllGameObjects.Add(monsters);

                List<GameObject> other = new List<GameObject>();
                other.Add(toolBarGameObject = new ToolBarGameObject());
                listOfAllGameObjects.Add(other);

                /*
                List<GameObject> monsterHouses = new List<GameObject>();
                monsterHouses.Add(monsterHouse);
                listOfAllGameObjects.Add(monsterHouses);
                */

            }

            collisionManager = CollisionManager.getInstance();
            collisionManager.Initialize(walls, portals, monsterHouses,
                                        dots, pills, fruits,
                                        pacmans, monsters);

            GameObject.LoadStaticContent();

            foreach (List<GameObject> list in listOfAllGameObjects)
                foreach (GameObject gameObject in list)
                {
                    gameObject.LoadContent();
                }
        }
Пример #8
0
 public HorizontalWallGameObject(int y, int startX, int endX)
 {
     Start = new GameCoordinates(startX, y);
     End = new GameCoordinates(endX, y);
 }
Пример #9
0
        private void DrawLine(GameCoordinates gameCoordinates)
        {
            Vector2 position = gameCoordinates.GetScreenPosition();

            Color color = new Color(255, 255, 255, 255);

            GameObject.SpriteBatch.Draw(sprite,
                new Rectangle((int)(position.X-(LINE_TICKNESS*SCALE)), (int)position.Y, LINE_TICKNESS*SCALE, OBJECT_SIZE*SCALE),
                leftSide,
                color);

            GameObject.SpriteBatch.Draw(sprite,
                new Rectangle((int)(position.X),(int)position.Y, LINE_TICKNESS*SCALE, OBJECT_SIZE*SCALE),
                rightSide,
                color);
        }
Пример #10
0
 public VerticalWallGameObject(int x, int startY, int endY)
 {
     Start = new GameCoordinates(x, startY);
     End = new GameCoordinates(x, endY);
 }