Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sergiy
6 лет назад

20 FreeBASIC - Блуждающая точка

В центре экрана находится точка. Каждый ход она может сместиться в одну из окружающих её восьми точек.

Если у центральной точки координаты(x,y), то у соседних к ней клеток получатся такие координаты:

Другими словами точка при смещении может случайно сместиться влево/вправо на 1 клетку, и/или вниз/вверх на одну клетку или не перемещаться по одной(двум) координатам.

Если сразу у точки координаты (x,y) то после "хода" они будут:

x=x+int(3*rnd()-1)
y=y+int(3*rnd()-1)

Другими словами после "хода" к координатам точки прибавится случайное число из набора [-1,0,+1]

На следующем ходе точка опять сместится в любом направлении.

Построим картину из миллиона таких движений.

FreeBASIC позволяет установить режим 800х600, думаю ваш монитор наверняка его поддерживает)))

screen 19

Объявим переменные: целые x,y и длиииинную переменную цикла i(вдруг мы захотим очень много точку рисовать)

dim as long i

Зададим x,y начальные значения - центр экрана.

x=400:y=300

Дальше крутим цикл ... раз. В цикле рисуем точку и вычисляем новые координаты.

for i=1 to 1000000
    x=x+int(3*rnd()-1)
    y=y+int(3*rnd()-1)
    pset(x,y)
next i

sleep

Как видно компилятор FreeBASIC делает программу очень быстрой - картинка строится практически мгновенно. (qbasic делал бы это думаю за полчаса, и это при меньшем разрешении экрана 640х480-максимум что в нём есть)

При десяти миллионах (движений)

А при ста миллионах картина не поменялась - точка улетела за пределы области видимости(экрана)

randomize time конечно же разнообразит картины.

Чтобы замедлить процесс движения добавим в цикл sleep 5, например,задержку в 5 миллисекунд.

А чтобы иметь возможность остановить этот процесс добавим опрос нажатой клавиши. и если она будет нажата - прервём цикл for

if inkey<>"" then exit for

screen 19


dim as integer x,y
dim as long i

x=400:y=300

for i=1 to 100000000
    x=x+int(3*rnd()-1)
    y=y+int(3*rnd()-1)
    pset(x,y)
    sleep 5
    if inkey<>"" then exit for
next i

sleep

Программу можно "доработать". Например:
При нажатии определённой клавиши - продолжать рисовать другим цветом, очищать экран и начинать процесс сначала.
При вылете точки за пределы экрана возвращать её в центр.
Вычислять наибольшее удаление точки от своего первоначального положения.

20 Блуждающая точка
19 "Прыгающие шашки" (графика и процедура)
18 Подпрограммы, процедуры, функции
17 Поиск минимального элемента
16 Игра "Прыгающие шашки"
15 Игра "Быки и коровы"
14 Тасуем карты (массивы-задачи ч2)
13 Массивы(задачи)
12 Массивы
11 Задачки
10 Игра угадай число
09 Случайные числа, RND
08 Случайные числа, RND
07 Циклы
06 Условный оператор
05 Первые простые задачки
04 Графика
03 Текстовые переменные и операции с ними
02 Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика

@sergiy

56
449.267 GOLOS
На Golos с October 2016
Комментарии (4)
Сортировать по:
Сначала старые