BASIC-256 Глава 9
Методические материалыАвтор: Владимир Черный
Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Сергей Ирюпин.
Оглавление:
- Глава 1: Знакомство с BASIC-256 – cкажи «Привет»
- Глава 2: Рисуем основные фигуры
- Глава 3: Звуки и музыка
- Глава 4: Мыслить как программист
- Глава 5: Программа задает вам вопросы
- Глава 6: Сравнения, сравнения, сравнения
- Глава 7: Циклы и счетчики — повторяем снова и снова
- Глава 8: Графика на заказ — создание фигур своими руками
Глава 9: Подпрограммы — повторное использование кода
В это граве мы рассмотрим создание специальных меток в коде и переход к этим меткам. Это позволит программе выполнять код в более сложном порядке. Мы также познакомимся с подпрограммами. Обращение к подпрограмме, gosub, действует подобно переходу к метке, но при этом с возможностью вернуться назад.
Метки и оператор goto
В седьмой главе мы видели, как использовать конструкции языка BASIC-256 для организации циклов. В программе 49 показан пример бесконечного цикла, с использованием метки и оператора goto.
1 # gotodemo.kbs
2 top:
3 print "Ку-ку"
4 goto top
Программа 49: Goto с меткой
Ку-ку
Ку-ку
Ку-ку
… повторяет бесконечно
Пример вывода программы 49: Goto с меткой
метка: Метка позволяет вам дать название определенному месту в программе для того, чтобы вы смогли туда перейти во время выполнения программы. Меток в программе может быть много. Имя метки должно заканчиваться двоеточием (:), в строке с меткой не должно быть других операторов, имя метки должно начинаться с буквы и содержать латинские буквы и цифры с учетом регистра букв. Кроме того, нельзя использовать зарезервированные слова BASIC-256 или используемые имена переменных (см. приложение I). Примеры правильных имен меток: top:, far999:, About:. |
goto метка Оператор goto осуществляет переход к оператору, следующему непосредственно за меткой. |
Некоторые программисты используют метки и оператор goto во всех своих программах. Хотя порой программировать с goto легче, но такой стиль добавляет сложности в большие программы и их труднее отлаживать и поддерживать. Поэтому рекомендуем вам использовать goto как можно реже.
Давайте рассмотрим другой пример использования метки и оператора goto. В программе 50 мы создадим красочные
часы.
1 # textclock.kbs
2 fastgraphics
3 font "Tahoma", 20, 100
4 color blue
5 rect 0, 0, 300, 300
6 color yellow
7 text 0, 0, "Мои часы:"
8 showtime:
9 color blue
10 rect 100, 100, 200, 100
11 color yellow
12 text 100, 100, hour + ":" + minute + ":" + second
13 refresh
14 pause 1.0
15 goto showtime
Программа 50: Цифровые часы
Пример вывода программы 50: Цифровые часы (фрагмент)
hour или hour() minute или minute() second или second() month или month() day или day() year или year() Функции year, month, day, hour, minute и second возвращают соответствующие значения системных часов. Они позволят вашей программе сказать который час.
|
Повторное использование кода — оператор Gosub
Во многих программах мы найдем строки или даже целые блоки кода, которые требуются снова и снова. Чтобы разрешить эту проблему, BASIC-256 использует понятие «подпрограммы». Подпрограмма — это блок кода, который может быть вызван из разных мест программы, чтобы выполнить определенную задачу или часть задачи. Когда подпрограмма завершается, управление возвращается туда, откуда она была вызвана.
Программа 51 показывает пример подпрограммы, которая вызывается три раза.
1 # gosubdemo.kbs
2 gosub showline
3 print "Привет"
4 gosub showline
5 print "всем"
6 gosub showline
7 end
8
9 showline:
10 print "------------------"
11 return
Программа 51: Подпрограмма
------------------
Привет
------------------
всем
------------------
Вывод программы 51: Подпрограмма
gosub метка Оператор gosub обеспечивает переход к подпрограмме, обозначенной меткой. |
return Выполнение оператора return в подпрограмме передает управление обратно — туда, откуда была вызвана подпрограмма. |
end Прекращение выполнения программы (стоп). |
Теперь, когда мы увидели подпрограммы в действии, давайте напишем новую программу цифровых часов, используя подпрограмму для лучшего форматирования времени и даты (программа 52).
1 # textclockimproved.kbs
2
3 fastgraphics
4
5 while true
6 color blue
7 rect 0, 0, graphwidth, graphheight
8 color white
9 font "Times New Roman", 40, 100
10
11 line$ = ""
12 n = month + 1
13 gosub addtoline
14 line$ = line$ + "/"
15 n = day
16 gosub addtoline
17 line$ = line$ + "/"
18 line$ = line$ + year
19 text 50,100, line$
20
21 line$ = ""
22 n = hour
23 gosub addtoline
24 line$ = line$ + ":"
25 n = minute
26 gosub addtoline
27 line$ = line$ + ":"
28 n = second
29 gosub addtoline
30 text 50,150, line$
31 refresh
32 end while
33
34 addtoline:
35 # добавляем два цифры в строку line$
36 if n < 10 then line$ = line$ + "0"
37 line$ = line$ + n
38 return
Программа 52: Цифровые часы — усовершенствованные
Пример вывода программы 52: Цифровые часы — усовершенствованные (фрагмент)
В качестве «Большой программы» этой главы, давайте сделаем программу «бросающую кости» (два кубика), рисующую их на экране и подсчитывающую общую сумму выпавших очков. Будем использовать gosub для рисования этих двух кубиков так, чтобы пришлось описать это только один раз. |
1 # roll2dice.kbs
2 clg
3 total = 0
4
5 x = 30
6 y = 30
7 roll = int(rand * 6) + 1
8 total = total + roll
9 gosub drawdie
10
11 x = 130
12 y = 130
13 roll = int(rand * 6) + 1
14 total = total + roll
15 gosub drawdie
16
17 print "вы выбросили " + total + " очков."
18 end
19
20 drawdie:
21 # используем: x,y — левый верхний угол, roll — число очков
22 # рисуем куб 70x70 с точками 10x10 пикселей
23 color black
24 rect x,y,70,70
25 color white
26 # верхний ряд
27 if roll <> 1 then rect x + 10, y + 10, 10, 10
28 if roll = 6 then rect x + 30, y + 10, 10, 10
29 if roll >= 4 and roll <= 6 then rect x + 50, y + 10, 10, 10
30 # средний ряд
31 if roll = 1 or roll = 3 or roll = 5 then rect x + 30, y + 30, 10, 10
32 # нижний ряд
33 if roll >= 4 and roll <= 6 then rect x + 10, y + 50, 10, 10
34 if roll = 6 then rect x + 30, y + 50, 10, 10
35 if roll <> 1 then rect x + 50, y + 50, 10, 10
36 return
Программа 53: Большая программа — бросаем два кубика
Примера вывода программы 53: Большая программа — Бросаем два кубика
Где скачать BASIC-256:
Для дистрибутивов ALT Linux
- ветка 4.0 basic256-0.9.6-alt0.M40.1.i586.rpm
- ветка 4.1 basic256-0.9.6-alt0.M41.1.i586.rpm
- ветка p5 basic256-0.9.6-alt4.M50P.1.i586.rpm
- ветка 5.1 basic256-0.9.6-alt0.M51.1.i586.rpm
Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)
Как установить BASIC-256 в Linux
Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm
Оставьте комментарий