Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram, группа в ВКонтакте

Авторский курс yabasic от @Terrazocultor

История разработки, новости релизов и документация
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

Авторский курс yabasic от @Terrazocultor
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

8. Подарок: игра «Четыре в ряд»

Перед нами бесплатная программная платформа (YaBasic), которая, возможно, и не является последним словом в программировании, но позволит нам, во-первых, изучить основы программирования, а во-вторых, создавать небольшие (или не такие уж небольшие) действительно полезные программы, которые можно сохранять в папке.

В этой первой части я делюсь с вами программой, полностью написанной на YaBasic — языке, который мы будем использовать в этом курсе. Программа сделана в моей мастерской, терпеливо, в течение нескольких недель, без заимствования чьих-либо идей. Это на 100% творение Terrazocultor. И это игра: «Четыре в линию» (также известная как «Четыре в ряд» или Connect 4).

Играет человек (вы) против компьютера. Моей главной задачей в этой игре было «научить» машину оценивать позицию на доске, чтобы принимать решения, направленные на победу (или хотя бы не дать выиграть вам). Алгоритм не непогрешим, его можно улучшить, но стоит вам хоть немного зазеваться — и программа вас обыграет.

В этой программе были и другие небольшие сложности: например, использование мыши (не во всех Basic есть поддержка, но в YaBasic, к счастью, есть). Также пришлось использовать графический режим: нарисовать доску, передать ощущение движения фишек при падении, постоянно проверять, не выиграл ли человек или машина (возможна и ничья). В программе более 3500 строк, из которых около 500 строк — комментарии и пустые строки-разделители (они очень нужны для документирования программы). Тем не менее остаётся более 3000 строк чистого кода.

И ещё кое-что для пуристов: ¡¡ НИ ОДНОГО GOTO !!

Этой программой я хочу показать, что на YaBasic можно делать интересные вещи. Программа не является чем-то совершенным, ладно, но имейте в виду, что можно создавать гораздо более мощные и сложные вещи. Если эта программа состоит примерно из 3 500 строк кода, представьте, что можно сделать с 90 000 строк.

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

Исходный код программы прилагается к этой же странице Patreon, откуда вы скачали этот пост.

Чтобы запустить любую программу YaBasic, дважды щёлкните по значку.

Не бойтесь вирусов. Исходный код программы на Basic никогда не может содержать вирусов.

Вы можете экспериментировать с программой и изменять её. Если она сотрётся или что-то случится, вы можете скачать её сколько угодно раз. Я только прошу уважать строки программы, где говорится об авторстве, а в остальном можете делать с программой всё, что хотите.

Наконец, что касается авторских прав на YaBasic (и программы, которые вы на нём создаёте): если заглянуть в справочное руководство, там условия более чем хорошие — предоставляются полные права, даже на использование программ в коммерческих целях.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

1. Текстовый режим

Что касается отображения информации на экране или мониторе, существуют два основных режима: текстовый режим и графический режим. Из предыдущей главы мы уже знаем, что Yabasic поддерживает оба типа. Простые упражнения мы выполняли в текстовом режиме, а программа «Четыре в ряд» сделана в графическом режиме.

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

В текстовом режиме экран делится не на пиксели, а на символы, на строки (горизонтальные) и столбцы (вертикальные). Пересечение строки и столбца — это небольшой прямоугольник, в котором помещается один символ или знак: буква, цифра или знак препинания. То есть можно считать, что экран организован в виде своеобразной сетки, и в каждой ячейке может находиться (или не находиться) символ.

В информатике под символом понимается письменный знак:
  • буква, в том числе из «других» языков;
  • цифра от 0 до 9;
  • знаки препинания, например: : , “ ¨ ; ¿ ¡
  • математические символы: + - * ^ / % ( =
  • специальные символы, графические символы: µ ╔ ═ ╗ ╝ ß § ¸ ° ¨ ▓ │ ▒
Каждый символ кодируется 8 битами (1 байт) согласно коду, который называется «код ASCII» и имеет огромное значение в информатике. Мы рассмотрим его в конце этой главы.

Существуют разные текстовые режимы — с большим или меньшим числом строк, с большим или меньшим числом столбцов.

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

Один из наиболее часто используемых текстовых режимов — 80 столбцов на 25 строк. Он позволяет отобразить на экране 25 горизонтальных строк по 80 символов в каждой. Итого 25 × 80 = 2000 символов. Поскольку каждый символ занимает один байт, полный экран занимает 2000 байт, то есть чуть меньше 2 Кбайт (в режиме 80×25). В принципе, когда мы будем использовать текстовый режим, мы будем использовать именно 80×25.

Сейчас, когда всё делается в графическом режиме и текстовый режим почти не используется, многие забыли (или не знают) о проблеме с последней строкой, 25-й, самой нижней на экране. Когда эта строка использовалась обычным образом, экран «прокручивался» (содержимое сдвигалось вверх) и портил формат экрана. Многие игнорировали эту строку, не использовали её, чтобы избежать этой досадной неприятности… тем самым теряя 4% экрана.

Будь то графический или текстовый режим, нижняя часть экрана или монитора кажется мне идеальным местом для так называемой «строки состояния», в которой перечислены доступные команды, а также индикаторы и важная информация приложения. Примерно так:

Код: Выделить всё

F1 Справка F7 Добавить Enter Просмотр/Изменение F9 Удалить F10 Отчёты *** A On
Мы используем один приём, чтобы обойти ограничение на использование 25-й строки.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

2. Настройка текстового окна

В некоторых диалектах Basic размер текстового окна можно настроить из самой программы, но я не припомню, чтобы видел что-то подобное в YaBasic (1), поэтому нам придётся делать это вручную после запуска приложения. Это очень просто:

В верхнем левом углу щёлкаем правой кнопкой мыши и выбираем «Свойства».

left.jpg
Откроется другое окно, и мы увидим несколько вкладок (в моём случае пять — это зависит от версии операционной системы).

right.jpg
Выбираем вкладку «Расположение» и переходим к «Размер окна», где, как видите, указано:
  • Ширина: 80
  • Высота: 25
Если цифры другие, измените их: Ширина 80, Высота 25. В моём случае эти значения уже стоят: правильно, оставляю как есть, и нажимаем в диалоговом окне «ОК».

Мы выбрали размер окна.

(1) Примечание: Зато мы можем узнать текущий размер текстового окна с помощью оператора peek и параметров ScreenWide и ScreenHeight.

Давайте проверим, действительно ли на текстовом экране помещаются эти 80 × 25 символов.
Для этого используем небольшую программу, которая заполнит экран посчитанными символами. Это лучше посмотреть в видео. Также в этой же главе мы рассмотрим несколько команд Basic, чтобы начать заниматься практическим программированием «по-настоящему».
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

3. Команда CLEAR SCREEN

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

Хорошей практикой является очистка экрана сразу же после запуска любой программы.

В одной и той же программе может потребоваться очищать экран многократно.

Кроме того, очистка экрана не только желательна, но и необходима во многих случаях, поскольку для выполнения некоторых других продвинутых операторов необходимо хотя бы один раз выполнить команду Clear Screen. В противном случае мы получим ошибку, и программа остановится.

Пользуясь случаем, скажу по поводу этого первого оператора Basic: мы не сломаем компьютер из-за ошибки программирования. Опытному программисту это может показаться смешным, но ему стоит вспомнить, как он сам начинал заниматься информатикой: этот страх разумен, и, скорее всего, он тоже его испытывал. Так вот: нет, компьютер не сломается, какими бы неумелыми мы ни были в программировании.

У команды Clear Screen нет параметров или аргументов.

Подразумевается, что Clear Screen очищает текстовый экран, а не графический.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

4. Команда PRINT

Служит для вывода на экран, на принтер или в файл.

Пока рассмотрим, как используется Print для экрана — это наиболее частый случай.

Команда Print может использоваться без параметров, сама по себе. В этом случае печатается пустая строка, и курсор переходит на следующую строку. Это похоже на то, что делали старые пишущие машинки при «возврате каретки». Вот так: Другой вариант — напечатать «что-то». В этом случае это «что-то» ставится после Print. Можно напечатать одну вещь или несколько. Примеры:

Код: Выделить всё

Print "Привет, мир!!"
Это выводит на экран фразу «Привет, мир!!».

Также можно напечатать две, три и более вещей, например три вещи, разделённые запятыми:

Код: Выделить всё

Print "Привет, ", "меня зовут ", "Хосе"
Правда, то же самое можно было бы напечатать одной частью, а не тремя:
Print "Привет, меня зовут Хосе"
Оператор Print каждый раз при выводе переводит строку на экране.
И так он спускается по экрану, пока не достигнет последней строки. Тогда происходит «прокрутка»: при каждом новом выводе содержимое экрана сдвигается вверх, как бумага.

Эту тенденцию можно нарушить, поставив в конце оператора Print точку с запятой:

Код: Выделить всё

Print "Привет, мир!!";
Тогда то, что будет напечатано дальше, появится сразу после «Привет, мир!!», а не с новой строки.

КЛЮЧЕВОЕ СЛОВО «AT»

Есть ещё один, более продвинутый способ использования оператора Print: указать, в каком столбце и в какой строке мы хотим разместить что-либо на экране. Например, мы хотим вывести «Привет, мир!!» примерно в центре экрана. Для этого используется вариант @ или At. Чтобы воспользоваться этой возможностью, нужно хотя бы один раз выполнить Clear Screen.

Код: Выделить всё

Print @(35,12) "Привет, мир!!"
Также можно использовать слово At вместо символа @:

Код: Выделить всё

Print At(35,12) "Привет, мир!!"
Это выведет «Привет, мир!!» в столбце 35, строке 12 — примерно в центре экрана. Это очень полезная, продвинутая возможность, позволяющая создавать хорошие программы, но её нужно использовать вместе с другими приёмами, и мы будем активно применять её позже. Сейчас достаточно знать, что она существует и как ею пользоваться.

КЛЮЧЕВОЕ СЛОВО COLOR

Ещё один способ использования команды Print — указать желаемый цвет текста и цвет фона. Если ничего не указано, используются активные цвета. Но мы можем изменить их с помощью ключевого слова Color:

Код: Выделить всё

Print Color("White","Blue") "Привет, мир!!"
Первый параметр — цвет текста, второй — цвет фона. В приведённом примере текст будет напечатан белым цветом на синем фоне.

Если указать только один цвет, он будет цветом текста. Следующий Print выводит текст жёлтым цветом:

Код: Выделить всё

Print Color("Yellow") "Привет, мир"
В одной команде Print можно объединять несколько ключевых слов. Например, At для позиционирования текста и Color для указания цвета. Пример, который помещает текст в позицию столбец 10, строка 8, с зелёным цветом текста и красным фоном:

Код: Выделить всё

Print At(10,8) Color("Green","Red") "Привет, мир!!"
Порядок ключевых слов можно менять, результат будет тем же, без ошибок:

Код: Выделить всё

Print Color("Green","Red") At(10,8) "Привет, мир!!"

Доступные цвета: White, Black, Red, Yellow, Green, Blue, Cyan, Magenta.

Команда Print очень гибкая и поддерживает ещё много всего, но пока на этом остановимся. Когда мы изучим переменные, особенно числовые, мы рассмотрим ключевое слово using, которое позволяет выводить числа в отформатированном виде: с десятичной запятой, разделителями тысяч/миллионов и т. д.

Это не одно и то же: 1000000 и 1,000,000

Второй вариант выглядит более читаемо, потому что запятая отделяет тысячи и миллионы.

Следующие две команды — CHR$ и ASC — не нужны для маленькой программы, которую мы использовали для проверки 80×25 символов экрана, и на самом деле мы их там не применяли. Но мы рассмотрим их в этой второй главе, потому что они очень полезны и необходимы для последующего раздела 7, «УГОЛОК ТЕОРИИ», посвящённого таблице ASCII.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

5. Функция CHR$()

Каждый символ, то есть каждая буква (заглавная или строчная), каждая цифра, каждый знак препинания, каждый математический знак, каждый графический символ имеет присвоенный номер — код от 0 до 255 — в таблице, называемой ASCII.

Функция CHR$() имеет только один параметр (обязательный): запрошенный числовой код, и возвращает, какой символ соответствует этому числу.

Например, если мы хотим узнать, какой символ соответствует числу 65, напишем:

Код: Выделить всё

Print CHR$(65)
A
И видим, что печатается буква A — и действительно, A является символом номер 65 в ASCII.

Если напишем:

Код: Выделить всё

Print CHR$(97)
a
видим, что теперь буква a, но строчная.

Теперь напишем:

Код: Выделить всё

Print CHR$(230)
µ
И получаем символ номер 230 — это греческая буква «мю»: µ.

Каждый уважающий себя программист должен иметь под рукой таблицу ASCII, поскольку она очень полезна. В «Уголке теории» этой же главы мы поговорим о таблице ASCII, и я предоставлю вам таблицу для печати. Чтобы она служила долго и не испортилась от частого использования, рекомендую её заламинировать.

Есть один приём для ввода символов, которых нет на клавиатуре: нажать клавишу ALT и, не отпуская её, набрать ASCII-код нужного символа. Когда отпустите ALT, символ напечатается. Например, с числом 201 мы получим такой символ, полезный для рисования рамок: ╔

Есть и другие подобные символы: ═ ║ ╗ ╣ ╝ — из них можно составлять довольно привлекательные рамки или формы.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

6. Функция ASC()

Эта функция обратна предыдущей — CHR$.

Если CHR$(x) сообщает, какой символ соответствует ASCII-коду x, то функция ASC(?) сообщает ASCII-код, соответствующий символу ?.

У функции ASC() тоже только один аргумент, и он обязательный.

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

Примеры:

Код: Выделить всё

Print ASC("C")
67
Правильно, ASCII-код заглавной «C» равен 67.

Код: Выделить всё

Print ASC("Пепе")
80
Это возвращает значение 80 — ASCII-код буквы «П», а остальная часть строки «епе» игнорируется. То есть если в качестве параметра указана строка, а не одиночный символ, вычисляется только ПЕРВЫЙ СИМВОЛ этой строки.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

7. Уголок ТЕОРИИ
ТАБЛИЦА ASCII

Мы уже знаем, что информация внутри компьютера представляется числами, и по-другому быть не может. Нельзя представить, например, букву «A» в электронной схеме в том виде, как она выглядит: «A», но можно создать числовой код и присвоить букве «A» этот код. И всем остальным буквам тоже, и всем цифрам от 0 до 9 и т. д.

Так оно и есть.

Мы говорим о коде ASCII, в котором каждая буква, каждый знак имеет свой номер в этом коде.

ASCII — это аббревиатура от «American Standard Code for Information Interchange» (Американский стандартный код для обмена информацией), созданный в 60-х годах.

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

Код ASCII имеет долгую историю и испытал влияние гораздо более старых кодов, таких как код Бодо, используемый в телеграфии, и даже азбука Морзе.

В первых версиях код ASCII был основан на 7 битах, что даёт 2^7 = 128 комбинаций (от 0 до 127). Позже появились версии расширенного ASCII, в которых добавляется ещё один бит (всего 8), и теперь можно получить вдвое больше комбинаций: 2^8 = 256, благодаря чему доступно гораздо больше символов.

Наиболее используемые наборы расширенного ASCII:
  • 437 (английский)
  • 850 (вероятно, именно он установлен на вашем ПК)
  • ISO-8859-1
Структура или группировка символов в таблице ASCII следующая, выделяют 3–4 группы:
  • Группа 1: символы 0–31. Это непечатаемые символы, представляющие собой скорее действия для периферийных устройств компьютера. Например, символ номер 13 вызывает «возврат каретки» — переход на следующую строку с возвратом курсора в начало. Символ 10 вызывает перевод строки, но курсор остаётся на том же месте. То есть это управляющие символы.
  • Группа 2: символы 32–126. «Печатаемые» символы: буквы, цифры, знаки препинания, математические и графические знаки.
  • Группа 3: последний символ 127. Снова управляющий символ, нечто вроде «Delete».

    …а в расширенных 8-битных версиях:
  • Группа 4: символы 128–255. Большое количество графических символов, букв различных алфавитов; все они «печатаемые», ни один код в этой группе не является управляющим.
Таблица ASCII не является принадлежностью только Basic или какого-либо конкретного языка. Она общая для всех языков, и, несмотря на прошедшее с момента её создания время (почти 60 лет), она широко используется практически во всех компьютерах, даже самых современных — я имею в виду компьютеры «обычного» назначения.
Аватара пользователя
Anton
Site Admin
Сообщения: 165
Зарегистрирован: Чт фев 08, 2024 7:03 pm
Откуда: Москва

Re: Авторский курс yabasic от @Terrazocultor

Сообщение Anton »

Таблица ASCII для печати

Ниже представлена таблица ASCII, созданная с помощью Yabasic.
zFoto004.jpg
Это инструмент для программистов.
Распечатайте её и, рекомендую, заламинируйте, чтобы она прослужила дольше.

Как видите, коды 0–31 отображаются в виде маленького прямоугольника. Это непечатаемые коды, и во многих средах попытка их напечатать может дать странные результаты.

Код 32 — это пробел (тоже символ).

С 33 по 64 — знаки препинания, математические знаки и цифры от 0 до 9.

Символы с 65 по 90 — заглавные буквы A–Z.

С 91 по 96 — снова различные письменные знаки, например скобки.

С 97 по 122 — снова алфавит, на этот раз строчные буквы. С точки зрения информатики «A» и «a» — разные символы.

С 123 по 126 — ещё письменные знаки.

Символ 127 — нечто вроде Delete (удаление).

В нижнем блоке:

С 128 по 255 — символы с различными диакритическими знаками, специальные символы языков, например ñ и Ñ, некоторые математические знаки, хороший набор графических символов, из которых можно рисовать рамки или формы (179–206).
У вас нет необходимых прав для просмотра вложений в этом сообщении.