Exemplo n.º 1
0
        private void CheckCollision()
        {
            _speler.Land             = false;
            _speler.BounceHorizontal = false;
            _collisionEndDoor        = false;

            if (_speler.RectangleCollision.Intersects(_endDoor.RectangleCollision))
            {
                _collisionEndDoor = true;
            }

            #region CollisionTiles
            foreach (GameObject g in tileObjecten)
            {
                if (g.Damage)
                {
                    if (_speler.RectangleCollision.Intersects(g.RectangleCollision))
                    {
                        _speler.Hit = true;
                    }
                }

                else if (!(g is Collisionbox))
                {
                    //Botsen met hoofd
                    if (_speler.RectangleCollisionHead.Intersects(g.RectangleCollision) && !_speler.Land)
                    {
                        _speler.BounceVertical = true; //Speler is tegen een tile gebotst!
                        _speler.UpdateCollisionRectangles();
                    }

                    //Horizontale collision --> Botsen tegen tile
                    else if (_speler.RectangleCollision.Intersects(g.RectangleCollision))
                    {
                        if (_speler.LocationX < g.RectangleCollision.X)
                        {
                            _speler.BounceHorizontalRichting = MoveGameObject.Richting.Rechts;
                            //_speler.LocationX = g.RectangleCollision.X - _speler.RectangleCollision.Width;        //Optie om speler niet in blok te laten gaan, lost bug op van landen in tile.
                        }

                        else
                        {
                            _speler.BounceHorizontalRichting = MoveGameObject.Richting.Links;
                            //_speler.LocationX = g.RectangleCollision.X + g.RectangleCollision.Width - 20;
                        }

                        _speler.BounceHorizontal = true;
                        _speler.UpdateCollisionRectangles();
                    }

                    //Verticale collsion --> Landen
                    if (_speler.RectangleCollisionFeet.Intersects(g.RectangleCollision))
                    {
                        _speler.Land      = true;
                        _speler.LocationY = g.LocationY;
                        _speler.UpdateCollisionRectangles();
                    }
                }

                #region Collision met kogels

                foreach (Bullet f in _bulletList)
                {
                    if (!(g is Collisionbox) && f.RectangleCollision.Intersects(g.RectangleCollision))
                    //Kogels moeten niet collisionen met collisionboxen (TODO: ZOEK BETERE IMPLEMENTATIE)
                    {
                        f.Explode = true;
                    }

                    if (!(f is BulletPlayer) && f.RectangleCollision.Intersects(_speler.RectangleCollision))
                    //Geen friendly fire t.o.v. je eigen, anders kun je je zelf raken
                    {
                        _speler.Hit = true;
                        f.Explode   = true;
                    }


                    #endregion
                }

                #region Collision met Enemies!
                foreach (Enemy e in _enemyList)
                {
                    if (e.RectangleCollision.Intersects(g.RectangleCollision))
                    {
                        e.Direction *= -1;

                        if (e.BewegingsRichting == Enemy.Beweging.Horizontaal)
                        {
                            if (e.LocationX < g.RectangleCollision.X)
                            {
                                //Zorgt ervoor dat Enemy niet in de tile terecht komt!
                                e.LocationX = g.RectangleCollision.X - e.RectangleCollision.Width;
                            }
                            else
                            {
                                e.LocationX = g.RectangleCollision.X + g.RectangleCollision.Width;
                            }
                        }

                        e.UpdateCollisionRectangles();      //Update collision rectangle zodanig dat deze klopt! (Indien niet gaat de collision rectangle voor een stuk de tile in en kan dit incorrect collision maken met de speler)
                    }

                    #endregion
                }
            }
            #endregion

            #region Collision between PLAYER/ENEMY & ENEMY/BULLET
            foreach (Enemy e in _enemyList)
            {
                if (_speler.RectangleCollision.Intersects(e.RectangleCollision) && _speler.Hit == false)
                {
                    _speler.Hit = true;
                }

                foreach (Bullet t in _bulletList)
                {
                    //Er is geen friendly fire, enemies kunnen geen enemies neerschieten! Enkel speler kogels kunnen enemies doodden!
                    if (t is BulletPlayer)
                    {
                        if (t.RectangleCollision.Intersects(e.RectangleCollision))
                        {
                            t.Remove = true;
                            if (!(e is Mine))
                            {
                                _speler.ScoreInt += 100;
                                e.Die             = true;
                            }
                        }
                    }
                }
            }


            #endregion

            foreach (RemoveGameObject r in _bonusObjecten)
            {
                if (_speler.RectangleCollision.Intersects(r.RectangleCollision))
                {
                    _speler.ScoreInt += 200;
                    r.Remove          = true;

                    if (r is Cola)
                    {
                        _speler.AddLive();
                    }

                    else if (_endList.Count > 0)        //Vanaf deze waarde nul is moet er niet meer gekeken worden alle sleutes zijn opgeraakt!
                    {
                        if (r is KeyBlue)
                        {
                            _keyList.Add(Sleutels.Blue);
                        }
                        else if (r is KeyRed)
                        {
                            _keyList.Add(Sleutels.Red);
                        }
                    }
                }
            }

            #region RemovingItems
            //Remove items if they are dead/unnecessary
            for (int x = _enemyList.Count - 1; x >= 0; x--)
            {
                if (_enemyList[x].Remove)
                {
                    _enemyList.RemoveAt(x);
                }
            }

            for (int i = _bulletList.Count - 1; i >= 0; i--)
            {
                if (_bulletList[i].LocationX <0 || _bulletList[i].LocationX> LevelWidth || _bulletList[i].LocationY > LevelHeight)
                {
                    _bulletList.RemoveAt(i);
                }
                else if (_bulletList[i].Remove)
                {
                    _bulletList.RemoveAt(i);
                }
            }

            for (int x = _bonusObjecten.Count - 1; x >= 0; x--)
            {
                if (_bonusObjecten[x].Remove)
                {
                    _bonusObjecten.RemoveAt(x);
                }
            }

            //Verwijderen van sleutes uit de endList!
            //Deze lijst bevat welke sleutels je nodig hebt om door te kunnen naar het volgende level!
            //Als deze lijst een Count heeft van nul kun je naar het volgende level!!!
            for (int x = _endList.Count - 1; x >= 0; x--)
            {
                if (_keyList.Contains(_endList[x]))
                {
                    _endList.RemoveAt(x);
                }
            }

            #endregion
        }
Exemplo n.º 2
0
        public override GameLoop Update(GameTime g)
        {
            Screen.Update(_textureActive.Width / 2, _textureActive.Height / 2);     //Center the screen!

            _ticks += g.ElapsedGameTime.Milliseconds;

            if (_anim == true)
            {
                if (_ticks > 2000)
                {
                    _textureActive = _picAnimatie[1];
                }
                if (_ticks > 4000)
                {
                    _textureActive = _picAnimatie[2];
                    _anim          = false;
                }
            }

            #region UpdateTexture
            if (_enter && _textureActive == _picAnimatie[2])
            {
                _textureActive = _picAnimatie[3];
                _enter         = false;
            }

            else if (_enter && _textureActive == _picAnimatie[5])
            {
                _textureActive = _picAnimatie[6];
                _enter         = false;
            }

            else if (_enter && _textureActive == _picAnimatie[6])
            {
                _enter = false;
                return(new Level1(new Speler()));
            }

            else if (_esc)
            {
                if (_textureActive == _picAnimatie[3])
                {
                    _textureActive = _picAnimatie[2];
                }
                else if (_textureActive == _picAnimatie[4])
                {
                    _textureActive = _picAnimatie[3];
                }

                _esc = false;
            }

            else if (_i && _textureActive == _picAnimatie[3])
            {
                _textureActive = _picAnimatie[4];
                _i             = false;
            }

            else if (_s && _textureActive == _picAnimatie[3])
            {
                _s             = false;
                _textureActive = _picAnimatie[5];
            }
            else if (_l && _textureActive == _picAnimatie[3])
            {
                _l = false;
                FileStream              inFile = new FileStream(_FILENAME, FileMode.Open, FileAccess.Read);
                StreamReader            reader = new StreamReader(inFile);
                string                  recordIn;
                string[]                fields;
                List <Enemy>            tempEnemy    = new List <Enemy>();
                List <RemoveGameObject> tempBonus    = new List <RemoveGameObject>();
                List <Sleutels>         tempSleutels = new List <Sleutels>();
                bool blue = false;
                bool red  = false;

                string Level       = reader.ReadLine();
                int    ScoreSpeler = Convert.ToInt32(reader.ReadLine());
                int    Levens      = Convert.ToInt32(reader.ReadLine());
                int    PosX        = Convert.ToInt32(reader.ReadLine());
                int    PosY        = Convert.ToInt32(reader.ReadLine());

                Speler tempSpeler = new Speler(PosX, PosY);
                tempSpeler.ScoreInt = ScoreSpeler;

                for (int i = 0; i < Levens; i++)
                {
                    tempSpeler.AddLive();
                }

                recordIn = reader.ReadLine();
                while (recordIn != null)
                {
                    fields = recordIn.Split(';');

                    if (fields[0] == "Robot")
                    {
                        tempEnemy.Add(new Robot((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "MonsterRight")
                    {
                        tempEnemy.Add(new MonsterRight((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "MonsterLeft")
                    {
                        tempEnemy.Add(new MonsterLeft((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "Mine")
                    {
                        tempEnemy.Add(new Mine((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "Tank")
                    {
                        tempEnemy.Add(new Tank((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]), (int)Convert.ToDouble(fields[3])));
                    }
                    else if (fields[0] == "FireRobot")
                    {
                        tempEnemy.Add(new FireRobot((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2]), (int)Convert.ToDouble(fields[3])));
                    }
                    else if (fields[0] == "Floppy")
                    {
                        tempBonus.Add(new Floppy((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "Cola")
                    {
                        tempBonus.Add(new Cola((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "KeyRed")
                    {
                        tempBonus.Add(new KeyRed((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }
                    else if (fields[0] == "KeyBlue")
                    {
                        tempBonus.Add(new KeyBlue((int)Convert.ToDouble(fields[1]), (int)Convert.ToDouble(fields[2])));
                    }

                    recordIn = reader.ReadLine();
                }

                reader.Close();
                inFile.Close();

                foreach (RemoveGameObject r in tempBonus)
                {
                    if (r is KeyBlue)
                    {
                        blue = true;
                    }
                    else if (r is KeyRed)
                    {
                        red = true;
                    }
                }

                if (!red)
                {
                    tempSleutels.Add(Sleutels.Red);
                }
                if (!blue)
                {
                    tempSleutels.Add(Sleutels.Blue);
                }

                if (Level == "Level1")
                {
                    return(new Level1(tempSpeler, tempEnemy, tempBonus, tempSleutels));
                }
                else
                {
                    return(new Level2(tempSpeler, tempEnemy, tempBonus, tempSleutels));
                }
            }

            #endregion

            return(this);
        }