Въведение
Днес ще създадете игра, която тества реакциите на играчите. Робота ще дава звуков сигнал, след който играчите трябва да натиснат сензорите си за допир. Печели този, който успее да натисне сензора си първи. Разбира се така ще им бъде твърде лесно и по тази причина робота ще възпроизвежда произволен брой различни звуци преди сигнала, за да ги обърка. Ако някой натисне сензора си за допир преди реалния сигнал, той автоматично ще загуби.
Конструиране
Днешният робот има толкова простичка конструкция, че няма да получите инструкции. Той трябва да представлява два сензора за допир свързани за LEGO контролера, чрез най-дългите кабели, които можете да намерите. От вас се очаква да си конструирате по един модул с по един сензор за допир. Уверете се, че ви е удобен, защото всеки ще използва своя модул.
Ако нямате съотборник, конструирайте 2 модула със сензори за допир.
Сега, след като построихте робота, затворете кутията, за да не ви пречи.
- Приберете всички части, които не ви трябват за робота, в кутията.
- Затворете кутията и я отместете, така че да не ви пречи повреме на следващите задачи.
Програмиране
За да програмирате играта така, че да не могат да мамят играчите, ще трябва да си припомните как се ползват флагчета. В началото ще програмирате играта да се играе от двама играчи и ще я играете със съотборника ви, но ако завършите всички задачи, ще имате възможност да програмирате играта ви да се играе от 4 играча и ще можете да поканите другите отбори да играят с вас.
Как се играе играта за реакции
- Играта започва като всеки играч държи по един сензор за допир.
- С пускането на програмата, робота започва да възпроизвежда произволен брой произволни звукови файлове,
- След края на тези звукови файлове, робота възпроизвежда звуковият файл, който програмистите са избрали като стартов сигнал.
- В този момент всеки играч се опитва да натисне сензора си за допир преди останалите играчи да натиснат своите.
- Ако някой от играчите се обърка от произволните звукови файлове и натисне сензора си за допир преди стартовия сигнал, то робота ще спре да проверява сензора му за допир и той ще загуби в този кръг.
- Печели този, който натисне сензора си за допир първи след подаването на стартовия сигнал.
Стартов сигнал
За да не могат играчите да предвидят кога идва реалния сигнал, нека използваме блокче за произволни числа. Всяко число, което избере това блокче, ще отговаря на произволен звуков файл, от които един ще бъде сигнала за натискане на бутоните. Постарайте се да изберете възможно най-близко звучащите звукови файлове, така че играчите да се объркват.
Победител
След като робота е възпроизвел сигнала идва време, да проверим кой има най-бързи рефлекси. За тази цел, ще проверяваме двата сензора за допир и чиито сензор бъде натиснат първи ще обявим за победител.
Проблеми
Тази програма в сегашния си вид има два проблема:
- Дори и да чуете стартовия сигнал, докато робота не го възпроизведе до край, той не приема натиснатите бутони на играчите.
- Може да спечелите като задържите сензора си за допир натиснат през цялото време.
Първия проблем можем да решим, като променим типа на изпълнение на звуковото блокче. Програмата чака блокчето за звук да се изпълни преди да продължи, но има режими на това блокче, които изпълняват звука без да спират програмата.
За да решим втория проблем, трябва да накажем играча, който натиска бутона си преди сигнала. За тази цел ще трябва да започнем да следим сензорите за допир от началото на програмата паралелно на блокчето за повторение "Signal" и да блокираме играчите, които натискат сензорите си за допир преди стартовия сигнал. За да знаем дали стартовия сигнал е бил подаден, трябва да използваме флагче.
Рефакторинг
Рефакториране на код представлява процеса на изменение на кода, без да се променя начина, по който работи. Това се прави поради няколко причини, като опростяване на кода или вграждане на възможност за добавяне на нови функции, които не са били планирани, когато е бил написан кода.
Рефакторинг се прилага върху програми, които имат един от следните проблеми:
- Има доблиране на код;
- Кодът е прекалено дълъг;
- Има твърде много променливи в началото на кода;
- Части от програмата са прекалено зависещи от други т.е модули от програмата, които могат да работят паралелно с други, са зависими от тях и не се стартират докато зависимостта не бъде задоволена.
- Кодът не е разделен на модули и функции;
Има и други причини, за които може да се приложи рефакторинг, като описаните по-горе са основните.
Засичане на ранно натискане!
Ценното на това да засичате по-рано е, че ще можете да блокирате сензорите за допир. Така играчите нямат шанс да спечелят ако не са търпеливи. За тази цел трябва да програмирате всеки сензор за допир да може да бъде натиснат само веднъж. Това можете да го направите с помощта на отделни флагчета за всеки сензор за допир, които стоят свалени докато сензора им не бъде натиснат.
За да може тези флагчета да блокират сензорите за допир, трябва да добавите условни оператори за всеки един сензор. Условните оператори ще проверяват тези флагчета и само ако флагчетата са смъкнати позволяват да се извърши проверката на сензорите за допир.
Ако сте направили всичко правилно до момента, трябва програмата ви да има приблизително следния вид:
Проблем с блокирането на сензорите за допир
Когато и всички играчи се блокират, играта не може да продължи. За тази цел, трябва да добавим време за реакция, което дава на играчите 2 секунди да натиснат сензорите си за допир, след като е бил подаден стартовият сигнал и след това прекъсва блокчето за повторение "Input". Така ако всички играчи са си блокирали сензорите за допир, то след 2 секунди липса на реакция, програмата ще бъде спряна без победител.
Копиране на код
Когато програмираме симетрични роботи или роботи с подобни конструкции и задачи, много често сме изкушени да програмираме един робот или част от робот и да копираме програмата си. Но при копирането на програми възникват много проблеми, защото се копират и настройките, които сме направили. Тези настройки включват променливите, флагчетата и портовете, които сме задали и при малка промяна, всички трябва да се пренастроят.
Пробвали ли сте се да напишете дълга програма без да направите каквито и да било тестове? Когато тестваме редовно програмите си, можем много лесно да намерим кога и къде е възникнала дадена грешка, но при копиран код, ние сме предоставили огромно количество нови инструкции на робота си и е значително по-трудно да намерим проблема в тях.
Когато копирате код с намерение да го преизползвате в друга част от програмата, отделете 2 минути внимателно да прочетете кода от гледна точка на новото му място и да промените всички настройки валидни за новото му място - портове на сензори, имена на променливи и други подобни.
Задачи по приключване на урока.
- Направете снимки и клипове на роботите
- Разглобете и подредете робота
- Подредете работното си място
- Важно е да подредите електрониката на роботите върху капака на кутията.
- Навийте кабела за програмиране, така че да е събран.
- Поставете кабелите за робота до електрониката.
- Навийте кабела на мишката около мишката.
- Навийте кабела на зарядното на лаптопа така, както преподавателят ви ще ви покаже.
- Когато изключите компютъра, оставете го до кутията по роботика.
- Изключете всички програми на компютъра
- Излезте от FLLCasts
- Изключете компютъра
- Приберете столовете си под масата