using CzokoŚmieciarka.MonoGameView.DataModels.Interfaces; using CzokoŚmieciarka.MonoGameView.DataModels.Interfaces.GarbageCollector; using CzokoŚmieciarka.MonoGameView.DataModels.Interfaces.TrashCans; using CzokoŚmieciarka.MonoGameView.DataModels.Models; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; using System.Linq; using CzokoŚmieciarka.MonoGameView.Algorithms; using MonoGameView.DataModels; namespace CzokoŚmieciarka.MonoGameView { /// /// This is the main type for your game. /// public class Game1 : Game { private static int size; GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D road1; Texture2D road2; Texture2D grass; Texture2D house; MapLoader mapLoader = new MapLoader(); Vector2 roadPos; float timer; const float TIMER = 0.2f; int stepN; List steps; GarbageCollector collector; object[,] grid; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferredBackBufferWidth = 500; graphics.PreferredBackBufferHeight = 500; } /// /// 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. /// protected override void Initialize() { // TODO: Add your initialization logic here roadPos = new Vector2(0, 0); timer = 0.2f; mapLoader.Load(out size,out grid,"map.xml"); collector = new GarbageCollector(new Coords(0, 0), new List(), size, size); stepN = 0; var dfs = new DFS(); steps = dfs.BestPath(Content, collector, grid); base.Initialize(); } /// /// LoadContent will be called once per game and is the place to load /// all of your content. /// protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); road1 = Content.Load("road1"); road2 = Content.Load("road2"); grass = Content.Load("grass"); house = Content.Load("house"); // TODO: use this.Content to load your game content here } /// /// UnloadContent will be called once per game and is the place to unload /// game-specific content. /// protected override void UnloadContent() { Content.Unload(); // TODO: Unload any non ContentManager content here } /// /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// /// Provides a snapshot of timing values. protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); var elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds; timer -= elapsed; if (timer<0) { timer = TIMER; if (steps.Any()) { steps.First().Invoke(collector, grid); steps.RemoveAt(0); } } // TODO: Add your update logic here base.Update(gameTime); } /// /// This is called when the game should draw itself. /// /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(); for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { if (grid[x, y] is Road1) spriteBatch.Draw(road1, new Rectangle(x*500 / size, y*500 / size, 500/size, 500/size),Color.White); else if (grid[x,y] is Road2) spriteBatch.Draw(road2, new Rectangle(x * 500 / size, y * 500 / size, 500 / size, 500 / size), Color.White); else if (grid[x, y] is House) spriteBatch.Draw(house, new Rectangle(x * 500 / size, y * 500 / size, 500 / size, 500 / size), Color.White); else spriteBatch.Draw(grass, new Rectangle(x * 500 / size, y * 500 / size, 500 / size, 500 / size), Color.White); } } collector.Draw(Content, spriteBatch, size); spriteBatch.End(); // TODO: Add your drawing code here base.Draw(gameTime); } } }