C#. Использование System.Console для создания игр в текстовом режиме. Часть 3
Продолжение статьи…
Часть 1
Часть 2
Главный цикл
Есть еще одна вещь, о которой вы должны знать, когда будете создавать игру, которая будет работать в окне консоли: главный цикл. Все игры обычно имеют основной цикл, который работает пока игра не завершится. Вот полезные шаблоны, которые можно использовать в главном цикле программы:
- Console.CancelKeyPress делает курсор невидимым. Таким образом, вас не будет раздражать мерцание;
- событие Console.CancelKeyPress возникает, когда пользователь нажимает Ctrl-C, но только если свойство Console.TreatControlCAInput не установлено в true;
- смотрите комментарии к коду статьи для получения больше информации, как обрабатывать событие CancelKeyPress;
- вызов System.Threading.Thread.Sleep() в главном цикле добавляет небольшую задержку, а также разгружает ваш процессор;
- устанавливайте свойство Console.KeyAvailable в true, если хотите принимать сообщения с клавиатуры. Таким образом, вы сможете прочитать его с помощью метода Console.ReadKey();
Посмотрите на комментарии к следующему коду, которые описывают, где происходит инициализация игры, а где пользовательский ввод и обновление экрана:
/// <summary>
/// Установите это статическое поле в true для выхода из игры
/// </summary>
static bool quit = false;
/// <summary>
/// Точка входа, инициализация игры и старт основного цикла
/// </summary>
static void Main(string[] args)
{
// Будьте уверены, что пользователь нажмет Ctrl-C для выхода из игры
// Установите Console.TreatControlCAsInput в true если хотите использовать Ctrl-C как допустимое входное значение
Console.CancelKeyPress += new ConsoleCancelEventHandler(Console_CancelKeyPress);
Console.CursorVisible = false;
/*** Инициализация игры! ***/
MainLoop();
}
/// <summary>
/// Обработка нажатия Ctrl-C
/// </summary>
static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
// К сожалению, в связи с ошибкой в .NET Framework v4.0.30319 вы не можете олаживать это
// потому что Visual Studio 2010 выдает ошибку "No Source Available".
// http://connect.microsoft.com/VisualStudio/feedback/details/524889/debugging-c-console-application-that-handles-console-cancelkeypress-is-broken-in-net-4-0
Console.WriteLine("{0} hit, quitting...", e.SpecialKey);
quit = true;
e.Cancel = true; // Установка в true позволяет на закрывать программу сразу
}
/// <summary>
/// Главный цикл игры
/// </summary>
static void MainLoop()
{
int elapsedMilliseconds = 0;
int totalMilliseconds = TIME_LIMIT_SECONDS * 1000;
const int INTERVAL = 100;
while (elapsedMilliseconds < totalMilliseconds && !quit)
{
// Задержка на определенный период
Thread.Sleep(INTERVAL);
elapsedMilliseconds += INTERVAL;
/*** Обновление экрана! ***/
}
Console.WriteLine("Игра окончена!");
}
Популярность: 10%
мото ДнепропетровскC#. Использование System.Console для создания игр в текстовом режиме. Часть 2
Продолжение статьи…
Часть 1
Специальные символы
Посмотрите еще раз на скриншот из Snipes. Вы обратили внимание, какие линии, кружочки, треугольники, прямоугольники и улыбающиеся лица? Это ведь не буквы и цифры! Как же так?
Давайте проведем эксперимент. Если вы уже открыли окно командной строки, откройте меню Windows, кликнув мышкой на значок «c:\» в верхнем левом углу и выберите «Свойства». Вы увидите, что командная строка обычно использует шрифт Lucida Console. Откройте таблицу символов «Пуск >> Выполнить >> charmap.exe» (Start >> Run >> charmap.exe) и выберите из списка шрифтов шрифт Lucida Console. Прокрутите список символов до греческих букв и сделайте двойной щелчок по одной из них (например, по символу зета Θ), таким образом, этот символ появится в текстовом поле «Для копирования». Далее прокрутите список до кириллических символов и выполните двойной щелчок на одном из них (например, на Ж). Нажмите кнопку «Копировать» для копирования текста в буфер обмена. Теперь вернитесь в командную строку, снова откройте меню и выберите «Изменить >> Вставить» (Edit >> Paste). Обратите внимание что получилось:
![]()
Символ зета вставился правильно, но вместо буквы «Ж», вставился знак вопроса (прим. переводчика: это актуально только для машин без настройки кириллицы). Это происходит, потому что консоль MS-DOS и все его потомки, могут отображать только 250 символов. Так как, изначально использовалась кодировка ASCII, которая содержит 255 символов, 250 из которых видимые и плюс 6 непечатаемых: сигнал, горизонтальное табулирование, null, возврат на один символ, перевод строки и перевод каретки. Сейчас они представлены в кодировке Unicode 437. Если вы являетесь читателем Head First C#, вы можете узнать из 9-ой главы, как использовать Unicode. Но если нет, не волнуйтесь – все, что нужно знать это то, что вы можете преобразовывать значение байт (от 0 до 255) в символы MS-DOS ASCII.
Читать далее »
Популярность: 12%
все для ремонта КировоградC#. Использование System.Console для создания игр в текстовом режиме. Часть 1
От переводчика
Когда я наткнулся на статью об использовании класса System.Console, мне сразу понравилась форма, в которой автор излагал свои мысли. Статья предлагает окунуться в разработку текстовых игр, так, как это делали в 80-е годы, но уже современными средствами (C#, .NET), и на примере игры WordFinder, разобраться, какие инструменты доступны разработчику для создания консольных приложений. Я решил сделать перевод статьи и поделиться ею с вами. Для лучшего понимания статья разбита на 3 части. Все комментарии к исходному коду были переведены на русский язык.
Введение
Я отношу себя к молокососам старой школы игр, которые работают в текстовом режиме. Эти игры работают в консоли и отображают свою «графику» в виде символов, которые расположены в разных местах экрана, используя при этом всего 16 цветов. Кроме того, такие игры легко создавать в C# и .NET используя класс System.Console, который позволяет позиционировать курсор, делать анимацию, перемещая блоки буфера, использовать цвета и специальные символы, а также реагировать на действия пользователя. В этой обучающей статье, я ознакомлю вас со всеми инструментами для создания игр в ретро MS-DOS стиле, включая завершенную игру, которую вы сможете создать сами.
После того, как я написал книгу Head First C# я точно понял одно, что создание игры является отличным способом, чтобы улучшить ваши навыки на C#. Я приложил много усилий, чтобы помочь людям выучить C# и я часто получаю вопросы типа: «Что я должен делать, чтобы получать опыт?». Я думаю имеет смысл создавать игры в виде больших проектов для обучения и экспериментов, потому что вы начинаете с хорошим представлением о том, что вы будете делать. Так одной из целей данной статьи – дать вам что-то новое и интересное. Я надеюсь, что это лучший способ получения большого опыта и оттачивания навыка разработки на C#.
Читать далее »
Популярность: 17%
C#. Асинхронный вызов метода используя делегат BeginInvoke и шаблон EndInvoke
Введение
В этой статье мы разберем несколько возможностей вызова метода асинхронно используя делегаты. Существует четыре различных способа асинхронного вызова метода используя методы BeginInvoke() и EndInvoke() класса Delegate. Эти четыре различных способа используют шаблон EndInvoke, WaitHandle, шаблон Polling и шаблон CallBack. В этой статье мы, также разберем шаблон EndInvoke. В последующих статьях мы уделим внимание шаблонам Polling и CallBack.
Читать далее »
Популярность: 27%
Обновление dbFacade для MSSQL
Важная мелочь.
Версия 0.5.8 для MSSQL
- Исправлена ошибка, когда при пустом условии в методе FetchAll подставлялось WHERE (спасибо Александру).
Спасибо, что вы пользуетесь моими проектами. Надеюсь, они помогут вам в работе
Популярность: 3%
Учет времени 1.1
Мелкие доработки и исправление ошибок:
- Кнопка «удалить запись» в режиме истории
- Исправлена ошибка, когда после полной остановки горячими клавишами нажималась пауза, хотя она была неактивна
- Ошибка при повторном добавлении записи (время записывалось как 0 сек)
- В режиме истории общее время обновляется при удалении и при применении фильтра
- В редакторе групп не всегда можно было изменить название существующей группы. Исправлено
А вот здесь можно посмотреть мебель
Популярность: 4%
Учет времени 1.0
Написал еще одну программу. На этот раз для учета затраченного времени. Позволяет фиксировать затраченное время на выполнение какого-либо действия. К примеру, вы всегда будете в курсе сколько примерно времени требуется вам на написание статьи или на смазку цепи на вашем велосипеде. Вам поручают выполнить какую-то работу — написать скрипт, нарисовать иконку, исправить текст на сайте… Вы всегда будете знать сколько времени было затрачено и на будущее уже прикидывать примерную стоимость данной работы.
Программа ведет историю и подсчитывает суммарные затраты. Больше о возможностях читайте в справке к программе.
Читать далее »
Популярность: 4%
Excel и C#. Как получить количество страниц? Как использовать макросы?
Как-то у меня возникла потребность в получении количества страниц в документе Excel. И, конечно, программным способом. Как оказалось, в Excel нет функции как Word, которая однозначно возвращает количество страниц для печати. Это обусловлено спецификой документа. В итоге я нашел два способа определения количества страниц. Оба способа все равно не дают 100% результата. По крайней мере в Excel 2003.
Все манипуляции я буду проводить с установленным Microsoft Office 2003. Для других версий думаю все аналогично.
Читать далее »
Популярность: 10%
Сборщик PDF 1.7.3
Небольшие, но интересные обновления:
- Разбивать файлы можно по заданному количеству страниц
- При разбитии можно проставлять номера страниц (в этой версии только справа снизу)
- В пакетной обработке при копировании файлов в другую директорию, имя файла можно задать числовой итерацией (полезно, когда файлы находятся в разных директориях и нужно сохранить их порядок)
Популярность: 5%
C# без точки с запятой
Как-то я предлагал вам решить следующую задачу — написать код на C#, в исходниках которого не встречалась бы точка с запятой. С этой задачей справился пользователь Artyom:
namespace UnSemicolon
{
class Program
{
static void Main(string[] args)
{
while (System.Windows.Forms.MessageBox.Show("Hello World") == System.Windows.Forms.DialogResult.None)
{ }
}
}
}
Вы можете присылать мне еще ваши решения. Или оставлять их в комментариях к этой статье.
Также, вы можете заказать бронедвери.
Популярность: 4%
Шаблон программы «Юный программист»
Каждый раз, как начинаю писать новую программу, приходится рыскать по своим многочисленным проектам в поисках кода, чтобы не писать все заново. Надоело. Решил создать стартовый проект, который бы содержал самые основные и чаще встречающиеся функции. Некоторые части кода были вымучены и отточены в нескольких проектах. Вот поэтому и занимаюсь копи-пастингом готового кода. Еще одна проблема, что не всегда удается вспомнить в каком проекте мучал ту или иную функцию.
Вы можете мне посоветовать хранить часто используемые куски кода в библиотеке. Но нет, это не подходить. Нужен шаблон, в котором все нужные функции были бы взаимосвязаны. Т.е. это и переписанный файл program.cs, и общие namespace для всех файлов, и заточенные формочки для проекта, и прописаны минимальные события. Отдельными кусками в общем не обойтись.
Решение пришло следующее: написать проект, впихнуть в него необходимые файлы с классами. Затем настроить, подготовить, обточить.
Полученный проект я назвал «Юный программист». Ну чтобы веселее было… Шаблон? Это банально, скучно и для тех, у кого борода до клавы достает.
Читать далее »
Популярность: 6%
Тест Конкони. Определение лактатного порога
Вы хотите достичь высоких результатов в спорте? Постоянно вываливать лосей марафона? Но, если вы шахматист, дальше можно не читать, а просто скачать вот эти программы. Остальные же качают мою программу «Тест Конкони». Эта программа позволяет построить график по данным одноименного теста. Цель теста заключается в определении анаэробного(лактатного) порога. Зная этот порог, вы сможете грамотно планировать свои тренировки (как именно? Это уже другая тема). Чем выше лактатный порог, тем больше выносливость и способность организма переносить высокие нагрузки продолжительное время. Больше по этой теме читайте в интернете. А теперь о самой программе.
Немного истории о развитии программы
В 2005 с трудом удалось написать первую версию программы. Программа была нужна, т.к. тест «Конкони» проводили часто, чтобы понять какой эффект дали проделанные ранее тренировки. Пытались строить графики тогда еще в Excel 2000. Многое не удавалось сделать так, как хотелось. Поэтому в 2003 году, толком не зная программирования я сел писать программу на Delphi. И постепенно более-менее удачный вариант удалось сделать только к 2005 году. Строились графики, находились ошибки, шло время. Потом я перестал тренироваться и необходимость в этой программе отпала, но ей активно пользовались другие люди, собирались данные. Были определенные недоработки, поэтому желание переписать заново и сделать ее лучше было давно.
Популярность: 11%


