Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- using System;
- using System.Linq;
- using Game1.GameObjects;
- using System.Collections.Generic;
- // TODO: Корректный размер окна
- // TODO: Отображение жизней игрока
- // TODO: Враги
- // TODO: Отображение счётчика, сколько осталось врагов
- // TODO: Второй игрок (?)
- // TODO: Бонусы в игре
- namespace Game1 // TODO Подобрать имя к игре
- //Когда всё сделаем, можно будет переименовать игру из Game1 в что-нибудь крутое. Например, в Dawn of Infinite Destruction. Это сокращённо DID (Daniil, Ilya, Denis). То есть скрытая аббревиатура. И вообще сейчас это низкий приоритет
- {
- /// <summary>
- /// Это главный класс игры.
- /// </summary>
- public class Game1 : Game
- {
- GraphicsDeviceManager graphics;
- SpriteBatch spriteBatch;
- private HashSet<ScenicObject> scenicObjects;
- private HashSet<GameObject> gameObjects;
- private HashSet<GameObject> bulletObjects;
- private HashSet<GameObjects.Buttons> buttonObjects;
- private Scene gameScene; // Состояние сцены
- private Vector2 cursor_coords; // Координаты курсора
- private SpriteInfo blue_cursor;
- public Game1()
- {
- graphics = new GraphicsDeviceManager(this);
- graphics.PreferredBackBufferHeight = 417;
- Content.RootDirectory = "Content";
- //graphics.IsFullScreen = true;
- }
- /// <summary>
- /// Позволяет игре выполнить необходимую инициализацую перед запуском. Здесь игра сможет запросить любую необходимую услуги и загрузить любой не-графический контент.
- /// Вызов base.Initialize выполнит пересчёт всех компонентов и вдобавок инициализирует их.
- /// </summary>
- protected override void Initialize()
- {
- // Укажите здесь вашу логику инициализации
- base.Initialize();
- }
- /// <summary>
- /// LoadContent вызовется лишь один раз и здесь можно загрузить весь ваш контент.
- /// </summary>
- protected override void LoadContent()
- {
- // Создание нового SpriteBatch, что позволит рисовать текстуры.
- // Batch (англ.) - пакет, набор.
- gameScene = new Scene("menu"); // Первоначально при запуске игры наша сцена - меню
- spriteBatch = new SpriteBatch(GraphicsDevice);
- var panzerSprite = new SpriteInfo
- {
- Texture = Content.Load<Texture2D>("panzer2"),
- FrameWidth = 80,
- FrameHeight = 111
- };
- var shotSprite = new SpriteInfo
- {
- Texture = Content.Load<Texture2D>("shot"),
- FrameWidth = 12,
- FrameHeight = 16,
- TimeToShot = TimeSpan.FromSeconds(1)
- };
- var wallbrick = new SpriteInfo { Texture = Content.Load<Texture2D>("wall_brick") };
- var wallconcrete = new SpriteInfo { Texture = Content.Load<Texture2D>("wall_concrete") };
- var forest = new SpriteInfo { Texture = Content.Load<Texture2D>("forest") };
- var water = new SpriteInfo { Texture = Content.Load<Texture2D>("water") };
- var eagle = new SpriteInfo { Texture = Content.Load<Texture2D>("eagle32x32") };
- var invisible = new SpriteInfo { Texture = Content.Load<Texture2D>("invisible") };
- var start = new SpriteInfo { Texture = Content.Load<Texture2D>("start") };
- blue_cursor = new SpriteInfo { Texture = Content.Load<Texture2D>("blue_cursor") };
- scenicObjects = new HashSet<ScenicObject>();
- string[,] MasMapsToDraw = null;
- ReaderMap.getMap(ReaderMap.Reader(MasMapsToDraw), scenicObjects, wallbrick, wallconcrete, forest, water, invisible, eagle);
- GameObjects.Buttons btn_Start = new GameObjects.Buttons("start", new Rectangle(300, 200, 191, 50), false, true, start);
- buttonObjects = new HashSet<GameObjects.Buttons>();
- buttonObjects.Add(btn_Start);
- //==========================================================
- gameObjects = new HashSet<GameObject>();
- bulletObjects = new HashSet<GameObject>();
- Panzer panzer = new Panzer(panzerSprite, shotSprite) // TODO Танк появляется смотрящим вниз. Надо сделать так, чтобы он смотрел вверх
- {
- Position = new Vector2(150, 400), // TODO Либо у нас на всех картах будет один респавн, либо из ReaderMap как-то будем передавать сюда. Если первый вариант, то надо учесть, что игрок может нажимать на стрелочки до запуска игры в меню
- Speed = 0.1f,
- };
- gameObjects.Add(panzer);
- bulletObjects = panzer.bulletObjects;
- // Используйте this.Content, чтобы загрузить здесь контент вашей игры
- }
- /// <summary>
- /// UnloadContent вызовится один раз за игру и здесь выгружается особый игровой контент.
- /// </summary>
- protected override void UnloadContent()
- {
- // Выгрузите здесь ваш не имеющий отношения к ContentManager контент
- }
- /// <summary>
- /// Позволяет игре использовать логику игры каждый раз при обновлении мира.
- /// Например, проверка столкновений (коллизий), обработка входных данных и проигрывание аудио.
- /// </summary>
- /// <param name="gameTime">Provides a snapshot of timing values.</param>
- protected override void Update(GameTime gameTime)
- {
- //if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
- // Exit();
- if (Keyboard.GetState().IsKeyDown(Keys.Escape))
- Exit();
- MouseState ms = Mouse.GetState();
- cursor_coords = new Vector2(ms.X,ms.Y);
- //cursor_coords.X = ms.X;
- foreach (var gameObject in gameObjects)
- {
- gameObject.Update(gameTime);
- }
- foreach (var bo in bulletObjects)
- {
- bo.Update(gameTime);
- }
- base.Update(gameTime);
- }
- /// <summary>
- /// Вызывается, когда надо рисовать игру
- /// </summary>
- /// <param name="gameTime">Provides a snapshot of timing values.</param>
- protected override void Draw(GameTime gameTime)
- {
- GraphicsDevice.Clear(Color.DarkOliveGreen);
- spriteBatch.Begin();
- if (gameScene.name == "game")
- {
- foreach (var gameObject in bulletObjects)
- {
- gameObject.Draw(spriteBatch);
- }
- foreach (var gameObject in gameObjects)
- {
- gameObject.Draw(spriteBatch);
- }
- foreach (var scenicObject in scenicObjects)
- {
- scenicObject.Draws(spriteBatch);
- }
- }
- foreach (GameObjects.Buttons btn in buttonObjects)
- {
- btn.Update(); // Обновляем состояние кнопки
- if (btn.pressed)
- {
- if (btn.name == "start") // Если мы нажали на кнопку "Начать игру", то можно уже отрисовывать другие объекты
- {
- gameScene.name = "game";
- btn.enabled = false;
- }
- }
- if (btn.enabled)
- {
- btn.Draw(spriteBatch);
- }
- }
- if (gameScene != null && gameScene.name == "game")
- {
- this.IsMouseVisible = false;
- }
- else
- {
- spriteBatch.Draw(blue_cursor.Texture, cursor_coords, Color.White); // Рисуем курсор
- }
- spriteBatch.End();
- base.Draw(gameTime);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement