СПО в российских школах

Команда ALT Linux рассказывает о внедрении свободного программного обеспечения в школах России
Январь 14, 2011

BASIC-256. Глава 11

Методические материалы
Автор: Владимир Черный

Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Владимир Черный.
Оглавление:

Где взять BASIC-256

Глава 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 различных символов.
Смотри: http://www.unicode.org

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

Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)

Как установить BASIC-256 в Linux

Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm

Оставьте комментарий