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

Revision 1758, 10.5 KB checked in by tekrjant, 8 years ago (diff)

Minor changes

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        #region PublicStuff
23
24        GraphicsDeviceManager graphics;
25       
26        SpriteBatch spriteBatch;
27
28        static public int TILE_SIZE = 32;
29        static public Texture2D selectionBox;
30        static public SpriteFont basicFont;
31        Texture2D tileImage;
32        Texture2D miniMapBorders;
33        MouseState mouseState, previousMouseState;
34        KeyboardState keyState, previousKeyState;
35
36        Map gameMap;
37        Camera gameCamera;
38        HUD gameHUD;
39
40        Viewport mapView, hudView, miniMapView;
41
42        #endregion
43
44        public AdventureGame()
45        {
46            graphics = new GraphicsDeviceManager(this);
47            Content.RootDirectory = "Content";
48        }
49
50        /// <summary>
51        /// Allows the game to perform any initialization it needs to before starting to run.
52        /// This is where it can query for any required services and load any non-graphic
53        /// related content.  Calling base.Initialize will enumerate through any components
54        /// and initialize them as well.
55        /// </summary>
56        protected override void Initialize()
57        {
58            IsMouseVisible = true;
59            base.Initialize();
60        }
61
62        /// <summary>
63        /// LoadContent will be called once per game and is the place to load
64        /// all of your content.
65        /// </summary>
66        protected override void LoadContent()
67        {
68            // Create a new SpriteBatch, which can be used to draw textures.
69            spriteBatch = new SpriteBatch(GraphicsDevice);
70
71            LoadTextures();
72            basicFont = Content.Load<SpriteFont>("Basicfont");
73
74            CreateViews();
75            gameMap = new Map(this, tileImage, TILE_SIZE, 20, 20);
76            CreateHUD();
77
78            gameCamera = new Camera(mapView);
79        }
80
81        /// <summary>
82        /// UnloadContent will be called once per game and is the place to unload
83        /// all content.
84        /// </summary>
85        protected override void UnloadContent()
86        {
87            // TODO: Unload any non ContentManager content here
88        }
89
90        #region Updating
91
92        /// <summary>
93        /// Allows the game to run logic such as updating the world,
94        /// checking for collisions, gathering input, and playing audio.
95        /// </summary>
96        /// <param name="gameTime">Provides a snapshot of timing values.</param>
97        protected override void Update(GameTime gameTime)
98        {
99            // Allows the game to exit
100            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
101                this.Exit();
102
103            UpdateMouse();
104            UpdateKeyboard();
105           
106            base.Update(gameTime);
107        }
108
109        private void UpdateMouse()
110        {
111            mouseState = Mouse.GetState();
112
113            if (previousMouseState.LeftButton == ButtonState.Released && mouseState.LeftButton == ButtonState.Pressed)
114            {
115                if (mouseState.X < gameHUD.ViewPort.X)
116                {
117                    Vector2 mouseWorldPos = gameCamera.getMouseWorldPos(new Vector2(mouseState.X, mouseState.Y), mapView);
118                    Rectangle mousePos = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);
119                    foreach (Tile tile in gameMap.Tiles)
120                    {
121                        if (mousePos.Intersects(tile.Boundaries))
122                        {
123                            gameMap.UnSelectAll();
124                            gameMap.SelectTile(tile);
125                        }
126                    }
127                }
128                else
129                {
130                    Vector2 mouseWorldPos = gameCamera.getMouseWorldPos(new Vector2(mouseState.X - gameHUD.ViewPort.X, mouseState.Y), gameHUD.ViewPort);
131                    Rectangle mousePos = new Rectangle((int)mouseWorldPos.X, (int)mouseWorldPos.Y, 1, 1);
132                    foreach (Button button in gameHUD.Buttons)
133                    {
134                        if (mousePos.Intersects(button.Boundaries))
135                            if (button.Selectable)
136                                gameHUD.Select(button);
137                            else
138                                button.Pressed();
139                    }
140                }
141            }
142
143            previousMouseState = mouseState;
144        }
145
146        private void UpdateKeyboard()
147        {
148            keyState = Keyboard.GetState();
149            if (keyState.IsKeyDown(Keys.D1) && previousKeyState.IsKeyUp(Keys.D1))
150                gameMap.ChangeTileTo(TileType.Grass);
151            if (keyState.IsKeyDown(Keys.D2) && previousKeyState.IsKeyUp(Keys.D2))
152                gameMap.ChangeTileTo(TileType.DarkGrass);
153            if (keyState.IsKeyDown(Keys.D3) && previousKeyState.IsKeyUp(Keys.D3))
154                gameMap.ChangeTileTo(TileType.Sand);
155            if (keyState.IsKeyDown(Keys.D4) && previousKeyState.IsKeyUp(Keys.D4))
156                gameMap.ChangeTileTo(TileType.Water);
157
158            if (keyState.IsKeyDown(Keys.Left))
159                gameCamera.Move(new Vector2(-5, 0));
160            if (keyState.IsKeyDown(Keys.Right))
161                gameCamera.Move(new Vector2(5, 0));
162            if (keyState.IsKeyDown(Keys.Up))
163                gameCamera.Move(new Vector2(0, -5));
164            if (keyState.IsKeyDown(Keys.Down))
165                gameCamera.Move(new Vector2(0, 5));
166
167            previousKeyState = keyState;
168        }
169
170        private void LoadTextures()
171        {
172            selectionBox = Content.Load<Texture2D>("selectionbox");
173            tileImage = Content.Load<Texture2D>("tilet");
174            miniMapBorders = Content.Load<Texture2D>("miniMapBorders");
175        }
176        #endregion
177
178        #region Drawing
179
180        /// <summary>
181        /// This is called when the game should draw itself.
182        /// </summary>
183        /// <param name="gameTime">Provides a snapshot of timing values.</param>
184        protected override void Draw(GameTime gameTime)
185        {
186            GraphicsDevice.Clear(Color.CornflowerBlue);
187            DrawMap();
188            DrawHUD();
189            DrawMiniMap();
190            base.Draw(gameTime);
191        }
192
193        private void DrawMiniMap()
194        {
195            GraphicsDevice.Viewport = miniMapView;
196            spriteBatch.Begin(SpriteSortMode.Deferred,
197                BlendState.AlphaBlend,
198                null, null, null, null, gameCamera.getTransformation(miniMapView, true, gameMap.Size));
199            gameHUD.DrawMinimap(spriteBatch);
200            spriteBatch.End();
201            spriteBatch.Begin();
202            spriteBatch.Draw(gameHUD.MiniMap.Borders, new Rectangle(0, 0, 200, 200), Color.White);
203            spriteBatch.End();
204        }
205
206        private void DrawHUD()
207        {
208            GraphicsDevice.Viewport = gameHUD.ViewPort;
209            spriteBatch.Begin();
210            gameHUD.Draw(spriteBatch);
211            spriteBatch.End();
212        }
213
214        private void DrawMap()
215        {
216            GraphicsDevice.Viewport = mapView;
217            spriteBatch.Begin(SpriteSortMode.Deferred,
218                BlendState.AlphaBlend,
219                null, null, null, null, gameCamera.getTransformation(mapView));
220            gameMap.Draw(spriteBatch, gameCamera);
221            spriteBatch.End();
222        }
223
224        #endregion
225
226        private void CreateViews()
227        {
228            mapView = new Viewport(0, 0,
229                graphics.PreferredBackBufferWidth - 200,
230                graphics.PreferredBackBufferHeight);
231            hudView = new Viewport(graphics.PreferredBackBufferWidth - 200,
232                0, 200, graphics.PreferredBackBufferHeight);
233            miniMapView = new Viewport(graphics.PreferredBackBufferWidth - 200,
234                graphics.PreferredBackBufferHeight - 200, 200, 200);
235        }
236
237        private void CreateHUD()
238        {
239            gameHUD = new HUD();
240            gameHUD.ViewPort = hudView;
241            gameHUD.AddButton(new Button
242                (new Rectangle(10, 10, 150, 40),
243                "Save", Color.YellowGreen, Color.Red, GraphicsDevice, SaveMap));
244           
245            gameHUD.AddButton(new Button(
246                new Rectangle(10,60,32,32), gameMap.textureType[TileType.Grass],
247                Color.Red, true, GraphicsDevice));
248            gameHUD.AddMiniMap(new MiniMap(gameMap, miniMapView, miniMapBorders));
249
250        }
251
252        private bool SelectHudTile()
253        {
254            return false;
255        }
256
257        private void SaveMap(object sender, EventArgs e)
258        {
259            //FileStream mapFile = File.Create("savedMap,xml");
260            using (FileStream mapSave = new FileStream("savedMap", FileMode.Create, FileAccess.Write))
261            {
262                using (BinaryWriter w = new BinaryWriter(mapSave))
263                {
264                    w.Write(gameMap.Tiles.Count);
265                    foreach (Tile tile in gameMap.Tiles)
266                    {
267                        w.Write((int)tile.TileType);
268                        w.Write((int)tile.Position.X);
269                        w.Write((int)tile.Position.Y);
270                    }
271                }
272            }
273
274            using (FileStream mapLoad = new FileStream("savedMap", FileMode.Open, FileAccess.Read))
275            {
276                using (BinaryReader r = new BinaryReader(mapLoad))
277                {
278                    using (StreamWriter random = new StreamWriter("clear.txt"))
279                    {
280                        int amount = r.ReadInt32();
281                        for (int i = 0; i < amount; i++)
282                        {
283                            int tile = r.ReadInt32();
284                            int x = r.ReadInt32();
285                            int y = r.ReadInt32();
286                            random.WriteLine(tile.ToString() + ' ' + x.ToString() + ' ' + y.ToString());
287                        }
288                    }
289                }
290            }           
291        }
292    }
293}
Note: See TracBrowser for help on using the repository browser.