Справочник по goto-ориентированному C++

Я знаю, все вы, и особенно alebaster, с нетерпением ждали этого момента! Я публикую последнюю из серии программу на goto-ориентированном C++ и справочник, содеражщий исчерпывающие сведения о goto-ориентированном C++.

Программа "Звездное небо"

1 w: 2 int x = Random32(0, 31); 3 int y = Random32(0, 17); 4 At(x, y); 5 int s = Random32(0, 20); 6 if (s < 3) { 7 Print("."); 8 } 9 if (s == 3) { 10 Print("*"); 11 } 12 if (s > 3) { 13 Print(" "); 14 } 15 Sleep(0.1); 16 Show(); 17 goto w;

Блок-схему программы можно изобразить следующим образом:

Справочник по goto-ориентированному C++

Вместо построчного разбора, как и обещано, прилагаю краткий справочник по всем необходимым для создания игр ключевым словам C++ и функциям Arctic Engine.

At(x, y);
Функция задает знакоместо для вывода данных в Print и Input. Параметр x определяет номер столбца, а параметр x - номер строки.

Beep(t, h);
Функция генерирует звук длительностью t (в секундах) и высотой h (в полутонах). Число h = 0 соответствует ноде «до» первой октавы.

Circle(x, y, r);
Функция строит на экране окружность радиуса r, центр которой имеет горизонтальную координату x, а вертикальную - y.

Cls();
Функция очищает экран и окрашивает его в текущий цвет бумаги.

Draw(x, y);
Функция строит на экране отрезок прямой линии. Конец отрезка будет в пикселе с координатами x по горизонтали и y по вертикали.

goto h;
Оператор безусловного перехода на строку с меткой h.

h:
Метка h.

if(...) {..}
Условный оператор, условие ставится в круглых скобках за if, если условие выполняется, то управление передается на оператор (операторы), стоящий в фигурных скобках за условием. Если же оно не выполняется, то управление переходит к следующей за закрывающейся фигурной скобкой строке программы.

Ink(c);
Функция устанавливает цвет чернил, то есть цвет в который окрашиваются выводимые на экран символы, точки, линии. Код цвета должен иметь одно из целочисленных значений от 0 до 19.
Коды цветов:
0 - черный;
1 - красный;
2 - оранжевый;
3 - желтый;
4 - зеленый;
5 - голубой;
6 - синий;
7 - фиолетовый;
8 - белый;
9 - серый;
10 - прозрачный;
11 - тёмно-красный;
12 - тёмно-оранжевый;
13 - тёмно-желтый;
14 - тёмно-зеленый;
15 - тёмно-голубой;
16 - тёмно-синий;
17 - тёмно-фиолетовый;
18 - светло-серый;
19 - тёмно-серый.

Input();
Функция ввода данных в программу: возвращает строковое значение, набранное на клавиатуре.

int x;
Объявление целочисленной переменной x.

IsKey(k);
Функция проверяет, была ли за последний кадр нажата клавиша с кодом k. Коды некоторых клавиш:
4 - стрелка налево;
5 - стрелка направо;
6 - стрелка наверх;
7 - стрелка вниз;
13 - ввод;
27 - ESC;
32 - пробел.

MouseX();
Функция возвращает координату курсора мышки в окне игры по горизонтальной оси.

MouseY();
Функция возвращает координату курсора мышки в окне игры по вертикальной оси.

Number(t);
Функция принимает строковое значение t, преобразует его в числовое и возвращает результат преобразования.

Paper(c);
Функция устанавливает цвет бумаги - цвет, в который окрашивается знакоместо при выводе символа. Число c принимает целочисленное значение в пределах от 0 до 19 и является кодом цвета.

Plot(x, y);
Функция ставит на экране точку (включает пиксель). Позиция точки задается двумя целочисленными значениями координат: горизонтальной - x и вертикальной - y.

Point(x, y);
Функция считывает значение пикселя и возвращает число, кодируюущее его цвет. Числа x и y соответствуют горизонтальной и вертикальной координатам.

Print(a);
Функция выводит на экран данные - числовые или символичные значения. Блоки отображаются один за другим без пробелов, символы отделенные управляющей последовательностью символов /n отображаются с новой строки.

Random32(a, b);
Функция возвращает псевдослучайное число в интервале от a до b включительно.

Screen(x, y);
Функция возвращает строковое значение, соответствующее символу в указанном знакоместе экрана. Позиция знакоместа задается двумя целочисленными значениями: x - номер столбца, y - номер строки.

Show();
Функция показывает сформированный кадр на экране и получает новую порцию пользовательского ввода, произошедшую за время рисования кадра.

Sleep(x);
Функция приостанавливает работу программы на время, задаваемое числовым значением x (в секундах).

string x;
Объявление строковой переменной х.

Time();
Функция возвращает время в секундах прошедшее с момента запуска программы.

Пишите в комментариях, о чем мне лучше рассказать дальше.

66
67 комментариев

Разве за goto не предают анафеме в среде разработки?

Ответить

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

Что характерно, примеры "против goto" даются с плохо сделанным кодом. Стоит ли говорить что наговнокодить можно на всём?)

3
Ответить

а ChatGPT разве не делает это?

Ответить

Человек Pavel Pavlovich наверное хотел на самом деле задать другой вопрос: "Разве эта программа написана не ChatGPT?". И ответ на вопрос человека тогда был бы: "Думаешь, если бы этот ответ писал не человек а ChatGPT, ответ был бы другим?"

1
Ответить

А можешь написать, чем goto здесь лучше оператора цикла, for(;;) или while(true) ?

Ответить

Здесь - вообще ничем, разница есть например в игре "программирование робота" вот отсюда:
https://dtf.ru/u/541204-huldra/1641083-dlya-sozdaniya-igr-na-c-dostatochno-znat-vsego-3-klyuchevyh-slova-i-dvoetochie

Ответить

Кстати, а не хочешь написать статью про абсолютно оправданное и полезное использование гоутухи? Ну в контексте игровой разработки, а не каких-нить микриков.

Ответить