BASIC-256. Глава 11
Методические материалыАвтор: Владимир Черный
Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Владимир Черный.
Оглавление:
- Глава 1: Знакомство с BASIC-256 – cкажи «Привет»
- Глава 2: Рисуем основные фигуры
- Глава 3: Звуки и музыка
- Глава 4: Мыслить как программист
- Глава 5: Программа задает вам вопросы
- Глава 6: Сравнения, сравнения, сравнения
- Глава 7: Циклы и счетчики — повторяем снова и снова
- Глава 8: Графика на заказ — создание фигур своими руками
- Глава 9: Подпрограммы — повторное использование кода
- Глава 10: Управляем мышкой, перемещаем объекты
Глава 11. Использование клавиатуры для управления программой
Эта глава показывает как заставить программу реагировать на нажатия клавиш (стрелок, букв и специальных символов) на клавиатуре.
Какая клавиша нажата последней?
Функция key возвращает последний сгенерированный системой код нажатой клавиши. Некоторые сигналы (такие как код сгенерированный комбинацией CTRL+C или функциональной клавишей F1), перехватываются самой средой BASIC256 и не возвращаются в программу. После передачи кода последнего нажатого символа функцией в программу ее значение обнуляется (становится равным нулю), пока не будет нажата еще какая-нибудь клавиша.
Значения функции key для печатных символов (0-9, знаки, буквы) равно юникод-значению символа в верхнем регистре независимо от состояния клавиш CupsLock и Shift.
1 # readkey.kbs
2 print "Нажми Q, чтобы закончить"
3 do
4 k = key
5 if k <> 0 then
6 if k >=32 and k <= 127 then
7 print chr(k) + "=";
8 endif
9 print k
10 endif
11 until k = asc("Q")
12 end
Программа 57 Чтение символов клавиатуры
Нажми Q, чтобы закончить
-1,
A=65,
S=83,
D=68,
F=70,
G=71,
16777248,
@=64,
16777248,
#=35,
3=51,
Пример вывода программы 57 Чтение символов клавиатуры
key key() Функция key возвращает значение кода последней нажатой пользователем клавиши. Как только функция считала значение нажатой клавиши, оно становится равным нулю, чтобы обозначить тот факт, что никакая клавиша больше не нажата. |
Unicode (юникод)
Стандарт Юникод придуман для того, чтобы присвоить числовые значения буквам или символам применяемым в мировых системах письменности. Стандарт Unicode 5.0 содержит более 107 000 различных символов. |
asc(выражение)
Функция asc возвращает целое число, равное юникод-значению первого символа строки «выражение». |
chr(выражение)
Функция chr возвращает строку, содержащую единственный символ, код которого в Юникод-таблице равен целому числу, которому равно «выражение» |
Давайте рассмотрим более сложный пример. Программа 58 рисует красный мяч (круг) на экране, которым пользователь может управлять, используя клавиатуру.
1 # moveball.kbs
2 print "используй: i - вверх, j - влево, k - вправо, m - вниз, q - закончить"
3
4 fastgraphics
5 clg
6 ballradius = 20
7
8 # позиция мяча
9 # начинаем в центре экрана
10 x = graphwidth /2
11 y = graphheight / 2
12
13 # рисуем мяч в начальном положении
14 gosub drawball
15
16 # цикл ожидания нажатий на клавиши
17 while true
18 k = key
19 if k = asc("I") then
20 y = y - ballradius
21 if y < ballradius then y = graphheight - ballradius
22 gosub drawball
23 end if
24 if k = asc("J") then
25 x = x - ballradius
26 if x < ballradius then x = graphwidth - ballradius
27 gosub drawball
28 end if
29 if k = asc("K") then
30 x = x + ballradius
31 if x > graphwidth - ballradius then x = ballradius
32 gosub drawball
33 end if
34 if k = asc("M") then
35 y = y + ballradius
36 if y > graphheight - ballradius then y = ballradius
37 gosub drawball
38 end if
39 if k = asc("Q") then end
40 end while
41
42 drawball:
43 color white
44 rect 0, 0, graphwidth, graphheight
45 color red
46 circle x, y, ballradius
47 refresh
48 return
Программа 58 Двигай мяч1
Примерный вывод программы 58: Двигай мяч
Большая программа этой главы — игра, использующая клавиатуру. Буквы случайным образом падают по экрану, а вы набираете очки нажимая эти буквы так быстро, как только сможете. |
1 # fallinglettergame.kbs
2
3 speed = .25 # скорость падения - чем число меньше, тем быстрее
4 nletters = 10 # количество букв в игре
5
6 score = 0
7 misses = 0
8 color black
9
10 fastgraphics
11
12 clg
13 font "Tahoma", 20, 50
14 text 20, 60, "Падающие буквы"
15 font "Tahoma", 18, 50
16 text 20, 100, "Нажми любую клавишу"
17 text 20, 140, "чтобы начать игру"
18 font "Tahoma", 16, 50
19 text 20, 180, "Включите английскую"
20 text 20, 220, "раскладку клавиатуры!"
21 refresh
22 # очищаем буфер клавиатуры и ждем нажатия на клавишу
23 k = key
24 while key = 0
25 pause speed
26 end while
27
28 for n = 1 to nletters
29 letter = int((rand * 26)) + asc("A")
30 x = 10 + rand * 225
31 for y = 0 to 250 step 20
32 clg
33 # показываем букву
34 font "Tahoma", 20, 50
35 text x, y, chr(letter)
36 # показываем счет очков (score)
37 # и величину возможного выигрыша (value)
38 font "Tahoma", 12, 50
39 value = (250 - y)
40 text 10, 270, "Стоимость "+ value
41 text 200, 270, "Очки "+ score
42 refresh
43 k = key
44 if k <> 0 then
45 if k = letter then
46 score = score + value
47 else
48 score = score - value
49 misses = misses + 1
50 end if
51 goto nextletter
52 end if
53 pause speed
54 next y
55 misses = misses + 1
56 nextletter:
57 next n
58
59 clg
60 font "Tahoma", 20, 50
61 text 20, 40, "Падающие буквы"
62 text 20, 80, "Игра окончена"
63 text 20, 120, "Очки: " + score
64 text 20, 160, "Промахи: " + misses
65 refresh
66 end
Программа 59 Большая программа — Падающие буквы2
Пример экрана програмы 59 Большая программа — Падающие буквы
——————————————
1В данной программе поле представляет собой сферу: когда вы подводите мячик к верхнему краю и нажимаете на "I" он появляется снизу, аналогично при движении мячика вправо и влево или вниз. Хорошее упражнение — исправить программу так, чтобы поле было прямоугольником со стенками. (прим. переводчика).
2В данную программу внесены изменения:
- строка 3: было speed = .15 У меня, на 2 ггц, c таким значением буквы мелькают как сумасшедшие
- строки 18-20 добавлены мной, поскольку программа выдает только латинские буквы. Сделать буквы русскими — неплохое упражнение!
- Строки 13-17 подкорректированы, чтобы русский текст умещался в окне графического вывода
- строка 49 добавлена мной, поскольку без нее любое нажатие на клавишу (даже неверную) считается попаданием.
(прим. переводчика)
Где скачать BASIC-256:
Для дистрибутивов ALT Linux
- ветка 4.0 basic256-0.9.6-alt5.M40.1.i586.rpm
- ветка 4.1 basic256-0.9.6-alt5.M41.1.i586.rpm
- ветка p5 basic256-0.9.6-alt5.M50P.1.i586.rpm
- ветка 5.1 basic256-0.9.6-alt5.M51.1.i586.rpm
Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)
Как установить BASIC-256 в Linux
Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm
Оставьте комментарий