Shuffle tiles position in the beginning of the game XNA Csharp

Posted by GalneGunnar on Game Development See other posts from Game Development or by GalneGunnar
Published on 2012-10-10T13:06:06Z Indexed on 2012/10/10 15:55 UTC
Read the original article Hit count: 544

Filed under:
|
|
|
|

Im trying to create a puzzlegame where you move tiles to certain positions to make a whole image. I need help with randomizing the tiles startposition so that they don't create the whole image at the beginning. There is also something wrong with my offset, that's why it's set to (0,0). I know my code is not good, but Im just starting to learn :]

Thanks in advance

My Game1 class:

{ public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch;

    Texture2D PictureTexture;
    Texture2D FrameTexture;


    // Offset för bildgraff
    Vector2 Offset = new Vector2(0,0);


    //skapar en array som ska hålla delar av den stora bilden

    Square[,] squareArray = new Square[4, 4];

   // Random randomeraBilder = new Random();


    //Width och Height för bilden

    int pictureHeight = 95;
    int pictureWidth = 144;

    Random randomera = new Random();
    int index = 0;
    MouseState oldMouseState;

    int WindowHeight;
    int WindowWidth;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";


        //scalar Window till 800x 600y
        graphics.PreferredBackBufferWidth = 800;
        graphics.PreferredBackBufferHeight = 600;
        graphics.ApplyChanges();
    }


    protected override void Initialize()
    {
        IsMouseVisible = true;
        base.Initialize();
    }


    protected override void LoadContent()
    {

        spriteBatch = new SpriteBatch(GraphicsDevice);
        PictureTexture = Content.Load<Texture2D>(@"Images/bildgraff");
        FrameTexture = Content.Load<Texture2D>(@"Images/framer");

        //Laddar in varje liten bild av den stora bilden i en array

        for (int x = 0; x < 4; x++)
        {
            for (int y = 0; y < 4; y++)
            {

                Vector2 position = new Vector2(x * pictureWidth, y * pictureHeight);

                position = position + Offset;

                Rectangle square = new Rectangle(x  * pictureWidth, y * pictureHeight, pictureWidth, pictureHeight);



                Square frame = new Square(position, PictureTexture, square, Offset, index);
                squareArray[x, y] = frame;

                index++;



            }
        }         
    }




    protected override void UnloadContent()
    {

    }


    protected override void Update(GameTime gameTime)
    {

        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();



        MouseState ms = Mouse.GetState();





        if (oldMouseState.LeftButton == ButtonState.Pressed && ms.LeftButton == ButtonState.Released)
        {
            // ta reda på vilken position vi har tryckt på
            int col = ms.X / pictureWidth;
            int row = ms.Y / pictureHeight;

            for (int x = 0; x < squareArray.GetLength(0); x++)
            {
                for (int y = 0; y < squareArray.GetLength(1); y++)
                {



                    // kollar om rutan är tom och så att indexet inte går utanför för "col" och "row"
                    if (squareArray[x, y].index == 0 && col >= 0 && row >= 0 && col <= 3 && row <= 3)
                    {

                        if (squareArray[x, y].index == 0 * col)
                        {
                            //kollar om rutan brevid mouseclick är tom
                            if (col > 0 && squareArray[col - 1, row].index == 0 || row > 0 && squareArray[col, row - 1].index == 0 ||
                              col < 3 && squareArray[col + 1, row].index == 0 || row < 3 && squareArray[col, row + 1].index == 0)
                            {

                                Square sqaure = squareArray[col, row];
                                Square hal = squareArray[x, y];
                                squareArray[x, y] = sqaure;
                                squareArray[col, row] = hal;


                                for (int i = 0; i < 4; i++)
                                {
                                    for (int j = 0; j < 4; j++)
                                    {
                                        Vector2 goalPosition = new Vector2(x * pictureWidth, y * pictureHeight);
                                        squareArray[x, y].Swap(goalPosition);

                                    }

                                }

                            }
                        }
                    }
                }
            }
        }

        //if (oldMouseState.RightButton == ButtonState.Pressed && ms.RightButton == ButtonState.Released)
        //{
        //    for (int x = 0; x < 4; x++)
        //    {
        //        for (int y = 0; y < 4; y++)
        //        {

        //        }
        //    }

        //}

         oldMouseState = ms;




            base.Update(gameTime);

        }


    protected override void Draw(GameTime gameTime)
    {

        GraphicsDevice.Clear(Color.CornflowerBlue);

       WindowHeight = Window.ClientBounds.Height;
       WindowWidth = Window.ClientBounds.Width;
        Rectangle screenPosition = new Rectangle(0,0, WindowWidth, WindowHeight);

         spriteBatch.Begin();
         spriteBatch.Draw(FrameTexture, screenPosition, Color.White);

        //Ritar ut alla brickorna förutom den som har index 0
         for (int x = 0; x < 4; x++)
         {
             for (int y = 0; y < 4; y++)
             {
                 if (squareArray[x, y].index != 0)
                 {
                     squareArray[x, y].Draw(spriteBatch);
                 }
             }
         }




        spriteBatch.End();


        base.Draw(gameTime);
    }
}

}

My square class:

class Square
{

    public Vector2 position;
    public Texture2D grafTexture;
    public Rectangle square;
    public Vector2 offset;
    public int index;




    public Square(Vector2 position, Texture2D grafTexture, Rectangle square, Vector2 offset, int index)
    {
        this.position = position;
        this.grafTexture = grafTexture;
        this.square = square;
        this.offset = offset;
        this.index = index;


    }

    public void Draw(SpriteBatch spritebatch)
    {
        spritebatch.Draw(grafTexture, position, square, Color.White);
    }

    public void RandomPosition()
    {



    }


    public void Swap(Vector2 Goal )
    {
        if (Goal.X > position.X)
        {
             position.X = position.X + 144;
        }
        else if (Goal.X < position.X)
        {
            position.X = position.X - 144;
        }
        else if (Goal.Y < position.Y)
        {
            position.Y = position.Y - 95;
        }
        else  if (Goal.Y > position.Y)
        {
            position.Y = position.Y + 95;
        }






    }



    }


    }

© Game Development or respective owner

Related posts about XNA

Related posts about c#