Quantcast
Channel: Visual C# forum
Viewing all articles
Browse latest Browse all 31927

XNA Game, problems with Random PosY value on enemies.

$
0
0

Hello there ladies and gentlemen. So here I am, trying to create my first game (quite new to C#).

So the game is basicly a lite version of flappybird, the player presses "Space" to jump/float to not hit enemies.

Here is the problem: I got 4 enemy classes, the first one works like it should and generates a random PosY value when PosX < -99. But the other classes that should generate a random PosY too (random.next(0,380);) only takes enemy1:s value.

So if enemy1 has the value 183 after the random.next enemy2,3 and 4 also gets that value.

Game1.cs :

 public class Game1 : Game
    {
        public static System.Timers.Timer timer100;
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Rectangle playerRectangle, enemyRectangle, enemy2Rectangle, enemy3Rectangle, enemy4Rectangle;
        Vector2 enemyPosition, enemy2Position, enemy3Position, enemy4Position;
        Player player;
        Player player2;
        Wall wall;
        Enemy enemy;
        Enemy2 enemy2;
        Enemy3 enemy3;
        Enemy4 enemy4;
        Boss boss;
        int x = 0;
        //int[] y;
        Random random = new Random();
        bool gameover = false;

        public Game1()
            : base()
        {
            player = new Player();
            player2 = new Player();
            wall = new Wall(300, 100);
            enemy = new Enemy();
            enemy2 = new Enemy2();
            enemy3 = new Enemy3();
            enemy4 = new Enemy4();
            boss = new Boss(0,0);
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";

        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            #region(InitializeEnemyPosyPosx)

            enemy.posY = 0;
            enemy2.posY = 70;
            enemy3.posY = 150;
            enemy4.posY = 280;
            //enemy.posY = enemy.randomPosY;
            //enemy2.Enemy2posY = enemy2.Enemy2randomPosY;
            //enemy3.Enemy3posY = enemy3.Enemy3randomPosY;
            //enemy4.Enemy4posY = enemy4.Enemy4randomPosY;

            enemy.posX = 800;
            enemy2.posX = 1100;
            enemy3.posX = 1400;
            enemy4.posX = 1700;
            #endregion
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        /// <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);
            Texture2D gameOver = Content.Load<Texture2D>("gameOver.png");
            Texture2D temp3 = Content.Load<Texture2D>("Boss.gif");
            Texture2D temp2 = Content.Load<Texture2D>("Boss.gif");
            Texture2D temp1 = Content.Load<Texture2D>("Boss.gif");
            Texture2D temp4 = Content.Load<Texture2D>("Boss.gif");
            Texture2D temp5 = Content.Load<Texture2D>("Boss.gif");
            Texture2D temp = Content.Load<Texture2D>("dogePlayer.png");
            player.loadSprite(temp);
            enemy.loadSprite(temp2);
            enemy2.loadSprite(temp1);
            enemy3.loadSprite(temp4);
            enemy4.loadSprite(temp5);
            boss.loadSprite(temp1);
            wall.loadSprite(gameOver);

            
            // TODO: use this.Content to load your game content here
            
        }

        /// <summary>
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
                Exit();

            enemyPosition = new Vector2(enemy.getX(), enemy.getY());
            enemy2Position = new Vector2(enemy2.getX2(), enemy2.getY2());
            enemy3Position = new Vector2(enemy3.getX3(), enemy3.getY3());
            enemy4Position = new Vector2(enemy4.getX4(), enemy4.getY4());

            #region(Player&EnemyRectangles)
            playerRectangle = new Rectangle(player.getX(),player.getY(),player.getSprite().Width,player.getSprite().Height);
            enemyRectangle = new Rectangle(enemy.getX(),enemy.getY(),enemy.getSprite().Width,enemy.getSprite().Height);
            enemy2Rectangle = new Rectangle(enemy2.getX2(), enemy2.getY2(), enemy2.getSprite().Width, enemy2.getSprite().Height);
            enemy3Rectangle = new Rectangle(enemy3.getX3(), enemy3.getY3(), enemy3.getSprite().Width, enemy3.getSprite().Height);
            enemy4Rectangle = new Rectangle(enemy4.getX4(), enemy4.getY4(), enemy4.getSprite().Width, enemy4.getSprite().Height);
            #endregion

            #region(PlayerIntersectsWithEnemy or Walls)
            if (playerRectangle.Intersects(enemyRectangle))
            {
                gameover = true;
            }
            if (playerRectangle.Intersects(enemy2Rectangle))
            {
                gameover = true;
            }
            if (playerRectangle.Intersects(enemy3Rectangle))
            {
                gameover = true;
            }
            if (playerRectangle.Intersects(enemy4Rectangle))
            {
                gameover = true;
            }
            if (playerRectangle.Y < 0 || playerRectangle.Y > 390)
            {
                gameover = true;
            }

            #endregion

            #region(enemyposx)
            if (enemy.getX() < -99)
            {
                enemy.RandPosY();
                enemy.posX = 1000;
            }
            if (enemy2.getX2() < -99)
            {
                enemy2.RandPosY2();
                enemy2.posX = 1000;
            }
            if (enemy3.getX3() < -99)
            {
                enemy3.RandPosY3();
                enemy3.posX = 1000;
            }
            if (enemy4.getX4() < -99)
            {
                enemy4.RandPosY4();
                enemy4.posX = 1000;
            }
#endregion

            
            // TODO: Add your update logic here
            player.Update(wall);
            enemy.update(player);
            enemy2.update(player);
            enemy3.update(player);
            enemy4.update(player);
            boss.update(player);
            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        /// 

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.BlueViolet);
            // TODO: Add your drawing code here
            spriteBatch.Begin();
            spriteBatch.Draw(player.getSprite(), playerRectangle, Color.BlueViolet); //new Rectangle(player.getX(), player.getY(), player.getSprite().Width, player.getSprite().Height), Color.BlueViolet);
            if (gameover)
            {
                spriteBatch.Draw(wall.getSprite(), new Rectangle(150, 0, 500, 500), Color.BlueViolet);
            }
            //spriteBatch.Draw(wall.getSprite(), new Rectangle(wall.getX(), wall.getY(), wall.getSprite().Height, wall.getSprite().Width), Color.BlueViolet);
            spriteBatch.Draw(enemy.getSprite(), enemyRectangle, Color.BlueViolet);
            spriteBatch.Draw(enemy2.getSprite(), enemy2Rectangle, Color.BlueViolet);
            spriteBatch.Draw(enemy3.getSprite(), enemy3Rectangle, Color.BlueViolet);
            spriteBatch.Draw(enemy4.getSprite(), enemy4Rectangle, Color.BlueViolet);
            
            
            //Ifall det fuckar ur: new Rectangle(enemy4.getX4(), enemy4.Enemy4randomPosY, enemy4.getSprite().Height, enemy4.getSprite().Width)
            spriteBatch.End();
            base.Draw(gameTime);
        }
    }

Enemy.cs (This one works as it should):

public class Enemy
    {
        Texture2D sprite;
        Random randomposY = new Random();
        public int posX, posY, speed, randomPosY, oldrandomPosY;
        public static System.Timers.Timer timer1;

        public void Initialize()
        {
        
        }
        public Enemy() { }
        public Enemy(int x, int y)
        {
            posX = x;
            posY = y;
            speed = 2;
        }
        public void spawnNewEnemy(Texture2D sprite)
        {
            this.sprite = sprite;
        }
        public void loadSprite(Texture2D sprite)
        {
            this.sprite = sprite;
            Initialize();
        }
        public Texture2D getSprite()
        {
            return sprite;
        }
        public int getX()
        {
            return posX;
        }
        public int getY()
        {
            return posY;
        }
        public void RandPosY()
        {
            posY = randomposY.Next(0, 380);
        }
        private void AI(Player player)
        {

        }
        public void update(Player player)
        {
            AI(player);
            this.posX -= 1;
        }
        public void OnTimedEvent(object source, ElapsedEventArgs e)
        {
        
        }
    }
}

Enemy2.cs (This does not work as it should...):

class Enemy2
    {
        Texture2D sprite;
        public static System.Timers.Timer timer1;
        Random Enemy2randomposY = new Random();
        public int posX, posY, speed, Enemy2randomPosY, Enemy2oldrandomPosY;

        public void Initialize()
        {
   
        }
        public Enemy2() { }
        public Enemy2(int x, int y)
        {
            posX = x;
            posY = y;
            speed = 2;
        }
        public void spawnNewEnemy(Texture2D sprite)
        {
            this.sprite = sprite;
        }
        public void loadSprite(Texture2D sprite)
        {
            this.sprite = sprite;
            Initialize();
        }
        public Texture2D getSprite()
        {
            return sprite;
        }
        public int getX2()
        {
            return posX;
        }
        public int getY2()
        {
            return posY;
        }
        public void RandPosY2()
        {
            posY = Enemy2randomposY.Next(0, 380);
        }
        private void AI(Player player)
        {

        }
        public void update(Player player)
        {
            AI(player);
            this.posX -= 1;
        }
        public void OnTimedEvent(object source, ElapsedEventArgs e)
        {
           
        }
    }
}

Hopefully someone can help me, been stuck a looong time now and can't get it to work whatever I try. 

Please remember that I'm quite new, so if you think some code are really stupid or unnecessary tell me what is wrong :)


Viewing all articles
Browse latest Browse all 31927

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>