роботы робототехника микроконтроллеры


 Страниц (3): « 1 [2] 3 »   

> Без описания
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



uiouio пишет:
Но не быстрее пятницы - хочется совместить это с обучением программированию ребенка.


Да, это главное. Да и не к спеху. Я просто хотел попросить Вас поделиться результатами.

uiouio пишет:
проще состояния клетки отражать не (0;1), а (0;15)


Да, Вы правы.

uiouio пишет:
- простые детерминированные условия порождают фракталы очень сложной структуры
- случайные процессы имеют аттракторы в виде геометрически простых фигур


При большом количестве циклов, боюсь, рисоваться будет довольно неспешно.

uiouio пишет:
Нельзя
спроси A[i]


Спасибо, что Вы заметили. Я проглядел. Все доделал и выложил.
В новой версии могут встретиться еще какие-либо недоделки. Если Вы что-то заметите, то буду признателен за Ваши замечания.
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



Немного оптимизировал парсер, что увеличило скорость приблизительно в 2 - 2,5 раза.

Последняя версия 1.5.0.5.

Добавил команду для вывода массива в виде ряда точек. Очень удобно для моделирования клеточных автоматов, для визуализации сортировки и во многих других случаях, когда требуется визуальное восприятие происходящего в массиве.

ТОЧКА# <имя массива> [, <координата х>, <координата у>]

Каждая точка при этом имеет цвет в соответствии со значением элемента массива. Если значение больше 15 (в GameLogo пятнадцать основных цветов), то точка выводится белым цветом.

Пример использования:

массив M[10,10]
переменная x
переменная y
переменная n
переменная d
переменная count

d = 10
перо 50
спрятать черепаху

загрузи в M
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 14 14
0 0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 0 0
0 0 0 14 14 0 14 14 14 14
0 0 14 14 0 0 14 14 14 0
0 0 0 0 0 0 14 14 0 0
0 0 0 0 0 0 14 0 14 14
конец загрузки

повторять пока 1 = 1 {

ТОЧКА# M, 150, 50

повторить для y = 2 до d - 1 {
повторить для x = 2 до d - 1 {
n = 0

если M[x-1,y] = 14 то n = n + 1
если M[x-1,y-1] = 14 то n = n + 1
если M[x,y-1] = 14 то n = n + 1
если M[x-1,y+1] = 14 то n = n + 1
если M[x,y+1] = 14 то n = n + 1
если M[x+1,y+1] = 14 то n = n + 1
если M[x+1,y] = 14 то n = n + 1
если M[x+1,y-1] = 14 то n = n + 1

если n > 3 то если M[x,y] = 14 то M[x,y] = 0
если n = 3 то M[x,y] = 14
если n < 2 то если M[x,y] = 14 то M[x,y] = 0
}
}

count = count + 1
пиши count

}
 
 Top
uiouio Post Id


Рядовой


Сообщений всего: 14
Дата рег-ции: Июнь 2011  



Добрый вечер.

1.
Нашел старый файл - игру гонки, на котором показывал ребенку возможности GameLogo.
Выкладываю, хоть и с задержкой.

Тогда я удовлетворился, что общая концепция работает. А сейчас стал проверять и обнаружил интересную штуку - проверка на столкновение машин не приводит к действию в этот момент. Можете заменить в строке
если машина.у - грузовик.у < 80 то звук = bom.wav
число 80 на что-нибудь другое, например 10, звук все равно издается после того как машины проехали "друг сквозь друга". При это если вставить
спроси х
как точку останова, то все срабатывает правильно. У меня не получилось сделать так, чтобы звук издавался в нужный момент.

2.
Более того, решил добавить изменяемую скорость (в первоначальном варианте было .y = .y + 1). Оказывается, что нажатие на клавишу Up равносильно многим нажатиям и скорость сразу становится максимальной, а нажатие на Down - скорость сразу падает до нуля. Мне кажется это все некие ошибки, которые Вы легко поправите.

3.
Среди математических конструкций нет самой употребительной - abs, приходится писать
если переменная < 0 то переменная = -переменная

4.
Вывод массива одной командой (точка # M)может быть удобно, но лучше избежать вездесущей сейчас моды добавлять в язык все, что может сгодится. Дело в том, что операция эта нужна только там, где надо выводить точки цветом, а это не столь часто. Кроме того, ее замена в виде цикла, содержащего повторить ... точка M[i,j] проста и понятна. И лично мне не нравится, что точки выводятся слитно друг другу - все равно придется использовать цикл. GameLogo привлекает тем, что нет ничего лишнего. На Ваше усмотрение.
Скачать файл: races.rar
Скачан раз: 368
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



нужен раздел форума для "Проекты для GAMELogo"...

uiouio пишет:
У меня не получилось сделать так, чтобы звук издавался в нужный момент.
листинг не смотрел, но наверное нужно сделать опрос с опережением - если перед машинкой на расстоянии "10" препятствие, то уже выдавать звук.
 
 Top
uiouio Post Id


Рядовой


Сообщений всего: 14
Дата рег-ции: Июнь 2011  



Про раздел форума поддерживаю. Ну или хотя бы можно сделать тему и модератор пусть следит за форматом сообщений. Но раздел лучше Улыбка

Пока писал ответ, понял причину:
Это связано с асинхронностью исполнения звука, т.е. для интерпретатора выполняемая команда - отправка звукового файла на исполнение, после чего он продолжает работу.
И это правильно - позволяет исполнять музыку во время работы. Получается мне надо добавить паузу, длина которой определяется скоростью считывания файла и подготовкой его исполнения.

Остается п.2 и 3 и я сейчас столкнулся с необходимостью иметь функцию round т.к. int не дает нужный результат.
Заранее спасибо разработчику.
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



uiouio пишет:
Выкладываю, хоть и с задержкой.


Спасибо, что Вы поделились.

uiouio пишет:
2.
Более того, решил добавить изменяемую скорость (в первоначальном варианте было .y = .y + 1). Оказывается, что нажатие на клавишу Up равносильно многим нажатиям и скорость сразу становится максимальной, а нажатие на Down - скорость сразу падает до нуля. Мне кажется это все некие ошибки, которые Вы легко поправите.


Это не ошибки, это стандартный практически для всех языков программирования способ обработки событий. Как бы Вы по другому управляли автомобилем в Вашей игре? Многократно нажимая на одну и ту же клавишу? А проблема, которую Вы описываете, решается уменьшением приращения.

Пример:

скорость = скорость + 0.05

uiouio пишет:
3.
Среди математических конструкций нет самой употребительной - abs, приходится писать
если переменная < 0 то переменная = -переменная


Функция ABS() есть. К сожалению, все никак не доходят руки сделать полное описание языка.

Пример

переменная А
А = -5
пиши ABS(А)

Спасибо, что Вы напомнили про эту функцию. Вставил в описание.

Еще один неописанный момент. Записи вида

если расстояние < 40 то
если машина.у - грузовик.у < 80 то звук = bom.wav
конец условия

лучше записывать в виде

если расстояние < 40 то если машина.у - грузовик.у < 80 то звук = bom.wav

Однострочные вложенные условия обрабатываются на порядок быстрее без рекурсивного вызова обработчика. Команда ИНАЧЕ при этом может быть только у последнего вложенного условия. Таким образом легко реализуется любая конъюнкция.

uiouio пишет:
4.
Вывод массива одной командой (точка # M)может быть удобно, но лучше избежать вездесущей сейчас моды добавлять в язык все, что может сгодится.


Данная команда абсолютно необходима при моделировании клеточных автоматов для быстрой перерисовки.

nest пишет:
нужен раздел форума для "Проекты для GAMELogo"...


Сейчас сделаю.

uiouio пишет:
столкнулся с необходимостью иметь функцию round


На днях сделаю.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



ну почему Вы не хотите отказаться от этого полуматематического языка?
и от скобок этих Сишных дурацких?
Вашему транслятору намного дольше было бы
начать условие 1
если расстояние меньше 40 то
если машина.у - грузовик.у меньше 80 то звук bom.wav --зачем тут "="?
конец условия 1
понимать?
у Вас же тут же и проблемма с программными скобками исчезла бы?
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



to uiouio

Функция round добавлена.

Еще добавлена довольно удобная команда для замены во всем массиве одного значения на другое.

заменить в <имя массива> <число1> на <число2>

Могу представить Ваши возражения по поводу излишеств, но эта команда служит для увеличения скорости обработки массивов в некоторых алгоритмах и, также как и пиши#, предполагается для удобства моделирования клеточных автоматов.

-------------------------------

Сообщения о скобках и обработке событий вынесены в отдельную тему
Обработка событий в GameLogo. Хо ливарные споры.

Здесь просьба оставлять только сообщения, касающиеся массивов в GameLogo.
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



Добавлена еще одна команда, позволяющая копировать массивы одинаковой размерности один в другой.

копировать <имя массива> в <имя массива>

Может быть, с методической точки зрения она и не нужна, но очень удобно. Улыбка
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



а если размерность разная?
тут три варианта
if arr1'size = arr2'size then arr1=arr2
или вот так
arr1=arr2
.
.
.
when array_exception ...
или просто копируются по самой коротой ветке: arr1= arr2'size или arr1(0..arr1'size)=arr2(0..arr1'size)


GameLogo становится взрослым, глядишь уже и обработка исключений добавится Улыбка
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



cjA пишет:
а если размерность разная?


Появляется предупреждение об ошибке.

cjA пишет:
GameLogo становится взрослым, глядишь уже и обработка исключений добавится


Следующая на очереди после процедур и функций. Улыбка Правда, скорее всего, в несколько стилизованном виде, понятном для делающих первые шаги. Вообще это довольно сложный момент - придумать разумный синтаксис для обработки исключений.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



Admin пишет:
Появляется предупреждение об ошибке.

а вот А пачему?
для корпоративных систем где одну половину кода придумали в китае, а другую в индии- аля уиндовс 7- это пунктуально, иначи бы и не заработало..
А почему для домашней системы где я знаю сам и решаю сам где какой байт лежит- не придумать что "у всех массивов есть свойство- наполняемость и больше наполняемости в массив написать нельзя и больше наполняемости прочесть из него нельзя" ?
Ведь эта ошибка- всего лишь свойство процессора вызывать прерывание по достижении определенной величины счетчика. Наследие х86

это касается массивов, тут у них разрядность вылезает- а как насчет множеств? множества можно объединять как угодно.
(это было заикнуто в борланд паскале, но так и умерло, а ведь идея - здравая.)
(Добавление)
Admin пишет:
сложный момент - придумать разумный синтаксис

с английского переводим напрямую

ошибки (зарезервированное слово)
когда (зарезервированное слово)
ошибка_разрядности делай (зарезервированное слово) ...
когда
ошибку_сам_придумал пиши ..., делай...
когда
любая_ошибка ничего_не_делай
закончить

можно двоеточия всунуть для красоты, но зачем? транслятор сам поймет что первое слово после "когда"- имя ошибки, а второе и следующие до следующего "когда" или "закончить"- комманды черепахе.
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



cjA пишет:
а вот А пачему?
для корпоративных систем где одну половину кода придумали в китае, а другую в индии- аля уиндовс 7- это пунктуально, иначи бы и не заработало..
А почему для домашней системы где я знаю сам и решаю сам где какой байт лежит- не придумать что "у всех массивов есть свойство- наполняемость и больше наполняемости в массив написать нельзя и больше наполняемости прочесть из него нельзя" ?


Потому что иначе появляется неоднозначность при обработке двумерных массивов.
В команде ЗАГРУЗИТЬ В используется именно "наполняемость" и никаких предупреждений об ошибке GameLogo не выдает, но при случайном пропуске в блоке данных могут начаться проблемы. Начинающий может не сразу понять без предупреждения, что у него не так.

cjA пишет:
Ведь эта ошибка- всего лишь свойство процессора вызывать прерывание по достижении определенной величины счетчика. Наследие х86


Сообщение об ошибке выдает сам GameLogo.

cjA пишет:
с английского переводим напрямую


Может быть, как-то попроще. Я предполагал как-то совместить с простенькой обработкой ошибок. Некоторые дети конструкцию "если - то - иначе -" с трудом понимают, а тут целый селектор.
Вообще концепция GameLogo не в том, чтобы повторить какой-то язык программирования, а в том чтобы представить простой инструмент для начального обучения программированию, при этом по возможности максимально сохранив восходящую преемственность по отношению к распространенным высокоуровневым языкам программирования, чтобы потом не пришлось переучиваться.
При этом момент "чтобы не пришлось переучиваться" очень важен, именно поэтому GameLogo и был сделан, потому что распространенная среда программирования на Logo, которая называется "Лого Миры", - это большая проблема для тех детей, которым приходится потом начинать изучение программирования на Си, Бейсике или Паскале.
Вот сохранить восходящую преемственность и сделать попроще для начинающих - главная и довольно сложная задача.

Вообще тема, которую Вы затронули в рамках своего комментария "GameLogo становится взрослым, глядишь уже и обработка исключений добавится", очень интересная. Тем более, что постепенно либо черепашка в GameLogo должна обрести больше робототехнических функций, либо выделиться в отдельный родственный язык РобоЛого. А роботы - это уже серьезно Голливудская улыбка
Поэтому предлагаю выделить эту тему в отдельную ветку, если Вы готовы по этому поводу что-то развить и предложить.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



"если то" - должно восприниматься довольно просто, а вот "иначе"- действительно сложно , потому что "иначе" подразумевает в общем случае бесконечное множество ответов, а бесконечность даже не все студенты понимают.

нет, мне пожалуй больше нечего добавить к вопросу об ошибках, тем более в той концепции языка как это сделано в GameLogo.
(Пока нечего. Посмотрю как это сделано в Ява и почему сделано не так как в Ада. Вот в Ява действительно непонятный обработчик ошибок, а подниматься Вы наверное хотите к нему, нежели к почти мертвому Ада, пример из которого я и привел.)

(либо в GameRobo, имхо Лого - это уже чужая торговая марка Улыбка )
(Добавление)
Хм. А какие чаще всего ошибки возникают в GameLogo? Есть статистика? (Вроде писали про закрывающую скобку , но это ошибка кодирования , а не выполнения.)
 
 Top
Admin Администратор Post Id


Администратор


Сообщений всего: 897
Дата рег-ции: Май 2006  



cjA пишет:
имхо Лого - это уже чужая торговая марка


"Лого" не является ничьей торговой маркой.

cjA пишет:
Хм. А какие чаще всего ошибки возникают в GameLogo? Есть статистика?


Специальной статистики нет, и окна в стиле "В Вашей программе Вы допустили ошибку. Отправить отчет о Вашей ошибке на myROBOT?" тоже нет.

О стандартных ошибках начинающих изучать программирование можно прочитать в пособиях о методиках преподавания программирования в школе.
 
 Top
Страниц (3): « 1 [2] 3 »
« GameLOGO »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru