Разработка аналога компьютерной игры "Нейрохирург"
Определение необходимых модулей программы. Разработка алгоритмов игры. Ознакомление с процессом разработки спрайтов. Исследование файла с результатами игроков. Характеристика порядка создания загрузочного диска игры. Изучение программных средств.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 22.02.2019 |
Размер файла | 3,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования Российской Федерации Пензенский государственный университет
Кафедра «Системы автоматизированного проектирования»
Курсовая работа по курсу: «Технологии разработки программного обеспечения»
На тему: «Разработка аналога компьютерной игры “Нейрохирург”»
Выполнил: студент группы 14ВА1 Шнырева А.А.
Приняла: Эпп В.В.
Пенза 2018
Реферат
Пояснительная записка содержит листов, рисунка, используемых источника.
C#, MONOGAME, VISUAL STUDIO 2012, ООП, ОБЪЕКТЫ, КЛАССЫ, НАСЛЕДОВАНИЕ, ИНКАПСУЛЯЦИЯ, ПОЛИМОРФИЗМ, РАЗРАБОТКА, ИГРА, НЕЙРОХИРУРГ.
Цель работы: разработать аналог известной игры «Нейрохирург».
Технологии разработки: среда программирования Microsoft Visual Studio 2012, язык программирования C#, инструменты: .Net framework 4.5, MonoGame Результаты работы: была проанализирована предметная область. В соответствии с этим спроектировано и разработано приложение, содержащее меню, два игровых уровня, таблицу рекордов, результат текущего игрока, звуковое сопровождение.
1. Постановка задачи
В настоящей курсовой работе необходимо разработать аналог популярной игры «Нейрохирург».
Идея игры состоит в том, что игрок манипулирует медицинскими инструментами и взаимодействует с травмой супергероя, от чего она лечится и исчезает. Игра усложняется тем, что игрок должен успеть залечить рану до того, как закончатся баллы здоровья. Пользователь может управлять только одним инструментом.
В данной работе необходимо разработать два игровых уровня. На первом уровне игроку предлагается залечить рану, используя инструменты в любом порядке. Второй уровень усложняется тем, что инструменты необходимо использовать в определенном порядке. В случае выигрыша игроку нужно вести свое имя для занесения в таблицу рекордов.
Исходя из вышесказанного, необходимо проанализировать предметную область, спроектировать классы и их методы для соответствующих игровых объектов.
Немаловажным этапом является разработка логики (физики) игры, перемещение и взаимодействие игровых объектов.
Игра должна иметь условия победы и поражения. Требуется реализовать список лучших результатов и возможность их отображения.
Для повышения качества разрабатываемой игры следует предусмотреть аудиовизуальные эффекты: разработать игровые спрайты, анимацию и звуковое сопровождение игры.
Язык программирования: C#, MonoGame
Среда программирования: Microsoft Visual Studio 2012.
Операционная система: Windows 8.1.
Важно отметить, что C# является языком высокого уровня. Он поддерживает объектно-ориентированную методологию разработки программного обеспечения.
Так же он позволяет использовать среду выполнения .NET. MonoGame представляет кроссплатформенную OpenSource-реализацию популярного фреймворка Microsoft XNA 4, который предназначен для работы с графикой и прежде всего для создания игр. Microsoft XNA 4 позволял с помощью стандартных для платформы .NET языков C# и VB.NET относительно быстро и легко создавать сложные визуальные сцены вплоть до трехмерных игр с богатой графикой и изощренными игровыми сценариями.
В настоящее время MonoGame поддерживает следующие платформы: Xbox 360, Windows (в том числе последнюю 10-ю версию), Windows Phone, iOS, Android, Mac OS X, Linux [1].
2. Выбор решения
2.1 Проектирование структуры приложения
Структура приложения зависит от используемой технологии разработки. В данной работе использован язык программирования C# совместно с фреймворком MonoGame. Структура приложения представлена на рисунке 1.
Рисунок 1- Структура приложения
Он облегчает разработку и управление компьютерными играми, предоставляет простой в использовании конвейер содержимого, а также все функции для создания игр, работающих на различных платформах.
Основа каркаса - это класс Game, который используется, как базовый, в основе каждой игры. Класс Game содержит абстрактные методы типа - Draw, Update, LoadContent, UnloadContent, Initialize и так далее.
1 В методе Initialize() происходит инициализация используемых переменных и объектов, начального состояния игры.
2 Затем в методе LoadContent() в приложение загружаются различные ресурсы, которые применяются в игре -- аудиофайлы, файлы изображений и так далее.
3 Методы Update() и Draw () представляют игровой цикл. С определенной периодичностью (по умолчанию 60 раз в секунду) в методе Update() выполняется опрос игровых объектов, производятся вычисления, например позиции персонажей. Метод Draw() отвечает только за перерисовку сцен и игровых объектов. Оба метода принимают в качестве параметра объект GameTime -- он хранит время, прошедшее с начала игры.
4 При выходе из игрового цикла управление передается в метод UnloadContent(). В этом методе происходит выгрузка ранее использованных ресурсов.
5 После этого игра завершается, и приложение закрывается.
Вышеописанные методы содержатся в главном игровом классе, создаваемом изначально.
2.2 Определение необходимых модулей программы
При разработке программы использовалась концепция ООП. Предметную область необходимо разделить на классы. Классам следует определить методы, т.е. действия, которые будет выполнять определенная сущность, а также ее свойства и атрибуты.
Такой подход называет восходящим программированием. Восходящий метод проектирования алгоритмов и программ применяется для программирования задач с легко выделяемыми или известными заранее подзадачами, либо с небольшими, относительно независимыми частями, алгоритмы, для решения которых можно разрабатывать отдельно [3].
Разработка программного обеспечения включает создание большого числа классов, многие из которых являются вариантами ранее созданных классов. Для управления потенциальной сложностью такой системы необходим механизм классификации, известный как наследование. Класс A будет наследником класса B, если он наследует компоненты класса B в дополнение к своим собственным. Потомок - это прямой или непрямой наследник; обратное понятие - предок [4].
Таким образом, в первую очередь, следует создать абстрактный класс уровня и от него наследовать остальные уровни.
Помимо этого, потребуется реализовать в отдельных классах определенный функционал, связанный с работой со списком результатов и другими возможностями в игре.
3. Разработка алгоритмов игры
Основной алгоритм игры базируется на особенности работы фреймворка MonoGame. Как было отмечено ранее, в нем циклически поочередно вызываются методы Update() и Draw().
Алгоритм основывается на том, что в процессе игры возможны следующие ситуации: полное излечение, конец уровня здоровья.
Если уровень здоровья равен нулю, то игра заканчивается. В случае со вторым уровнем игра заканчивается если уровень здоровья равен нулю или игрок выберет для использования неправильный инструмент.
Ниже приведена блок-схема состояния (рисунок 2).
Рисунок 2 - Блок-схема состояния.
4 Описание разработки приложения
4.1 Разработка спрайтов
Рисунок 3 - Спрайт здорового Капитана
В данной работе были использованы спрайты супергероев с различными видами раны (рисунки3-8), спрайты медицинских инструментов (рисунки 8-12) и спрайт для фона главного меню (рисунок 13). Все они имеют прозрачный фон, что необходимо для разработки качественной игры.
Рисунок 4 - Спрайт Капитана с заживающей раной
Рисунок 5 - Спрайт Капитана с кровоточащей раной
Рисунок 6 - Спрайт Россомахи с кровоточащей раной
Рисунок 7 - Спрайт Россомахи с заживающей раной
Рисунок 8 - Спрайт здорового Россомахи
Рисунок 9 - Спрайт Лазер включен
Рисунок 10 - Спрайт Лазер выключен
Рисунок 11 - Спрайт Луч включен
Рисунок 12 - Спрайт Луч выключен
Рисунок 13 - Спрайт для фона
4.2 Разработка игровых уровней
Классы распределены по состояниям игры. Управление игровыми уровнями берет на себя сценарий GameState, наследуемый от класса State, куда передаётся уровень из сценария ChooseLevelState.
Также были созданы классы управления главным меню, таблицей рекордов, выбором уровня, окном с результатами игры.
4.3 Разработка таблицы рекордов
Таблица рекордов хранит результаты игроков, упорядочивает их и выводит на экран.
Хранение имен игроков и их результатов осуществляется через менеджер файлов. В файле scores.xml хранится имя игрока, введенное самим игроком в игре, и его результат
Рисунок 14 - Файл с результатами игроков.
Рисунок 15 - Таблица рекордов
Список легко сортируется и выводится на экран при соответствующем запросе игрока. Результат вывода рекордов на экран приведен на рисунке 15.
4.4 Разработка меню
Для разработки меню был использован спрайт (рисунок 16).
Рисунок 16 - Спрайт Меню
Для навигации были добавлены кнопки. Конечный результат показан на рисунке 17. программа спрайт файл игра
Рисунок 17 - Меню игры.
5. Тестирование приложения
После запуска приложения был выбран пункт «Новая игра» в меню. Появилось окно выбора уровней, показанное на рисунке 18.
Рисунок 18 - Ввод имени пользователя.
Далее был осуществлен переход на первый уровень. Рисунок 19
Рисунок 19- игровое окно.
Уровень был пройден, и пользователь ввел своё имя - рисунок 20.
Рисунок 20 - Пройден первый уровень.
Если уровень здоровья падает до нуля,то уровень проигран - рисунок 21.
Рисунок 21- Проигрыш
6. Создание загрузочного диска игры
Загрузочный диск был создан в программе Advanced Installer 13.7. Один из этапов создания показан на рисунке 22.
Рисунок 22- Создание загрузочного диска.
Созданный установщик выглядит следующим образом (рисунок 23).
Рисунок 23- Загрузочный диск
7. Технические и программные средства
Аппаратные требования:
- 32-разрядный (x86) или 64-разрядный (x64) процессор с тактовой частотой 1 ГГц или выше.
- 1 ГБ (для 32-разрядного процессора) или 2 ГБ (для 64-разрядного процессора) ОЗУ.
Программные требования:
- .NET Framework 4.5
- MonoGame
Заключение
Таким образом, был разработан аналог игры «Нейрохирург». Игра включает в себя два уровня: первый уровень предусматривает лечение супергероя за отведенное время при помощи двух медицинских инструментов, на втором уровне инструменты нужно брать в определённой последовательности. Созданы спрайты. Разработаны игровые объекты и логика игры. В игре присутствует звук. Имеется функция вывода результатов на экран. Для удобства навигации предусмотрено меню. Неотъемлемой составляющей является наличие условий победы и поражения.
Список использованных источников
1. [Электронный ресурс] - Режим доступа -https://metanit.com/sharp/monogame/1.1.php (Дата обращения 8.04.17).
2. Бертран М. Объектно-ориентированное конструирование программных систем / М. Бертран.-Москва: Русская Редакция, 2005 - 1204с.
3. [Электронный ресурс] - Режим доступа -http://www.codemag.com/article/1411081 (Дата обращения 8.04.17).
4. [Электронный ресурс] - Режим доступа -https://studfiles.net/preview/1382562/page:3/(Дата обращения 9.04.17).
Приложение
Класс «State»
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
namespace Neurosurgeon.States
{
public abstract class State
{
#region Fields
protected ContentManager content;
protected GraphicsDevice graphicsDevice;
protected Game1 game;
#endregion
#region Methods
//констр
public State(Game1 game, GraphicsDevice graphicsDevice, ContentManager content)
{
this.game = game;
this.graphicsDevice = graphicsDevice;
this.content = content;
}
public abstract void Draw(GameTime gameTime, SpriteBatch spriteBatch);
public abstract void Update(GameTime gameTime);
#endregion
}
}
Класс «MenuState»
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Neurosurgeon.UserInterface;
namespace Neurosurgeon.States
{
//менюшка
public class MenuState : State
{
private List<Component> components;
//констр
public MenuState(Game1 game, GraphicsDevice graphicDevice, ContentManager content) : base(game, graphicDevice, content)
{
var background = new Sprite()
{
Texture = content.Load<Texture2D>("fon"),
Position = Vector2.Zero,
};
var title = new Text(content.Load<SpriteFont>("titleFont"))
{
Position = new Vector2(350, 50),
Message = "Нейрохирург",
};
var newGameButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 130),
Text = "Новая игра"
};
newGameButton.Click += NewGameEventHandler; // обработчик события
var highscoresButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 230),
Text = "Таблица рекордов"
};
highscoresButton.Click += HighscoresEventHandler;
var quitButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 330),
Text = "Выход"
};
quitButton.Click += QuitEventHandler;
components = new List<Component>()
{
background,
title,
newGameButton,
highscoresButton,
quitButton,
};
}
//обработчики событий
//
private void NewGameEventHandler(object sender, EventArgs e)
{
game.ChangeState(new ChooseLevelState(game, graphicsDevice, content));
}
private void HighscoresEventHandler(object sender, EventArgs e)
{
game.ChangeState(new HighscoreState(game, graphicsDevice, content));
}
private void QuitEventHandler(object sender, EventArgs e)
{
game.Exit();
}
//рисуем компоненты
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
foreach (var component in components)
component.Draw(gameTime, spriteBatch);
spriteBatch.End();
}
public override void Update(GameTime gameTime)
{
foreach (var component in components)
component.Update(gameTime);
}
}
}
Класс «GameState»
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Neurosurgeon.UserInterface;
namespace Neurosurgeon.States
{
public class GameState : State
{
#region Fields
private List<DragAndDrop> instruments;
private Sprite background;
private float timePast; //здоровье
private float timeLeft; //секундомер
private int score;
private int level; //уровень
private string[] backgroundFileNames;
private Rectangle wound; //рана
private bool isLose;
#endregion
#region Methods
//конструктор
public GameState(Game1 game, GraphicsDevice graphicDevice, ContentManager content, int level) : base(game, graphicDevice, content)
{
timeLeft = 5;
timePast = 0;
score = 0;
isLose = false;
this.level = level; //уровень из ChooseLevelState
backgroundFileNames = new string[3];
if (level == 1)
{
backgroundFileNames[0] = "kep3";
backgroundFileNames[1] = "kep2";
backgroundFileNames[2] = "kep1";
wound = new Rectangle(530, 120, 100, 100);
}
else
{
backgroundFileNames[0] = "rassomaha3";
backgroundFileNames[1] = "rassomaha2";
backgroundFileNames[2] = "rassomaha1";
wound = new Rectangle(440, 150, 100, 100);
}
background = new Sprite()
{
Texture = content.Load<Texture2D>(backgroundFileNames[0]),
Position = Vector2.Zero,
};
//инструменты
DragAndDrop drel = new DragAndDrop(content.Load<Texture2D>("drel2"), content.Load<Texture2D>("drel1"), wound)
{
Position = new Vector2(10, 540),
};
drel.Heal += HealEventHandler; //обработчик события лечение
DragAndDrop luch = new DragAndDrop(content.Load<Texture2D>("Luch2"), content.Load<Texture2D>("Luch1"), wound)
{
Position = new Vector2(10, 300),
};
luch.Heal += HealEventHandler;
instruments = new List<DragAndDrop>()
{
drel,
luch,
};
}
//обработчик события лечение
private void HealEventHandler(object sender, EventArgs e)
{
//учитывая последовательность
if (level == 2 && sender != instruments[0])
{
isLose = true;
game.ChangeState(new MessageBox(game, graphicsDevice, content, isLose, level)); //и открываем окно результата
}
ChangeBackground(); //меняем капитана на здорового
score++;
}
private void ChangeBackground()
{
if (score == 0)
background.Texture = content.Load<Texture2D>(backgroundFileNames[1]);
if (score == 1)
background.Texture = content.Load<Texture2D>(backgroundFileNames[2]);
}
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
background.Draw(gameTime, spriteBatch); //фон
foreach (var instrument in instruments) //инструменты
instrument.Draw(gameTime, spriteBatch);
spriteBatch.DrawString(content.Load<SpriteFont>("buttonFont"), "Здоровье: " + timeLeft.ToString("N2"), new Vector2(10, 10), Color.White);
spriteBatch.DrawString(content.Load<SpriteFont>("buttonFont"), "Время: " + timePast.ToString("N2"), new Vector2(10, 60), Color.White);
spriteBatch.End();
}
public override void Update(GameTime gameTime)
{
if (timeLeft > 0)
{
if (score < 2)
{
timeLeft -= (float)gameTime.ElapsedGameTime.TotalSeconds;
timePast += (float)gameTime.ElapsedGameTime.TotalSeconds;
}
else
{
//Победааа
game.ChangeState(new MessageBox(game, graphicsDevice, content, isLose, level) //окно результата
{
TimeResult = timePast
});
}
}
else
{
//О нееет
isLose = true;
game.ChangeState(new MessageBox(game, graphicsDevice, content, isLose, level)); //открываем окно результата
}
//удалить использованные
for (int i = 0; i < instruments.Count; i++)
{
if (instruments[i].IsRemoved)
{
instruments.RemoveAt(i);
i--;
}
}
//обновляем инструменты
foreach (var instrument in instruments)
instrument.Update(gameTime);
}
#endregion
}
}
Класс «ChooseLevelState»
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Neurosurgeon.UserInterface;
namespace Neurosurgeon.States
{
//стейт выбора уровня
class ChooseLevelState : State
{
private List<Component> components;
public ChooseLevelState(Game1 game, GraphicsDevice graphicsDevice, ContentManager content) : base(game, graphicsDevice, content)
{
var background = new Sprite()
{
Texture = content.Load<Texture2D>("fon"),
Position = Vector2.Zero,
};
var title = new Text(content.Load<SpriteFont>("titleFont"))
{
Position = new Vector2(10, 50),
Message = "Выберите уровень"
};
var level1Text = new Text(content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(400, 130),
Message = "Используйте инструменты в\nлюбом порядке"
};
var level2Text = new Text(content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(400, 230),
Message = "Используйте инструменты в\nследующем порядке:"
};
var drel = new Sprite()
{
Texture = content.Load<Texture2D>("drel"),
Position = new Vector2(800, 280),
};
var luch = new Sprite()
{
Texture = content.Load<Texture2D>("Luch"),
Position = new Vector2(880, 240),
};
var level1Button = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(10, 130),
Text = "Уровень 1"
};
level1Button.Click += Level1EventHandler;
var level2Button = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(10, 230),
Text = "Уровень 2"
};
level2Button.Click += Level2EventHandler;
components = new List<Component>()
{
background,
title,
level1Text,
level2Text,
drel,
luch,
level1Button,
level2Button,
};
}
//обработчики событий
//первый уровень
private void Level1EventHandler(object sender, EventArgs e)
{
game.ChangeState(new GameState(game, graphicsDevice, content, 1));
}
//второй уровень
private void Level2EventHandler(object sender, EventArgs e)
{
game.ChangeState(new GameState(game, graphicsDevice, content, 2));
}
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
foreach (var component in components)
component.Draw(gameTime, spriteBatch);
spriteBatch.End();
}
public override void Update(GameTime gameTime)
{
foreach (var component in components)
component.Update(gameTime);
}
}
}
Класс «HighscoreState»
using System;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Neurosurgeon.Managers;
using Neurosurgeon.UserInterface;
namespace Neurosurgeon.States
{
public class HighscoreState : State
{
private ScoreManager score;
private Button mainMenuButton;
//конструктор
public HighscoreState(Game1 game, GraphicsDevice graphicsDevice, ContentManager content) : base(game, graphicsDevice, content)
{
score = ScoreManager.Load();
mainMenuButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 450),
Text = "Главное меню"
};
mainMenuButton.Click += MainMenuEventHandler;
}
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
spriteBatch.Draw(content.Load<Texture2D>("fon"), Vector2.Zero, Color.White);
mainMenuButton.Draw(gameTime, spriteBatch);
spriteBatch.DrawString(content.Load<SpriteFont>("titleFont"), "Таблица рекордов", new Vector2(350, 50), new Color(33, 49, 65));
//рекорды 1 уровня
spriteBatch.DrawString(content.Load<SpriteFont>("buttonFont"), "Уровень 1:", new Vector2(350, 120), new Color(33, 49, 65));
spriteBatch.DrawString(
content.Load<SpriteFont>("buttonFont"),
string.Join("\n", score.Highscores.Where(c=>c.Level ==1).Select(c => c.PlayerName + ": " + c.Time.ToString("N2")).ToArray()), //это, если что, запрос на linq
new Vector2(350, 170),
new Color(33, 49, 65));
//рекорды 2 уровня
spriteBatch.DrawString(content.Load<SpriteFont>("buttonFont"), "Уровень 2:", new Vector2(650, 120), new Color(33, 49, 65));
spriteBatch.DrawString(
content.Load<SpriteFont>("buttonFont"),
string.Join("\n", score.Highscores.Where(c => c.Level == 2).Select(c => c.PlayerName + ": " + c.Time.ToString("N2")).ToArray()),
new Vector2(650, 170),
new Color(33, 49, 65));
spriteBatch.End();
}
//обработчик события кнопки главного меню
private void MainMenuEventHandler(object sender, EventArgs e)
{
game.ChangeState(new MenuState(game, graphicsDevice, content));
}
public override void Update(GameTime gameTime)
{
mainMenuButton.Update(gameTime);
}
}
}
Класс «MessageBox»
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using Neurosurgeon.States;
using Neurosurgeon.Managers;
using Neurosurgeon.Models;
namespace Neurosurgeon.UserInterface
{
//результат игры
class MessageBox : State
{
#region Fields and properties
private List<Component> components;
private ScoreManager scoreManager;
private InputField nameInputField;
private bool isLose;
private int level;
public float TimeResult { get; set; }
#endregion
#region Methods
//констр
public MessageBox(Game1 game, GraphicsDevice graphicsDevice, ContentManager content, bool isLose, int level) : base(game, graphicsDevice, content)
{
//из GameState
this.isLose = isLose; //победа или поражение
this.level = level; //уровень
var background = new Sprite()
{
Texture = content.Load<Texture2D>("fon"),
Position = Vector2.Zero,
};
nameInputField = new InputField(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 200),
};
//кнопка - начать заново
var restartButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 200),
Text = "ОК"
};
restartButton.Click += RestartEventHandler;
var nextlevelButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 290),
Text = "Уровень 2"
};
nextlevelButton.Click += NextLevelEventHandler;
var mainMenuButton = new Button(content.Load<Texture2D>("button1"), content.Load<SpriteFont>("buttonFont"))
{
Position = new Vector2(350, 380),
Text = "Главное меню"
};
mainMenuButton.Click += MainMenuEventHandler;
components = new List<Component>()
{
background,
mainMenuButton,
};
//вин или луз
string result = "";
if (isLose) {
result = "Вы проиграли!\nПопробуйте ещe раз.";
components.Add(restartButton);
mainMenuButton.Position = new Vector2(350, 290);
}
else
{
nextlevelButton.Click += ConfirmNameEventHandler;
mainMenuButton.Click += ConfirmNameEventHandler;
result = "Вы выиграли!\nВведите ваше имя.";
components.Add(nameInputField);
if (level == 1)
{
components.Add(nextlevelButton);
}
else
{
mainMenuButton.Position = new Vector2(350, 290);
}
}
var message = new Text(content.Load<SpriteFont>("titleFont"))
{
Position = new Vector2(350, 50),
Message = result
};
components.Add(message);
}
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
//отрисовываем
foreach (var component in components)
component.Draw(gameTime, spriteBatch);
spriteBatch.End();
}
public override void Update(GameTime gameTime)
{
//обновляем
foreach (var component in components)
component.Update(gameTime);
}
// обработчики событий
//
private void ConfirmNameEventHandler(object sender, EventArgs e)
{
scoreManager = ScoreManager.Load();
scoreManager.Add(new Score()
{
PlayerName = nameInputField.Name,
Time = TimeResult,
Level = level
});
ScoreManager.Save(scoreManager);
}
private void NextLevelEventHandler(object sender, EventArgs e)
{
game.ChangeState(new GameState(game, graphicsDevice, content, level+1));
}
private void RestartEventHandler(object sender, EventArgs e)
{
game.ChangeState(new GameState(game, graphicsDevice, content, level));
}
private void MainMenuEventHandler(object sender, EventArgs e)
{
game.ChangeState(new MenuState(game, graphicsDevice, content));
}
#endregion
}
}
Размещено на Allbest.ru
...Подобные документы
Разработка компьютерной игры "Эволюция" с помощью игрового движка Unit. Сравнение критериев игры-аналога и разрабатываемой игры. Разработка графического интерфейса пользователя. Настройки камеры в редакторе Unity. Структура файла сохранения игры.
дипломная работа [3,6 M], добавлен 11.02.2017Понятие и эволюция игр, анализ их различных жанров и существующих аналогов. Выбор программных средств для реализации игры, написание сюжета и выбор среды разработки игры. Алгоритмы для придания гибкости обучающей игре. Описание программных модулей.
дипломная работа [2,7 M], добавлен 27.10.2017Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Разработка аналога игры "Крестики-нолики", где игроки выбирают размер поля. Правила игры. Интерфейс программы. Главная функция main. Класс XO. Метод вывода поля и хода игроков. Методы поиска крестиков, ноликов. Методы проверки выигрышных ситуаций игроков.
курсовая работа [281,5 K], добавлен 30.01.2018Общие сведения и существующие среды реализации компьютерной игры "Лабиринт". Разработка алгоритмов в виде блок-схемы, принципы программной реализации игры. Особенности тестирования разработанного программного продукта. Аспекты эксплуатации продукта.
курсовая работа [1,4 M], добавлен 18.01.2017Выбор программных средств для реализации игры "Угадай число". Разработка функционально-структурной схемы для написания текста программы. Изучение сути вариации алгоритма полного перебора с определённой эвристикой. Варианты компьютерной реализации игры.
контрольная работа [337,3 K], добавлен 19.06.2012Алгоритмическое представление и описание правил игры "Эволюция". Построение диаграммы прецедентов. Разработка графического интерфейса пользователя. Реализация интерфейса в среде Unity. Структура файла сохранения игры. Проектирование поведения компьютера.
дипломная работа [3,3 M], добавлен 18.02.2017Разработка и реализация компьютерной игры "Змейка" с помощью языка программирования Pascal и модуля CRT. Составление общего алгоритма программы, выделение ее функциональных частей. Разработка тестовых примеров. Использование типизированных файлов.
курсовая работа [2,1 M], добавлен 23.02.2011Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.
курсовая работа [160,3 K], добавлен 03.12.2014Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.
курсовая работа [22,6 K], добавлен 10.06.2010Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Обзор методов и средств реализации поставленной задачи. Описание компьютерной игры "Японские кроссворды". Обоснование инструментария разработки программного продукта. Алгоритмический анализ задачи. Графический интерфейс и лингвистическое обеспечение.
курсовая работа [725,4 K], добавлен 27.08.2013Разработка эскизного и технического проектов компьютерной игры "Скачки". Назначение и область применения программы. Выбор состава технических и программных средств. Составление текста программы, ее спецификация, тестирование и условия выполнения.
курсовая работа [681,4 K], добавлен 18.10.2014Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.
курсовая работа [357,1 K], добавлен 28.02.2011Ознакомление с понятием компьютерных игр и их основными жанрами. Выбор сюжета игры и среды программирования. Отрисовка графики; проведение функционального и интерфейсного тестирования программы. Анализ условий труда в данной компьютерной лаборатории.
дипломная работа [3,2 M], добавлен 13.07.2014Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.
курсовая работа [12,4 K], добавлен 18.06.2008Исследование общих правил игры в шашки, инструкции пользователя и программиста. Характеристика основных алгоритмов, исполняющих задачи класса Life Widget. Оценка ходов компьютера и человека. Построение дерева поиска лучшего хода исходя из оценки функций.
контрольная работа [1,3 M], добавлен 20.12.2012Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.
курсовая работа [1,5 M], добавлен 17.01.2011Описание правил игры "Морской бой". Особенности современных компьютеров и искусственного интеллекта. Создание общей блок-схемы программы, ее внешний вид. Необходимые переменные, процедуры и функции. Характеристика объектов, используемых в приложении.
курсовая работа [950,1 K], добавлен 05.11.2012Исследование базовых концепций программирования приложений под операционную систему Windows. Изучение истории создания универсального языка программирования Си. Разработка графического пользовательского интерфейса. Обзор правил игры и алгоритма работы.
курсовая работа [58,2 K], добавлен 09.11.2012