/// <summary> /// Recursively looks for an optimal place to spawn an NPC car where it won't collide with any other NPCs /// </summary> /// <param name="pcCar"></param> /// <param name="list"></param> /// <param name="car">The car we intend to spawn</param> /// <param name="laneNum">the lane on the freeway the car belongs to</param> /// <param name="rand">a random number generator we pass by reference</param> /// <param name="attemptCount">the number of attempts it has taken us to spawn this car</param> public void OptimizeSpawnPosition(PcCar pcCar, IList<Car> list, Car car, int laneNum, ref Random rand, ref int attemptCount) { Car collisionCar; if ((CheckNpcHardCollision(list, car.SoftCollisionBoundary, out collisionCar) || pcCar.SoftCollisionBoundary.Intersects(car.HardCollisionBoundary) ) && attemptCount <= MaxSpawnAttempts) { /* All of this code needs to execute whenever an NPC car has: * 1. Spawned on top of another NPC * 2. Spawned on top of the PC * 3. And the maxmimum number of spawn attempts has not been reached. */ attemptCount++; InitializeNpcCar(car, laneNum, ref rand); OptimizeSpawnPosition(pcCar, list, car, laneNum, ref rand, ref attemptCount); } }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. _spriteBatch = new SpriteBatch(GraphicsDevice); _backGroundTexture = Content.Load<Texture2D>("Content\\Images\\road"); _whitecarTexture = Content.Load<Texture2D>("Content\\Images\\whitecar"); _redcarTexture = Content.Load<Texture2D>("Content\\Images\\redcar"); _bluecarTexture = Content.Load<Texture2D>("Content\\Images\\bluecar"); World.Explosions = new List<Texture2D> { Content.Load<Texture2D>("Content\\Images\\explosion_1"), Content.Load<Texture2D>("Content\\Images\\explosion_2"), Content.Load<Texture2D>("Content\\Images\\explosion_3"), Content.Load<Texture2D>("Content\\Images\\explosion_4") }; _explosionSoundEffect = Content.Load<SoundEffect>("Content\\Audio\\Explosion"); _font = Content.Load<SpriteFont>("Content\\Fonts\\GameText"); _background.LoadContent(GraphicsDevice, _backGroundTexture); _world = new World(new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height)); _scoreBoard = new ScoreBoard("Your Score: ", ref _world.Bounds, _font); _pc = new PcCar(_redcarTexture); _world.InitializePcCar(_pc); _pc.LoadNpcCars(_world, Cars, 17, new Texture2D[] { _whitecarTexture, _bluecarTexture }); TouchPanel.EnabledGestures = GestureType.FreeDrag; }
public void CheckNpcSoftCollision(IList<Car> cars, PcCar pc) { }