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;
}
}
}
}