I know this code needs some organization like classes, enums, methods, arrays or something but I just want to know if I could have created a character movement script, thereby shortening the code without using enums, methods, array etc. (keep it the same). Is there any ways to shorten this?
namespace rpgProject
{
public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D Character;
Vector2 characterPos = new Vector2(400,240);
float speed1 = 2;
float speed2 = 2;
Point frameSize = new Point(32,63);
Point CurrentFrame = new Point(0, 0);
Point sheetSize = new Point(6, 4);
int timePassed;
int timeLimit=43;
bool right = true;
bool left = true;
bool up = true;
bool glitch = true;
bool down = true;
SpriteFont font1;
SpriteFont font2;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
Character = Content.Load<Texture2D>("Sprites/test");
font1 = Content.Load<SpriteFont>("fonts/SpriteFont1");
font2 = Content.Load<SpriteFont>("fonts/SpriteFont1");
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
if (characterPos.X < 0 || characterPos.X > Window.ClientBounds.Width - Character.Width)//to make sure it does not colide with edge of the screen
{
if (characterPos.X < 0)
{
characterPos.X = 0;
}
else
{
characterPos.X = Window.ClientBounds.Width - Character.Width;
}
}
if (characterPos.Y < 0 || characterPos.Y >= Window.ClientBounds.Height - Character.Height)
{
if (characterPos.Y < 0)
{
characterPos.Y = 0;
}
else
{
characterPos.Y = Window.ClientBounds.Height - Character.Height;
}
}
timePassed += gameTime.ElapsedGameTime.Milliseconds;
KeyboardState charMovement = Keyboard.GetState();
if (timePassed >= timeLimit)
{
timePassed -=timeLimit;
if (right==true)
{
if (charMovement.IsKeyDown(Keys.Right))
{
left = false;
up = false;
down = false;
characterPos.X += speed1;
sheetSize.Y = 3;
CurrentFrame.Y = sheetSize.Y;
++CurrentFrame.X;
if (CurrentFrame.X >= sheetSize.X)
{
CurrentFrame.X = 0;
Console.WriteLine("stage 4");
}
}
else
{
glitch = true;
right = false;
left = true;
up = true;
down = true;
CurrentFrame.X = 0;
}
}
if (left == true)
{
if (charMovement.IsKeyDown(Keys.Left))
{
right = false;
up = false;
down = false;
characterPos.X -= speed1;
sheetSize.Y = 1;
CurrentFrame.Y = sheetSize.Y;
++CurrentFrame.X;
if (CurrentFrame.X >= sheetSize.X)
{
CurrentFrame.X = 0;
Console.WriteLine("stage 3");
}
}
else
{
left = false;
right = true;
up = true;
down = true;
CurrentFrame.X = 0;
}
}
if (up == true)
{
if (charMovement.IsKeyDown(Keys.Up))
{
left = false;
right = false;
down = false;
characterPos.Y -= speed2;
sheetSize.Y = 2;
CurrentFrame.Y = sheetSize.Y;
CurrentFrame.X++;
if (CurrentFrame.X >= sheetSize.X)
{
Console.WriteLine("stage 1");
CurrentFrame.X = 0;
}
}
else
{
up = false;
left = true;
right = true;
down = true;
CurrentFrame.X = 0;
}
}
if (down == true)
{
if (charMovement.IsKeyDown(Keys.Down))
{
left = false;
right = false;
up = false;
characterPos.Y += speed2;
sheetSize.Y = 0;
CurrentFrame.Y = sheetSize.Y;
CurrentFrame.X++;
if (CurrentFrame.X >= sheetSize.X)
{
Console.WriteLine("stage 2");
CurrentFrame.X = 0;
}
}
else
{
down = false;
up = true;
left = true;
right = true;
down = true;
CurrentFrame.X = 0;
}
}
base.Update(gameTime);
}
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.White);
spriteBatch.Begin();
spriteBatch.Draw(Character/*spritesheet */, characterPos,new Rectangle(CurrentFrame.X * frameSize.X,
CurrentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y), Color.White,0,Vector2.Zero,1,SpriteEffects.None,0);
spriteBatch.DrawString(font1, "hi", new Vector2(49, 49), Color.Black);
spriteBatch.DrawString(font2,"bye", new Vector2(100, 200), Color.Black);
spriteBatch.End();
base.Draw(gameTime);
}
}
}