source: 2011/23/sijoseha/AdventureGame/AdventureGame/AdventureGame.cs @ 1733

Revision 1733, 8.2 KB checked in by tekrjant, 9 years ago (diff)

Lots of changes:

  • Added camera
  • Separate map and hud areas
  • Saving happens on binary data instead of XML to save space. (And it gives more rep!.. maybe)
  • And a lot of minor stuff
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.IO;
5using System.Text;
6using System.Xml;
7using Microsoft.Xna.Framework;
8using Microsoft.Xna.Framework.Audio;
9using Microsoft.Xna.Framework.Content;
10using Microsoft.Xna.Framework.GamerServices;
11using Microsoft.Xna.Framework.Graphics;
12using Microsoft.Xna.Framework.Input;
13using Microsoft.Xna.Framework.Media;
14
15namespace AdventureGame
16{
17    /// <summary>
18    /// This is the main type for your game
19    /// </summary>
20    public class AdventureGame : Microsoft.Xna.Framework.Game
21    {
22        GraphicsDeviceManager graphics;
23       
24       
25
26        SpriteBatch spriteBatch;
27
28       
29        static public int TILE_SIZE = 32;
30        static public Texture2D selectionBox;
31        static public SpriteFont basicFont;
32        Texture2D tileImage;
33        MouseState mouseState, previousMouseState;
34        KeyboardState keyState, previousKeyState;
35
36        Map gameMap;
37        Camera gameCamera;
38
39        Viewport mapView, hudView;
40
41        Button saveButton;
42
43        public AdventureGame()
44        {
45            graphics = new GraphicsDeviceManager(this);
46            Content.RootDirectory = "Content";
47        }
48
49        /// <summary>
50        /// Allows the game to perform any initialization it needs to before starting to run.
51        /// This is where it can query for any required services and load any non-graphic
52        /// related content.  Calling base.Initialize will enumerate through any components
53        /// and initialize them as well.
54        /// </summary>
55        protected override void Initialize()
56        {
57
58
59            //graphics.IsFullScreen = true;
60            //graphics.ApplyChanges();
61            IsMouseVisible = true;
62            base.Initialize();
63        }
64
65        /// <summary>
66        /// LoadContent will be called once per game and is the place to load
67        /// all of your content.
68        /// </summary>
69        protected override void LoadContent()
70        {
71            // Create a new SpriteBatch, which can be used to draw textures.
72            spriteBatch = new SpriteBatch(GraphicsDevice);
73            basicFont = Content.Load<SpriteFont>("Basicfont");
74            selectionBox = Content.Load<Texture2D>("selectionbox");
75            tileImage = Content.Load<Texture2D>("tilet");
76
77            mapView = new Viewport(0, 0, graphics.PreferredBackBufferWidth - 200, graphics.PreferredBackBufferHeight);
78            hudView = new Viewport(graphics.PreferredBackBufferWidth - 200, 0, 200, graphics.PreferredBackBufferHeight);
79
80            gameMap = new Map(this, tileImage, TILE_SIZE, 50, 20);
81            gameCamera = new Camera();
82            saveButton = new Button(new Rectangle(10, 10, 150, 40), "Save", Color.YellowGreen, Color.Red, GraphicsDevice);
83        }
84
85        /// <summary>
86        /// UnloadContent will be called once per game and is the place to unload
87        /// all content.
88        /// </summary>
89        protected override void UnloadContent()
90        {
91            // TODO: Unload any non ContentManager content here
92        }
93
94        /// <summary>
95        /// Allows the game to run logic such as updating the world,
96        /// checking for collisions, gathering input, and playing audio.
97        /// </summary>
98        /// <param name="gameTime">Provides a snapshot of timing values.</param>
99        protected override void Update(GameTime gameTime)
100        {
101            // Allows the game to exit
102            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
103                this.Exit();
104
105            mouseState = Mouse.GetState();
106            keyState = Keyboard.GetState();
107
108            if (previousMouseState.LeftButton == ButtonState.Released && mouseState.LeftButton == ButtonState.Pressed)
109            {
110                if (mouseState.X < graphics.PreferredBackBufferWidth - 200)
111                {
112                    Vector2 mouseWorldPos = gameCamera.getMouseWorldPos(new Vector2(mouseState.X, mouseState.Y), mapView);
113                    Rectangle mousePos = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);
114                    foreach (Tile tile in gameMap.Tiles)
115                    {
116                        if (mousePos.Intersects(tile.Boundaries))
117                        {
118                            gameMap.UnSelectAll();
119                            gameMap.SelectTile(tile);
120                        }
121                    }
122                }
123                else
124                {
125                    Vector2 mouseWorldPos = gameCamera.getMouseWorldPos(new Vector2(mouseState.X - hudView.X, mouseState.Y), hudView);
126                    Rectangle mousePos = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);
127                    if (mousePos.Intersects(saveButton.Boundaries))
128                        SaveMap();
129                }
130            }
131
132            if (keyState.IsKeyDown(Keys.D1) && previousKeyState.IsKeyUp(Keys.D1))
133                gameMap.ChangeTileTo(TileType.Grass);
134            if (keyState.IsKeyDown(Keys.D2) && previousKeyState.IsKeyUp(Keys.D2))
135                gameMap.ChangeTileTo(TileType.DarkGrass);
136            if (keyState.IsKeyDown(Keys.D3) && previousKeyState.IsKeyUp(Keys.D3))
137                gameMap.ChangeTileTo(TileType.Sand);
138            if (keyState.IsKeyDown(Keys.D4) && previousKeyState.IsKeyUp(Keys.D4))
139                gameMap.ChangeTileTo(TileType.Water);
140
141            if (keyState.IsKeyDown(Keys.Left))
142                gameCamera.Move(new Vector2(-5, 0));
143            if (keyState.IsKeyDown(Keys.Right))
144                gameCamera.Move(new Vector2(5, 0));
145            if (keyState.IsKeyDown(Keys.Up))
146                gameCamera.Move(new Vector2(0, -5));
147            if (keyState.IsKeyDown(Keys.Down))
148                gameCamera.Move(new Vector2(0, 5));
149            previousMouseState = mouseState;
150            previousKeyState = keyState;
151            base.Update(gameTime);
152        }
153
154        /// <summary>
155        /// This is called when the game should draw itself.
156        /// </summary>
157        /// <param name="gameTime">Provides a snapshot of timing values.</param>
158        protected override void Draw(GameTime gameTime)
159        {
160            GraphicsDevice.Clear(Color.CornflowerBlue);
161            GraphicsDevice.Viewport = mapView;
162            spriteBatch.Begin(SpriteSortMode.Deferred,
163                BlendState.AlphaBlend,
164                null,null,null,null,gameCamera.getTransformation(mapView));
165            gameMap.Draw(spriteBatch);
166            spriteBatch.End();
167            GraphicsDevice.Viewport = hudView;
168            spriteBatch.Begin();
169            saveButton.Draw(spriteBatch);
170            spriteBatch.End();
171
172            base.Draw(gameTime);
173        }
174
175        private void SaveMap()
176        {
177            //FileStream mapFile = File.Create("savedMap,xml");
178            using (FileStream mapSave = new FileStream("savedMap", FileMode.Create, FileAccess.Write))
179            {
180                using (BinaryWriter w = new BinaryWriter(mapSave))
181                {
182                    w.Write(gameMap.Tiles.Count);
183                    foreach (Tile tile in gameMap.Tiles)
184                    {
185                        w.Write((int)tile.TileType);
186                        w.Write((int)tile.Position.X);
187                        w.Write((int)tile.Position.Y);
188                    }
189                }
190            }
191
192            using (FileStream mapLoad = new FileStream("savedMap", FileMode.Open, FileAccess.Read))
193            {
194                using (BinaryReader r = new BinaryReader(mapLoad))
195                {
196                    using (StreamWriter random = new StreamWriter("clear.txt"))
197                    {
198                        int amount = r.ReadInt32();
199                        for (int i = 0; i < amount; i++)
200                        {
201                            int tile = r.ReadInt32();
202                            int x = r.ReadInt32();
203                            int y = r.ReadInt32();
204                            random.WriteLine(tile.ToString() + ' ' + x.ToString() + ' ' + y.ToString());
205                        }
206                    }
207                }
208            }           
209        }
210    }
211}
Note: See TracBrowser for help on using the repository browser.