С одной стороны, можно сделать лазанью, используя шаблонный полуфабрикат, с другой — такой подход малопригоден при обучении будущих поваров.

Для старта скачаем последнюю редакцию Visual Studio 2010 (бесплатная версия Express доступна по адресу www.microsoft.com/express/downloads/)

Впрочем, начинать программировать можно и на Visual Basic. Главное, не отвлекаться на графический интерфейс и создавать первые программы в виде консольных приложений. Учебники и самоучители, посвященные программированию в консоли, вы вряд ли найдете, и потому мы постараемся научить вас его азам на страницах нашего журнала. Причем в понятном формате.

Для старта скачаем последнюю редакцию Visual Studio 2010 (бесплатная версия Express доступна по адресу www.microsoft.com/express/downloads/) и установим на пользовательский ПК. Мы начнем знакомиться с классическими алгоритмическими конструкциями на примере игры «Угадай-ка». Пусть компьютер загадывает число от до 100, а вы попытаетесь его угадать за семь попыток. Домашний ПК будет вам помогать фразами «перелет» и «недолет».

Итак, «Пуск •Программы • Microsoft Visual Studio 2010 Express • Microsoft Visual Studio 2010 Express». В открывшемся окне идите в меню «Файл», укажите пункт «Создать проект» и в раскрывшемся списке выберите строку «Консольное приложение». Задайте имя проекта (по умолчанию — ConsoleApplication1). И даже здесь вы увидите четыре «бесплатные» строки будущей программы:

Module Module1

Sub Main ()

End Sub

End Module

Теперь в главную процедуру (между второй и третьей строками) вставьте код нашей игры — чуть ниже мы его разберем по частям (см. листинг).

В этом месте неискушенный новичок покрутит пальцем у виска, а бывалый программист искренне улыбнется. Цифры слева — это классика. Строки кода на языке Бейсик нумеровались с 1964 г., когда в первом руководстве по языку программирования Beginner's All Purpose Symbolic Instruction Code (BASIC) были представлены три команды:

10 LET X= (7+8) / 3

20 PRINT X

30 END

Сейчас это скорее атавизм, а в прошлом веке наличие строковой нумерации обусловливалось определенными целями. Мы же будем использовать ее, чтобы было удобнее разбирать код по кирпичикам.

Строка 10. С помощью оператора DIM объявляются имя и тип одной или нескольких переменных. В данном случае мы объявили три целочисленных переменных: i — будем использовать в цикле; n — загаданное число; p — наши варианты загаданного числа.

Строки 20 и 30 мы объясним в паре. Функция RND () возвращает случайное вещественное число (типа Single) в диапазоне от до 1. Мы умножили случайное число на 100, чтобы расширить диапазон от до 100. А вот функция Math.Round (), по сути, лишняя в нашей программе, но все же пусть будет. Она округляет получившееся число до целого значения. Однако переменная n объявлена как целочисленная, а значит, при выполнении программы дробная часть загаданного числа обрезалась бы автоматически. Функция Randomize () инициализирует генерацию случайных чисел, иначе задуманное число всегда будет одним и тем же.

Строки 40 и 50 обеспечивают вывод приветственных фраз на экран в консольном режиме.

Строки с 60 по 180 ключевые в нашем коде — это циклическая конструкция. Команды с 70 по 170 называются телом цикла. Нашему циклу суждено повториться 7 раз — те самые 7 попыток отгадать задуманное число. С каждым проходом (итерацией) цикла значение счетчика i будет увеличиваться с 1 до 7 в строке 180. Причем значение переменной i будет играть важную роль в строке 190, но об этом чуть позже.

Обратите внимание на уже знакомый оператор в строке 80. Здесь выводимая строка формируется динамически, в зависимости от значения переменной i. А функция Str (i) превращает числовую переменную в обычную строку, чтобы появилась информативная фраза «Это твоя 1‑я попытка. Вводи число:».

Пользователь вводит значение в переменную p в 90‑й строке. Если здесь ввести не число, а какой-либо другой символ, получится ошибка. В дальнейшем мы будем учиться обрабатывать подобные варианты событий, а пока не станем останавливаться на этом.

Конструкция с 100‑й по 170‑ю строку называется ветвлением. В зависимости от выполнения того или иного условия осуществляются те или иные команды. Допустим, вы угадали и введенное p равняется задуманному n. Тогда компьютер выполнит операторы из 110‑й и 120‑й строк. Кстати, команда Exit For нужна, чтобы в случае победы завершить выполнение запущенного цикла 60–180 и передать управление оператору в строке 190.

Строка 140 будет задействована в работе алгоритма, если введенное p окажется больше задуманного n. А строка 160 исполнится, если введенное p окажется меньше задуманного n. Правда, все просто?

Конструкция с ветвлением в строках со 190‑й по 220‑ю сработает, если на выходе с цикла значение счетчика i будет равно 8. Поясним: если бы вы угадали задуманное число на последней, 7‑й, попытке, то значение i равнялось бы 7. А если оно равно 8, то, значит, цикл завершился сам собой, «счастливый» оператор Exit For из строки 120 не выполнялся.

Ну и последний оператор из строки 230 ожидает ввода в консоль любого одного (!) символа. Если бы не он, то написанное консольное приложение отработало бы без ошибок и сразу же закрылось. Кстати, попробуйте вместо Console.ReadKey () написать оператор GoTo 30. Запустите отладку приложения клавишей . Что получилось в итоге? Если что-то не поняли, встаньте курсором на GoTo и нажмите клавишу  — «Помощь» вам в помощь.

А в следующий раз мы запрограммируем еще более интересную консольную игру.