C#. Использование System.Console для создания игр в текстовом режиме. Часть 3

Продолжение статьи…
Часть 1
Часть 2

Главный цикл

Есть еще одна вещь, о которой вы должны знать, когда будете создавать игру, которая будет работать в окне консоли: главный цикл. Все игры обычно имеют основной цикл, который работает пока игра не завершится. Вот полезные шаблоны, которые можно использовать в главном цикле программы:

Посмотрите на комментарии к следующему коду, которые описывают, где происходит инициализация игры, а где пользовательский ввод и обновление экрана:

/// <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#

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#

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#

C#. Асинхронный вызов метода используя делегат BeginInvoke и шаблон EndInvoke

Введение

В этой статье мы разберем несколько возможностей вызова метода асинхронно используя делегаты. Существует четыре различных способа асинхронного вызова метода используя методы BeginInvoke() и EndInvoke() класса Delegate. Эти четыре различных способа используют шаблон EndInvoke, WaitHandle, шаблон Polling и шаблон CallBack. В этой статье мы, также разберем шаблон EndInvoke. В последующих статьях мы уделим внимание шаблонам Polling и CallBack.

Читать далее »

Популярность: 27%

C#

Обновление dbFacade для MSSQL

Важная мелочь.
Версия 0.5.8 для MSSQL

Спасибо, что вы пользуетесь моими проектами. Надеюсь, они помогут вам в работе :)

Популярность: 3%

Новости, Проекты

Учет времени 1.1

Мелкие доработки и исправление ошибок:

А вот здесь можно посмотреть мебель

Популярность: 4%

Новости, Проекты

Учет времени 1.0

Написал еще одну программу. На этот раз для учета затраченного времени. Позволяет фиксировать затраченное время на выполнение какого-либо действия. К примеру, вы всегда будете в курсе сколько примерно времени требуется вам на написание статьи или на смазку цепи на вашем велосипеде. Вам поручают выполнить какую-то работу — написать скрипт, нарисовать иконку, исправить текст на сайте… Вы всегда будете знать сколько времени было затрачено и на будущее уже прикидывать примерную стоимость данной работы.

Программа ведет историю и подсчитывает суммарные затраты. Больше о возможностях читайте в справке к программе.

Читать далее »

Популярность: 4%

Проекты

Excel и C#. Как получить количество страниц? Как использовать макросы?

Как-то у меня возникла потребность в получении количества страниц в документе Excel. И, конечно, программным способом. Как оказалось, в Excel нет функции как Word, которая однозначно возвращает количество страниц для печати. Это обусловлено спецификой документа. В итоге я нашел два способа определения количества страниц. Оба способа все равно не дают 100% результата. По крайней мере в Excel 2003.

Все манипуляции я буду проводить с установленным Microsoft Office 2003. Для других версий думаю все аналогично.

Читать далее »

Популярность: 10%

C#

Сборщик 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%

C#

Шаблон программы «Юный программист»

Каждый раз, как начинаю писать новую программу, приходится рыскать по своим многочисленным проектам в поисках кода, чтобы не писать все заново. Надоело. Решил создать стартовый проект, который бы содержал самые основные и чаще встречающиеся функции. Некоторые части кода были вымучены и отточены в нескольких проектах. Вот поэтому и занимаюсь копи-пастингом готового кода. Еще одна проблема, что не всегда удается вспомнить в каком проекте мучал ту или иную функцию.

Вы можете мне посоветовать хранить часто используемые куски кода в библиотеке. Но нет, это не подходить. Нужен шаблон, в котором все нужные функции были бы взаимосвязаны. Т.е. это и переписанный файл program.cs, и общие namespace для всех файлов, и заточенные формочки для проекта, и прописаны минимальные события. Отдельными кусками в общем не обойтись.

Решение пришло следующее: написать проект, впихнуть в него необходимые файлы с классами. Затем настроить, подготовить, обточить.

Полученный проект я назвал «Юный программист». Ну чтобы веселее было… Шаблон? Это банально, скучно и для тех, у кого борода до клавы достает.

Читать далее »

Популярность: 6%

C#

Тест Конкони. Определение лактатного порога

Вы хотите достичь высоких результатов в спорте? Постоянно вываливать лосей марафона? Но, если вы шахматист, дальше можно не читать, а просто скачать вот эти программы. Остальные же качают мою программу «Тест Конкони». Эта программа позволяет построить график по данным одноименного теста. Цель теста заключается в определении анаэробного(лактатного) порога. Зная этот порог, вы сможете грамотно планировать свои тренировки (как именно? Это уже другая тема). Чем выше лактатный порог, тем больше выносливость и способность организма переносить высокие нагрузки продолжительное время. Больше по этой теме читайте в интернете. А теперь о самой программе.

Немного истории о развитии программы

В 2005 с трудом удалось написать первую версию программы. Программа была нужна, т.к. тест «Конкони» проводили часто, чтобы понять какой эффект дали проделанные ранее тренировки. Пытались строить графики тогда еще в Excel 2000. Многое не удавалось сделать так, как хотелось. Поэтому в 2003 году, толком не зная программирования я сел писать программу на Delphi. И постепенно более-менее удачный вариант удалось сделать только к 2005 году. Строились графики, находились ошибки, шло время. Потом я перестал тренироваться и необходимость в этой программе отпала, но ей активно пользовались другие люди, собирались данные. Были определенные недоработки, поэтому желание переписать заново и сделать ее лучше было давно.

Тест Конкони 2-я версия

Тест Конкони 2-я версия


Читать далее »

Популярность: 11%

Спорт