public bool IsCollision(Rectangle rect, PacmanGameObject.direction direction, GameObject.GameObjectType gameObjectTyp) { switch (gameObjectTyp) { case GameObject.GameObjectType.WALLS: return IsPacmanMakeCollisionWithWalls(rect, direction); case GameObject.GameObjectType.DOTS: return IsPacmanMakeCollisionWithDots(rect, direction); case GameObject.GameObjectType.PILLS: return IsPacmanMakeCollisionWithPills(rect, direction); case GameObject.GameObjectType.GHOSTS: goto case GameObject.GameObjectType.MONSTERS; case GameObject.GameObjectType.MONSTERS: return IsPacmanMakeCollisionWithMonsters(rect, direction); } return false; }
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; }
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(); } }
private bool IsPacmanMakeCollisionWithWalls(Rectangle pacmanRect, PacmanGameObject.direction direction) { /*Rectangle pacmanRect = new Rectangle((int)(pacman.ScreenPosition.X + move.X), (int)(pacman.ScreenPosition.Y + move.Y), GameObject.OBJECT_SIZE, GameObject.OBJECT_SIZE); */ switch (direction) { #region with horizontal walls case PacmanGameObject.direction.Down: goto case PacmanGameObject.direction.Up; case PacmanGameObject.direction.Up: foreach(GameObject wall in walls) { if(wall is HorizontalWallGameObject) { HorizontalWallGameObject horizontalWall = (HorizontalWallGameObject)wall; Rectangle wallRect = new Rectangle((int)horizontalWall.Start.GetScreenPosition().X, (int)horizontalWall.Start.GetScreenPosition().Y, GameObject.OBJECT_SIZE*horizontalWall.Length() , 0); if (pacmanRect.Intersects(wallRect)) return true; } } return false; #endregion #region with vertical walls case PacmanGameObject.direction.Left: goto case PacmanGameObject.direction.Right; case PacmanGameObject.direction.Right: foreach (GameObject wall in walls) { if (wall is VerticalWallGameObject) { VerticalWallGameObject verticallWall = (VerticalWallGameObject)wall; Rectangle wallRect = new Rectangle((int)verticallWall.Start.GetScreenPosition().X, (int)verticallWall.Start.GetScreenPosition().Y, 0, GameObject.OBJECT_SIZE * verticallWall.Length()); if (pacmanRect.Intersects(wallRect)) return true; } } return false; #endregion } return false; }
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(); } } }