Advertisement
Loloped

Untitled

Jul 8th, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.33 KB | None | 0 0
  1. using Microsoft.Xna.Framework;
  2. using Microsoft.Xna.Framework.Graphics;
  3. using Microsoft.Xna.Framework.Input;
  4. using System;
  5. using System.Linq;
  6. using Game1.GameObjects;
  7. using System.Collections.Generic;
  8.  
  9.  
  10. // TODO: Корректный размер окна
  11. // TODO: Отображение жизней игрока
  12. // TODO: Враги
  13. // TODO: Отображение счётчика, сколько осталось врагов
  14. // TODO: Второй игрок (?)
  15. // TODO: Бонусы в игре
  16.  
  17. namespace Game1 // TODO Подобрать имя к игре
  18. //Когда всё сделаем, можно будет переименовать игру из Game1 в что-нибудь крутое. Например, в Dawn of Infinite Destruction. Это сокращённо DID (Daniil, Ilya, Denis). То есть скрытая аббревиатура. И вообще сейчас это низкий приоритет
  19. {
  20.     /// <summary>
  21.     /// Это главный класс игры.
  22.     /// </summary>
  23.     public class Game1 : Game
  24.     {
  25.         GraphicsDeviceManager graphics;
  26.         SpriteBatch spriteBatch;
  27.         private HashSet<ScenicObject> scenicObjects;
  28.         private HashSet<GameObject> gameObjects;
  29.         private HashSet<GameObject> bulletObjects;
  30.         private HashSet<GameObjects.Buttons> buttonObjects;
  31.         private Scene gameScene; // Состояние сцены
  32.         private Vector2 cursor_coords; // Координаты курсора
  33.         private SpriteInfo blue_cursor;
  34.  
  35.         public Game1()
  36.         {
  37.             graphics = new GraphicsDeviceManager(this);
  38.             graphics.PreferredBackBufferHeight = 417;
  39.             Content.RootDirectory = "Content";
  40.             //graphics.IsFullScreen = true;
  41.         }
  42.  
  43.         /// <summary>
  44.         /// Позволяет игре выполнить необходимую инициализацую перед запуском. Здесь игра сможет запросить любую необходимую услуги и загрузить любой не-графический контент.
  45.         /// Вызов base.Initialize выполнит пересчёт всех компонентов и вдобавок инициализирует их.
  46.         /// </summary>
  47.         protected override void Initialize()
  48.         {
  49.             // Укажите здесь вашу логику инициализации
  50.             base.Initialize();
  51.         }
  52.  
  53.         /// <summary>
  54.         /// LoadContent вызовется лишь один раз и здесь можно загрузить весь ваш контент.
  55.         /// </summary>
  56.         protected override void LoadContent()
  57.         {
  58.             // Создание нового SpriteBatch, что позволит рисовать текстуры.
  59.             // Batch (англ.) - пакет, набор.
  60.  
  61.             gameScene = new Scene("menu"); // Первоначально при запуске игры наша сцена - меню
  62.             spriteBatch = new SpriteBatch(GraphicsDevice);
  63.             var panzerSprite = new SpriteInfo
  64.             {
  65.                 Texture = Content.Load<Texture2D>("panzer2"),
  66.                 FrameWidth = 80,
  67.                 FrameHeight = 111
  68.             };
  69.             var shotSprite = new SpriteInfo
  70.             {
  71.                 Texture = Content.Load<Texture2D>("shot"),
  72.                 FrameWidth = 12,
  73.                 FrameHeight = 16,
  74.                 TimeToShot = TimeSpan.FromSeconds(1)
  75.             };
  76.  
  77.             var wallbrick = new SpriteInfo { Texture = Content.Load<Texture2D>("wall_brick") };
  78.             var wallconcrete = new SpriteInfo { Texture = Content.Load<Texture2D>("wall_concrete") };
  79.             var forest = new SpriteInfo { Texture = Content.Load<Texture2D>("forest") };
  80.             var water = new SpriteInfo { Texture = Content.Load<Texture2D>("water") };
  81.             var eagle = new SpriteInfo { Texture = Content.Load<Texture2D>("eagle32x32") };
  82.             var invisible = new SpriteInfo { Texture = Content.Load<Texture2D>("invisible") };
  83.             var start = new SpriteInfo { Texture = Content.Load<Texture2D>("start") };
  84.             blue_cursor = new SpriteInfo { Texture = Content.Load<Texture2D>("blue_cursor") };
  85.  
  86.             scenicObjects = new HashSet<ScenicObject>();
  87.             string[,] MasMapsToDraw = null;
  88.             ReaderMap.getMap(ReaderMap.Reader(MasMapsToDraw), scenicObjects, wallbrick, wallconcrete, forest, water, invisible, eagle);
  89.             GameObjects.Buttons btn_Start = new GameObjects.Buttons("start", new Rectangle(300, 200, 191, 50), false, true, start);
  90.             buttonObjects = new HashSet<GameObjects.Buttons>();
  91.             buttonObjects.Add(btn_Start);
  92.             //==========================================================
  93.  
  94.             gameObjects = new HashSet<GameObject>();
  95.             bulletObjects = new HashSet<GameObject>();
  96.             Panzer panzer = new Panzer(panzerSprite, shotSprite) // TODO Танк появляется смотрящим вниз. Надо сделать так, чтобы он смотрел вверх
  97.             {
  98.                 Position = new Vector2(150, 400), // TODO Либо у нас на всех картах будет один респавн, либо из ReaderMap как-то будем передавать сюда. Если первый вариант, то надо учесть, что игрок может нажимать на стрелочки до запуска игры в меню
  99.                 Speed = 0.1f,
  100.             };
  101.             gameObjects.Add(panzer);
  102.             bulletObjects = panzer.bulletObjects;
  103.  
  104.             // Используйте this.Content, чтобы загрузить здесь контент вашей игры
  105.         }
  106.  
  107.         /// <summary>
  108.         /// UnloadContent вызовится один раз за игру и здесь выгружается особый игровой контент.
  109.         /// </summary>
  110.         protected override void UnloadContent()
  111.         {
  112.             // Выгрузите здесь ваш не имеющий отношения к ContentManager контент
  113.         }
  114.  
  115.         /// <summary>
  116.         /// Позволяет игре использовать логику игры каждый раз при обновлении мира.
  117.         /// Например, проверка столкновений (коллизий), обработка входных данных и проигрывание аудио.
  118.         /// </summary>
  119.         /// <param name="gameTime">Provides a snapshot of timing values.</param>
  120.         protected override void Update(GameTime gameTime)
  121.         {
  122.             //if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
  123.             //    Exit();
  124.  
  125.             if (Keyboard.GetState().IsKeyDown(Keys.Escape))
  126.                 Exit();
  127.  
  128.             MouseState ms = Mouse.GetState();
  129.             cursor_coords = new Vector2(ms.X,ms.Y);
  130.             //cursor_coords.X = ms.X;
  131.  
  132.             foreach (var gameObject in gameObjects)
  133.             {
  134.                 gameObject.Update(gameTime);
  135.             }
  136.             foreach (var bo in bulletObjects)
  137.             {
  138.                 bo.Update(gameTime);
  139.             }
  140.  
  141.             base.Update(gameTime);
  142.         }
  143.  
  144.         /// <summary>
  145.         /// Вызывается, когда надо рисовать игру
  146.         /// </summary>
  147.         /// <param name="gameTime">Provides a snapshot of timing values.</param>
  148.         protected override void Draw(GameTime gameTime)
  149.         {
  150.  
  151.             GraphicsDevice.Clear(Color.DarkOliveGreen);
  152.  
  153.             spriteBatch.Begin();
  154.  
  155.             if (gameScene.name == "game")
  156.             {
  157.                 foreach (var gameObject in bulletObjects)
  158.                 {
  159.                     gameObject.Draw(spriteBatch);
  160.                 }
  161.                 foreach (var gameObject in gameObjects)
  162.                 {
  163.                     gameObject.Draw(spriteBatch);
  164.                 }
  165.                 foreach (var scenicObject in scenicObjects)
  166.                 {
  167.                     scenicObject.Draws(spriteBatch);
  168.                 }
  169.             }
  170.             foreach (GameObjects.Buttons btn in buttonObjects)
  171.             {
  172.                 btn.Update(); // Обновляем состояние кнопки
  173.                 if (btn.pressed)
  174.                 {
  175.                     if (btn.name == "start") // Если мы нажали на кнопку "Начать игру", то можно уже отрисовывать другие объекты
  176.                     {
  177.                         gameScene.name = "game";
  178.                         btn.enabled = false;
  179.                     }
  180.                 }
  181.                 if (btn.enabled)
  182.                 {
  183.                     btn.Draw(spriteBatch);
  184.                 }
  185.             }
  186.  
  187.  
  188.             if (gameScene != null && gameScene.name == "game")
  189.             {
  190.                 this.IsMouseVisible = false;
  191.             }
  192.             else
  193.             {
  194.                 spriteBatch.Draw(blue_cursor.Texture, cursor_coords, Color.White); // Рисуем курсор
  195.             }
  196.  
  197.             spriteBatch.End();
  198.             base.Draw(gameTime);
  199.         }
  200.     }
  201.  
  202. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement