Роби, поки я кажу робити
Третій тип циклу – while / end while – перевіряє умову перед виконанням кожного повтору, і якщо результат перевірки умови приймає значення істина (true), то виконується код в циклі. Цикл while / end while може виконати внутрішній код кілька разів або не виконати жодного разу.
Іноді нам потрібна програма з нескінченним циклом, поки сам користувач не зупинить її. Це може бути легко зроблено за допомогою логічної константи true (істина) (див. програму 39).
Програма 39. Вічний цикл.
# while true. kbs
while true
print "більше ніколи";
end while
while умова
оператор (и)
end while
Виконує оператор(и) в тілі циклу знову і знову, поки умова істинна.
Оператор (и) буде виконано нуль (0) або кілька разів.
Програма 40 використовує while / end while для рахунку від 1 до 10 подібно програмі 33, яка використовувала для того ж цикл for.
Програма 40. While рахує до 10
1 # whilefor .kbs
2 t = 1
3 while t <= 10
4 print t
5 t = t + 1
6 end while
7.4. Швидка графіка
Коли нам потрібно швидко виконати багато графічних операцій, наприклад, при створенні анімації або в іграх, BASIC-256 пропонує режим «швидкої графіки». Такий режим включається командою fastgraphics. В цьому режимі вікно для виведення графіки буде оновлюватися тільки при виконанні команди refresh.
fastgraphics
Refresh
Команда fastgraphics включає режим «швидкої графіки» . В цьому режимі вікно для виведення графіки буде оновлюватися тільки по команді refresh
Включивши «швидкої графіки»під час виконання програми, ви не зможете повернутися в стандартний (повільний) режим. Після завершення виконання програми режим швидкої графіки вимикається автоматично (примітка розробника).
Програма 41. Калейдоскоп.
1 # kalidescope .kbs
2 clg
3 fastgraphics
4 for t = 1 to 100
5 r = int ( rand * 256)
6 g = int ( rand * 256)
7 b = int ( rand * 256)
8 x = int ( rand * 300)
9 y = int ( rand * 300)
10 h = int ( rand * 100)
11 w = int ( rand * 100)
12 color rgb (r, g, b)
13 rect x, y, w, h
14 rect 300-x-w, y, w, h
15 rect x, 300-y-h, w, h
16 rect 300 -x-w,300 -y-h, w, h
17 next t
18 refresh
Запустіть програму 41, попередньо видаливши або закоментувавши рядок номер 3, з командою fastgraphics. Ви бачите різницю?
У «Великий програмі» цього розділу ми будемо використовувати цикл while для анімації підстрибує м'яча у вікні для виводу графіки.
Програма 42. Велика програма – стрибучий м'яч
1 # bouncingball .kbs
2 fastgraphics
3 clg
5 # початкова позиція м'яча
6 x = rand * 300
7 y = rand * 300
8 # розмір м'яча
9 r = 10
10 # швидкість за напрямками х і y
11 dx = rand * r + 2
12 dy = rand * r + 2
13
14 color green
15 rect 0, 0, 300, 300
16
17 while true
18 # стираємо старий м'яч
19 color white
20 circle x, y, r
21 # обчислюємо нову позицію
22 x = x + dx
23 y = y + dy
24 # зіткнення з лівого або правого кордоном
25 if x <0 or x> 300 then
26 dx = dx * -1
27 sound 1000, 50
28 end if
29 # зіткнення з верхньої або нижньої кордоном
30 if y <0 or y> 300 then
31 dy = dy * -1
32 sound 1500, 50
33 end if
34 # малюємо новий м'яч
35 color red
36 circle x, y, r
37 # оновлюємо вікно графіки
38 refresh
39 end while
Розділ 8. Масиви – колекції даних
Ми використовували прості строкові і числові змінні в багатьох програмах, але вони можуть містити тільки одне значення за раз. Дуже часто доводиться мати справу з набором або списком значень. Для роботи з такими об'єктами придумані лінійні (одномірні) і двомірні масиви. У цьому розділі ви дізнаєтеся як створювати, форматувати (задавати початкові значення), використовувати масиви, а також як змінювати їх розміри.
8.1. Одновимірний числовий масив.
Одновимірна масив створює список в пам'яті так, що ви можете звертатися до її елементів по числовому адресою, званому індексом. Масиви можуть бути як числовими, так і строковими в залежності від типу змінної, використаної в операторі dim.
Програма 43. Одновимірний числовий масив.
1 # numeric 1d.kbs
2
3 dim a(10)
4
5 a [0] = 100
6 a [1] = 200
7 a [3] = a [1] + a [2]
8
9 input "Введіть число:", a [9]
10 a [8] = a [9] - a [3]
11
12 for t = 0 to 9
13 print "a [" + t + "] =" + a [t]
14 next t
Робота програми 43. Одновимірний числовий масив.
Введіть число: 63
a [0] = 100
a [1] = 200
a [2] = 0
a [3] = 200
a [4] = 0
a [5] = 0
a [6] = 0
a [7] = 0
a [8] = -137
a [9] = 63
dim variable(кількість елементів)
dim variable$ (кількість елементів)
dim variable(кількість_рядів, кількість_стовпців)
dim variable$(кількість_рядів, кількість_стовпців)
Оператор dim створює масив в оперативній пам'яті комп'ютера розміром рівному зазначена в дужках і ім'ям variable або variable$ (можна задати своє). Розмір масиву (кількість елементів, рядків і рядів) має бути цілим позитивним числом.
Оператор dim автоматично призначає значення елементів масиву рівне нулю (0), якщо масив числовий або рівне порожньому рядку ( ""), якщо масив строковий.
variable[номер_елемента]
variable[номер_рядка, номер_стовпчика]
variable$[номер_елемента]
variable$[номер_рядка, номер_стовпчика]
де variable або variable$ – ім'я масиву.
Ви можете робити посилання на елементи масиву за допомогою його імені і індексу всередині квадратних дужок в будь-якому місці, де можна використовувати прості змінні. Індекси повинні бути цілим числом від 0 до зменшеного на один значення зазначеного в операторі dim.
Вас може збентежити той факт, що BASIC-256 використовує нуль (0) для першого елемента масиву і число на одиницю менше, ніж його розмір для последнего, але так прийнято в програмуванні. Масиви з відліком від нуля – так називають такі об'єкти програмісти.
Ми можемо використовувати числові масиви для малювання великої кількості одночасно стрибають на екрані м'ячиків. Програма 44 використовує 5 масивів для зберігання місця розташування кожного з м'ячів, його напрямки руху і кольору. За допомогою циклів ми задаємо початкові значення цим масивів, а також змушуємо м'ячі рухатися. Ця програма також використовує функцію rgb(), яка визначає і зберігає колір кожного м'яча.
Програма 44. Багато стрибучих м’ячів.
1 # manyballbounce .kbs
2 fastgraphics
3
4 r = 10 # розмір м'яча
5 balls = 50 # кількість м'ячів
6
7 dim x(balls)
8 dim y(balls)
9 dim dx(balls)
10 dim dy(balls)
11 dim colors(balls)
12
13 for b = 0 to balls -1
14 # початкова позиція м'яча
15 x [b] = 0
16 y [b] = 0
17 # швидкість по осях x і y
18 dx [b] = rand * r + 2
19 dy [b] = rand * r + 2
20 # кожному м'ячу - свій колір!
21 colors [b] = rgb (rand * 256, rand * 256, rand * 256)
22 next b
23
24 color green
25 rect 0, 0, 300, 300
26
27 while true
28 # очистимо екран
29 clg
30 # позиціонуємо і малюємо м'ячики
31 for b = 0 to balls -1
32 x [b] = x [b] + dx [b]
33 y [b] = y [b] + dy [b]
34 # якщо м'яч виходить за бічні межі поля - повертаємо
35 if x [b] <0 or x [b]> 300 then
36 dx [b] = dx [b] * -1
37 end if
38 # якщо м'яч виходить за верхню / нижню межу - повертаємо
39 if y [b] <0 or y [b]> 300 then
40 dy [b] = dy [b] * -1
41 end if
42 # малюємо новий м'яч
43 color colors [b]
44 circle x [b], y [b], r
45 next b
46 # оновлюємо екран
47 refresh
48 pause .05
49 end while
|
Мал. 8.1. Робота програми 44. Багато стрибучих м’ячів.
rgb (червоний, зелений, синій)
Функція rgb повертає одне число, яке представляє колір, обчислений з трьох значень (червоного, зеленого і синього). Аргументами цієї функції можуть бути арифметичні вирази, але з однією умовою – їх значення має бути в інтервалі від 0 до 255.
Ще один варіант реалізації стрибаючих м'ячів наведено в програмі 45. У цьому прикладі використовується спрайт і два масиви для зберігання їх траєкторій.
8.2. Масиви рядків
Масиви можуть зберігати не тільки числа, а й рядки. Щоб відкрити строковий масив необхідно використовувати ідентифікатор строкової змінної в операторі dim. Все, що ми знаємо про числові масиви можна застосувати і до строкових з урахуванням відмінності в типах даних. Використання строкових масивів показано в програмі 69.
Програма 45. Список друзів.
1 # listoffriends .kbs
2 print "Склади список друзів"
3 input "Скільки всього друзів?", N
4
5 dim names$ (n)
6
7 for i = 0 to n -1
8 input "Напиши ім'я одного?", names$ [i]
9 next i
10
11 cls
12 print "Мої друзі"
13 for i = 0 to n -1
14 print "Друг номер";
15 print i + 1;
16 print "це" + names$ [i]
17 next i
Приклад виведення програми 45. Список друзів:
Склади список друзів
Скільки всього друзів? 3
Напиши ім'я одного? Іван
Напиши ім'я одного? Артем
Напиши ім'я одного? Денис
- Очищення екрану -
Мої друзі
Друг номер 1, це Іван
Друг номер 2, це Артем
Друг номер 3, це Денис
8.3. Присвоєння значень масивів
Ми використовували фігурні дужки ({}) для відтворення музики, малювання багатокутників і штампів. Фігурні дужки можна також використовувати для завдання конкретних значень масивів.
Програма 46. Завдання значень масиву списком.
1 # arrayassign .kbs
2 dim number (3)
3 dim name$ (3)
4
5 number = {1, 2, 3}
6 name$ = {"Юра", "Аня", "Петя"}
7
8 for i = 0 to 2
9 print number [i] + "" + name$ [i]
10 next i
Приклад виведення програми 46. Завдання значень масиву списком.
1 Юра
2 Аня
3 Петя
array = {знач0, знач1,. . . }
array$ = {текст 0, текст1,. . . }
Масиву можна задати значення (починаючи з індексу 0) за допомогою списку значень, ув'язнених у фігурні дужки. Це стосується як до числовим, так і строковим масивів.
8.4. Графіки і масиви
У розділі 8 ми використовували списки для створення багатокутників і штампів. Масиви також застосовні для цієї мети, що призведе до спрощення коду. Досить один раз визначити штамп або багатокутник, зберігаючи дані в масиві, і використовувати цей масив в різних місцях програми.
У масиві, використовуваному для штампів і багатокутників парні елементи (0, 2, 4 ,...) Містять абсциси (х), а непарні елементи (1, 3, 5,...) Містять ординату (y) точок, що утворюють фігуру , по два значення на кожну точку.
Програма 47. Штамп з тінню (мал. 8.2).
1 # shadowstamp .kbs
2
3 dim xmark (24)
4 xmark = {-1, -2, 0, -1, 1, -2, 2, -1, 1, 0, 2, 1, 1, 2, 0, 1, -1, 2, -2, 1 , -1, 0, -2, -1}
5
6 clg
7 color grey
8 stamp 160, 165, 50, xmark
9 color black
10 stamp 150, 150, 50, xmark
Мал. 8.2. Програма 47. Штамп з тінню
|
Дата добавления: 2016-03-10; просмотров: 311;
