Мазмуну:

Тармактык атаандаштык: BBC Micro үчүн кечигүү оюну: бит: 10 кадам (Сүрөттөр менен)
Тармактык атаандаштык: BBC Micro үчүн кечигүү оюну: бит: 10 кадам (Сүрөттөр менен)

Video: Тармактык атаандаштык: BBC Micro үчүн кечигүү оюну: бит: 10 кадам (Сүрөттөр менен)

Video: Тармактык атаандаштык: BBC Micro үчүн кечигүү оюну: бит: 10 кадам (Сүрөттөр менен)
Video: «АрыкTime» №1 / Теледолбоорго катышуучуларды тандоо туру / НТС / Кыргызстан 2024, Ноябрь
Anonim
Тармактык атаандаштык: Би-Би-Си микро үчүн аз күтүү оюну: бит
Тармактык атаандаштык: Би-Би-Си микро үчүн аз күтүү оюну: бит
Тармактык атаандаштык: Би-Би-Си үчүн кечигүү оюну: бит
Тармактык атаандаштык: Би-Би-Си үчүн кечигүү оюну: бит

Бул үйрөткүчтө мен BBC микро: битке төмөнкү өзгөчөлүктөрү бар негизги оюнчу оюнун кантип ишке ашыруу керектигин түшүндүрөм:

  • Жөнөкөй интерфейс
  • Кнопканы басуу менен экранды жаңыртуунун ортосунда кечигүү
  • Катышуучулардын ийкемдүү саны
  • Алыстан башкаруучу ("тамыры") түзмөктү колдонуу менен оюнду оңой башкаруу

Оюн негизинен саясаттын симуляциясы. Бардык оюнчулар эки оюнчудан башка эч бир командага дайындалбай башташат. Бул оюнчулардын бири "А" командасына, экинчиси "В" командасына дайындалган.

Оюндун максаты - ар бир оюнчу баардык динин кабыл алган учурда көпчүлүк оюнчулар менен командада болуу.

Жогорудагы диаграмма чексиз абалдагы машинаны, башкача айтканда, түзмөк болушу мүмкүн болгон мамлекеттердин спецификасын жана ошол мамлекеттердин ортосундагы өткөөлдөрдү көрсөтөт.

А абалды, ал күйгүзүлгөндөн бери түзмөктүн эс тутумун сүрөттөгөн учурдагы маалыматтардын топтому катары кароого болот. Ошол маалыматтарга таянып, түзмөк белгилүү бир аракеттерди аткарышы же колдонуучунун киргизүүсүнө башкача жооп бериши мүмкүн.

Өткөөл - бул логикалык шарт, чын болгондо, анын абалын өзгөртүүгө себеп болот. Өткөөл бир мамлекеттен башка мамлекетке өтүшү мүмкүн. Мамлекет бир нече жолу өтүшү мүмкүн.

Жогорудагы диаграмма төмөнкү мамлекеттерди аныктайт:

  • Дайындалган жок
  • Угуңуз А.
  • Б угуңуз
  • Команда А.
  • Команда Б.

Оюн кодун иштетүүчү түзмөк ушул беш мамлекеттин биринде болушу мүмкүн, бирок бир убакта бирөө жана ушул бешөө гана.

Колдонмодо сиз Microsoftтун MakeCode редакторун колдонуп жатканыңызды болжолдойм, аны тапса болот:

Оюндун толук аткарылышын бул жерден тапса болот:

makecode.microbit.org/_CvRMtheLbRR3 ("microbit-demo-user"-долбоордун аталышы)

Жана мастердин ("тамыр") тармак контроллерин ишке ашырууну бул жерден тапса болот:

makecode.microbit.org/_1kKE6TRc9TgE ("microbit-demo-root"-долбоордун аталышы)

Мен бул мисалдарга үйрөткүчүмдүн баарында кайрылам.

1 -кадам: Big Picture Дизайн ойлору

Биз кандайдыр бир код жазуудан мурун, биздин акыркы продуктубуз кандай болушун каалайбыз деп ойлонушубуз керек. башкача айтканда, өтүнмөнүн талаптары кандай? Биздин код түзмөк аяктагандан кийин эмне кылышы керектигин билдириши керек? Мен негизги колдонмонун функционалдуулугун алты категорияга бөлдүм, алардын ар бирин башка дизайн көз карашынан кароого болот.

  1. Биз түзмөктүн учурдагы абалына жараша иш -аракеттерин көзөмөлдөгүбүз келет
  2. Биз түзмөктүн колдонуучунун киргизүүсүнө реакциясын каалайбыз
  3. Биз 5 x 5 LED дисплейин колдонуп анимацияларды жана графикаларды көрсөтүүнү каалашыбыз мүмкүн
  4. Биз түзмөктүн эс тутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз
  5. Биз маалыматты зымсыз аппараттын радиосун колдонуп өткөргүбүз келет
  6. Биз түзмөктүн радиосу аркылуу маалыматтарды угуп, ошого жараша иштетүүнү каалайбыз

Мага ар бири жөнүндө кененирээк маалымат берүүгө уруксат бериңиз.

1. Биз түзмөктүн учурдагы абалына жараша иш -аракеттерин көзөмөлгө алгыбыз келет

Башка программалар сыяктуу эле, коддо көрсөтүлгөн көрсөтмөлөрдүн аткарылышы бир убакта бир сапта болот. Бул түзмөктүн ички абалына негизделген айрым көрсөтмөлөрдү аткарууну каалайбыз, бул окуу куралынын үстүндөгү диаграммада көрсөтүлгөндөй. Биз түзмөктү текшериши керек болгон коддордун ар бир блогунан кийин бир катар шарттарды жаза алмакпыз, бирок бул ыкма абдан тез бузулуп кетиши мүмкүн, андыктан биз анын ордуна бир гана өзгөрмөнү текшерүүчү чексиз циклди колдонобуз., көрсөтмөлөрдүн белгилүү бир топтомун аткарат же таптакыр эч нерсе кылбайт. Бул өзгөрмө колдонуучу тиркемесибизде да, "_state" суффикси менен да аныкталат.

2. Биз түзмөктүн колдонуучунун киришине реакциясын каалайбыз

Коддун ырааттуу түрдө аткарылышына карабастан, башкача айтканда, бир эле учурда, биздин түзмөк баскычтарга басууга жооп бериши керек, ал эми башкы абал цикл түзмөктүн каалаган убакта эмне кылышы керек экендигин аныктайт. Бул максатта, түзмөк аппаратура менен иштешкен төмөнкү деңгээлдеги программалык камсыздоого сигнал жөнөтүү мүмкүнчүлүгүнө ээ жана окуя деп аталат. Биз түзмөккө кандайдыр бир окуяны аныктаганда кандайдыр бир нерсе кылууну айткан код жаза алабыз.

3. Биз 5 х 5 LED дисплейин колдонуп анимацияны жана графиканы көрсөтүүнү каалайбыз

Муну жасоонун механизми жөнөкөй көрүнөт, бирок сүрөттү көрсөткөн блок 400 мс жашыруун кечигүүнү кошот. Биз түзмөгүбүздүн мамлекеттик циклди мүмкүн болушунча кечигүү менен аткарышын каалайбыз, кечигүүнү азайтуу үчүн JavaScript кодун түзөтүшүбүз керек болот.

4. Биз түзмөктүн эс тутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз

Биздин түзмөк эч нерсе кылардан мурун, колдонмо өз маалыматын эстутумга жүктөшү керек. Бул коддун окулушу үчүн аталган туруктуу өзгөрмөлөрдү, анимациянын бир бөлүгү болушу мүмкүн болгон сүрөттөрдү камтыган өзгөрмөлөрдү жана туура иштеши үчүн 0дөн баштоо керек болгон эсептегич өзгөрмөлөрдү камтыйт. Биз өзгөрмө аттардын жана алардын жаңы дайындалган баалуулуктарынын узун тизмеси менен аяктайбыз. Жеке стилди тандоо катары, мен ALL_CAPSти колдонуп, туруктуу баалуулуктарды, башкача айтканда, эч качан өзгөртпөй турган баалуулуктарды билдирем. Мен ошондой эле негизги өзгөрмөлүү идентификаторлорго префикс кылам, бул категорияга таандык болгон объекттин же түрдүн түрүн билдирет. Бул коддун аткарылышын жеңилдетүү аракети. Мен кодду чечмелөөдө пайда болгон түшүнүксүздүктөн эч качан "item" же "x" сыяктуу өзгөрмөлүү атты колдонбойм.

5. Биз түзмөктүн радиосун колдонуу менен маалыматты зымсыз өткөргүбүз келет

Бул чындыгында MakeCode блокторунун тилин колдонууда өтө жөнөкөй иш. Биз жөн эле жүктөө учурунда бардык түзмөктөрдү бир радио тобуна коебуз, анан биз сигнал жибергибиз келгенде, бизге берилген "Радио жөнөтүү номери" блогуна бир эле номерди өткөрүп бере алабыз. Жөнөтүүчү менен алуучунун бир эле радио топто иштеши маанилүү, анткени андай болбосо, алар ар кандай жыштыкта жөнөтүшөт же кабыл алышат жана байланыш ийгиликсиз болот.

6. Биз түзмөктүн радиосу аркылуу маалыматтарды угуп, кабыл алып, ошого жараша иштетүүнү каалайбыз

Мурунку пункттагыдай эле ойлорду эске алып, биз кирүүчү трансферттерди колдонуучулардын киргизүүсүн уккандай эле угабыз: окуяны иштетүүчү менен. Биз келген блокторду текшере турган код блогун жазабыз жана негизги абалдын айлануусун бузбай кандайдыр бир иш -аракеттерди жасоону текшеребиз.

Мындан тышкары, биз түзмөктү бүтүндөй тармакты башкарууга мүмкүндүк бере турган эң жөнөкөй тамыр колдонмосунун дизайнын кыскача карап чыгышыбыз керек. Мен буга көп убакыт коротпойм, анткени ал жогоруда көрсөтүлгөн дизайнга караганда алда канча жөнөкөй жана көбү жөн эле кайталанат. Мен тамырлардын функцияларын үч категорияга бөлдүм.

  1. Биз сигналды тандап алгыбыз келет
  2. Биз сигналды өткөргүбүз келет

-

1. Биз сигналды тандап алгыбыз келет

Бул жөн эле мүмкүн болгон сигналдар аркылуу кайталануучу баскычка ээ болуу менен жасалышы мүмкүн. Үчөө гана болгондуктан, бул ыкма жетиштүү болот. Ошол эле учурда, бизде колдонуучуга баскычты басууга жана тандалган сигналдын LED дисплейинде өтө аз кечигүү менен пайда болушуна жол берген, тандалган сигналды дайыма кайра көрсөтүүчү цикл болот.

2. Биз сигналды өткөрө алгыбыз келет

Эки баскыч бар болгондуктан, биз бирин тандоо үчүн, экинчисин ырастоо үчүн дайындай алабыз. Колдонуучу тиркемесине окшоп, биз жөн эле сигналды тармак аркылуу сан катары жөнөтөбүз. Башка маалымат талап кылынбайт.

Мен кийинки бөлүмдө жөнөкөй сигнал протоколу жөнүндө көбүрөөк сүйлөйм.

2 -кадам: Сигнал протоколу: Тармактык байланыш үчүн жөнөкөй тил

Төмөнкү сигналдар түзмөктөр бири -бири менен сүйлөшүү үчүн колдоно турган бардык мүмкүн болгон сөздөрдүн жыйындысы катары каралышы мүмкүн. Тармак ушунчалык жөнөкөй болгондуктан, айтууга көп нерсе жок, ошондуктан биз бул үч сигналды жөнөкөй бүтүн сандар менен чагылдыра алабыз.

0. Кайра коюу

  • Коддогу идентификатор: SIG-R
  • Бүтүн мааниси: 0
  • Максаты: Бардык түзмөктөргө эмне кылып жатышканын таштап, жаңы эле жүктөлгөндөй иш кылууну айт. Бул сигнал тармактагы ар бир түзмөккө жетсе, бүтүндөй тармак баштапкы абалга келтирилет жана колдонуучулар жаңы оюнду баштай алышат. Бул сигнал бир гана түпкү түзмөк аркылуу берилиши мүмкүн.

1. Конверсия А

  • Коддогу идентификатор: SIG-A
  • Бүтүн мааниси: 1
  • Максаты: LISTEN_A абалындагы каалаган түзмөккө, алар конверсия сигналын алгандан кийин, TEAM_A абалына өтүүсүн айт.

2. Конверсия Б

  1. Коддогу идентификатор: SIG-B
  2. Бүтүн мааниси: 2
  3. Максаты: LISTEN_B абалындагы каалаган түзмөккө, алар конверсия сигналын алгандан кийин, TEAM_B абалына өтүүсүн айт.

3 -кадам: Биз Түзмөктүн Аракеттерин Учурдагы абалына жараша башкаргыбыз келет

Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз
Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз
Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз
Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз
Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз
Түзмөктүн аракеттерин анын учурдагы абалына жараша көзөмөлдөөнү каалайбыз

Акыр -аягы, биз код жазууну баштай алабыз.

Биринчиден, Make Codeдо жаңы долбоорду ачыңыз

  • Жаңы функцияны түзүү. Мен кендин циклин чакырдым, анткени бул колдонмонун негизги цикли
  • Чексиз кайталана турган цикл блогун кошуңуз. Мен (чыныгы) колдондум, анткени чыныгы чыныгы эч качан жалган болбойт, демек, тиркемени башкаруу агымы эч качан циклден чыкпайт
  • Түзмөк анын мүмкүн болгон беш абалынын биринде экенин текшерүү үчүн жетиштүү if-else блокторун кошуңуз
  • Учурдагы түзмөктүн абалын кармоо үчүн өзгөрмөнү түзүңүз
  • Мүмкүн болгон беш мамлекеттин ар бирин көрсөтүү үчүн өзгөрмөлөрдү түзүңүз

    Эскертүү: Бул өзгөрмөлөрдө азырынча эч кандай дайындалган баалуулуктар жок экени жакшы. Биз буга жетебиз. Бул жерде биз кодду таза, окууга оңой жазганыбыз маанилүү

  • If-else блокторундагы ар бир шартты учурдагы абалды мүмкүн болгон мамлекеттердин бирине салыштыруу үчүн өзгөртүңүз
  • If-else блокторунун ылдый жагында, миллисекундтардын бир катарына тыныгуу кошуп, бул санды кармоо үчүн өзгөрмөнү түзүңүз. Биз аны кийинчерээк баштайбыз. Өзгөрмөнүн кене же жүрөктүн согушу сыяктуу сыпаттоочу атына ээ экенин текшериңиз. Бул түзмөктүн негизги укуругу болгондуктан, бул пауза түзмөктүн негизги циклди аткаруучу ылдамдыгын аныктайт, ошондуктан бул абдан маанилүү баалуулук жана аты жок сыйкырдуу сан болуу өтө маанилүү.

Эскертүү: Үчүнчү сүрөттөгү боз блоктор жөнүндө кабатыр болбоңуз. Мен аларга кийинчерээк жетем.

4 -кадам: Биз Колдонуучунун киргизүүсүнө реакция кылгыбыз келет

Колдонуучунун киргизүүсүнө реакция кылгыбыз келет
Колдонуучунун киргизүүсүнө реакция кылгыбыз келет
Колдонуучунун киргизүүсүнө реакция кылгыбыз келет
Колдонуучунун киргизүүсүнө реакция кылгыбыз келет

Эми, биз түзмөккө баскычтарды кантип басуу керектигин айткыбыз келет. Биринчиден, кирүү категориясындагы "Кнопка басылганда" блокторун колдонуу гана болушу мүмкүн, бирок биз мындан да гранулдуу башкарууну каалайбыз. Биз өркүндөтүлгөн бөлүмдүн астындагы башкаруу категориясындагы "on event (X) from value (Y)" блогун колдонобуз, анткени биз бул үйрөткүчтө өнүккөнбүз.

  • Төрт "окуядан …" блогун түзүңүз.

    • Алардын экөө "MICROBIT_ID_BUTTON_A" окуя булагын текшериши керек
    • Алардын экөө "MICROBIT_ID_BUTTON_B" окуя булагын текшериши керек
    • Ар бир баскычка багытталган эки окуядан:

      • "MICROBIT_BUTTON_EVT_UP" түрүндөгү окуяны текшерүү керек
      • "MICROBIT_BUTTON_EVT_DOWN" түрүндөгү окуяны текшерүү керек
    • Эскертүү: Бардык чоң тамгалардагы бул параметрлер төмөнкү деңгээлдеги микро: бит кодунда колдонулган энбелгилер. Алар жөн гана толтуруучу коддор, кийинчерээк код аткарылуучу экиликке түзүлгөндө бүтүн сандар менен алмаштырылат. Адамдарга бул энбелгилерди колдонуу бүтүн санды коюуга караганда оңой, бирок экөө тең бирдей иштейт.
  • Мен стилге жараша, ар бир "окуядан баштап …" чакыруусун көтөрүлгөн окуяны сүрөттөгөн функцияны тандадым. Керек болбосо да, менин оюмча бул окууну жакшыртат. Эгер кимдир бирөө кааласа, алар окуяны иштетүү кодун "on on event from …" блогунун ичине киргизе алышат.

    Эскертүү: Окуяга түзмөктүн жообун караган код блогу интуитивдүү түрдө "окуя иштетүүчү" деп аталат

  • Ар бир окуяны иштетүүчүгө, башкы абалдын циклиндеги түзүлүш катары түзмөктүн абалына жараша башкаруу агымын бөлүү үчүн колдонулган if-else структурасын кошуңуз.
  • Биздин мамлекеттик диаграммада көрсөтүлгөндөй, түзмөктүн абалын өзгөрткөн тапшырма блокторун кошуңуз

    • Биз билебиз, түзмөк ТАГДАЛБАГАН абалда, LISTEN_A абалына өтүү менен басылган А баскычына жана LISTEN_B абалына өтүү менен басылган В баскычына жооп бериши керек.
    • Биз ошондой эле билебиз, түзмөк LISTEN_A же LISTEN_B абалында болгондо, түзмөк кайра АТКАРЫЛБАГАН абалга өтүү менен бошотулган А баскычына жана В баскычын бошотууга жооп бериши керек.
    • Акыр -аягы, биз түзмөк TEAM_A же TEAM_B абалында болгондо, SIG_A трансляциясы аркылуу басылган А баскычына жана В баскычына жооп бериши керек экенин билебиз.

      Бул учурда сигналдардын деталдарын толтуруунун кажети жок. Биз буга кийинчерээк жетебиз. Эң башкысы, биз бул функцияларга ошол блокторго ошол учурда эмне кылуу керектигин сүрөттөгөн radioSignalSIG_A сыяктуу ат коюу менен жазыла турган кодду колдонууну көрсөтүшүбүз керек

5 -кадам: Биз Түзмөк Жүктөлгөндө Түзмөктөрдүн Эстутумундагы Маалыматтардын Маанилерин Жөнгө салгыбыз келет

Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз
Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз
Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын баштоону каалайбыз
Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын баштоону каалайбыз
Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз
Түзмөк жүктөлгөндө, биз түзмөктөрдүн эстутумундагы маалымат баалуулуктарын инициализациялоону каалайбыз

Бул жерде биз көптөгөн өзгөрмөлөрдү колдондук (маалыматтын аттары), бирок биз бул аттарга иш жүзүндө баа берген жокпуз. Биз түзмөк жүктөлгөндө бул өзгөрмөлөрдүн бардыгын эстутумга жүктөөсүн каалайбыз, ошондуктан бул өзгөрмөлөрдүн инициализациясын "баштоодо" блогуна жайгаштырабыз.

Буларды баштообуз керек болгон баалуулуктар:

  • Сигналдын константалары, сигнал протоколуна ылайык. Баалуулуктар болушу керек:

    • SIG_R = 0
    • SIG_A = 1
    • SIG_B = 2
    • Эскертүү: Мен бул константаларды "EnumSignals" менен коштодум, анткени бул өзгөрмөлөр Сигналдар деп аталган саналып өткөн типтегидей болушу керек. Бул өзгөрмөлөр башка программалоо тилдеринде ушундайча ишке ашырылышы мүмкүн. Саналып өткөн түрлөрдүн аныктамасы жана түшүндүрмөсү менин окуу куралымдын чегинен тышкары. Кааласа, Google муну кыла алат. Бул префикстер стилистикалык тандоолор жана программанын туура иштеши үчүн таптакыр маанилүү эмес.
  • Мамлекеттик баалуулуктарга ээ болгондо, каалагандай болушу мүмкүн болгон мамлекеттик константалар. Мен 0дөн өсүүчү бүтүн сандарды колдонуу үчүн стилди тандап алдым, мисалы:

    • ТААСЫРСЫЗ = 0
    • LISTEN_A = 1
    • LISTEN_B = 2
    • TEAM_A = 3
    • TEAM_B = 4
    • Эскертүү: Мен дагы ушул өзгөрмөлөрдүн префикстерине карата ушундай стилде чечим кабыл алдым. Мындан тышкары, мен бул тапшырмалар, баалуулуктар жана тартип жөнүндө бардыгы толугу менен өзүм билемдик экенин айтам. Бул баалуулуктардын түзмөктөн түзмөккө шайкеш келиши маанилүү эмес, анткени алар ички байланышта гана колдонулат жана тармак аркылуу байланыш үчүн эмес. Баарынан маанилүүсү, өзгөрмөлөрдүн мааниси бар жана эквиваленттүү же тең эместигин билүү үчүн аларды бири -бири менен салыштырууга болот.
  • Окуу үчүн BOOT_STATE деп аталган туруктуу жана UNASSIGNED деп койгон. Бул түзмөктү баштапкы абалга эмес, жүктөө абалына кайтарып жатканыбызды, түзмөк баштапкы абалга келтирүү сигналын алгандан кийин, биз аны кийинчерээк ишке ашырабыз.
  • Колдонуучу киргизүү аркылуу өтө аз кечигүү менен үзгүлтүккө учуратууга мүмкүндүк берген анимацияларды түзүү үчүн кийинки кадамда колдонулган анимациянын константалары. Биз муну ушул убакка чейин колдоно элекпиз, бирок алар албетте кийинки бөлүмдө түшүндүрүлөт жана колдонулат. Булардын кээ бирлеринин мааниси аттарына байланыштуу интуитивдүү болушу керек.

    • TICKS_PER_FRAME_LOADING_ANIMATION = 50
    • MS_PER_DEVICE_TICK = 10
    • MS_PER_FRAME_BROADCAST_ANIMATION = 500
    • MICROSECONDS_PER_MILLISECOND = 1000
    • NUMBER_OF_FRAMES_IN_LOADING_ANIMATION = 4
  • Анимация үчүн дагы бир өзгөрмө, бул жолу туруктуу эмес эсептегич. Көпчүлүк эсептегичтер сыяктуу эле, биз аны 0 кылып коебуз

    iTickLoadingAnimation = 0

  • Анимация кадрларын кармоо үчүн өзгөрмөлөрдүн эки сериясын түзүңүз. Мен "жүктөө анимациясы" деп атаган биринчисинде төрт сүрөт болушу керек (сиз муну акыркы туруктуу инициализацияда болжолдоп көрсөңүз керек), экинчисинде мен "эфирдик анимация" деп атасам, анда үч сүрөт болушу керек. Мен анимациянын кадрларына дал келүү үчүн өзгөрмөлөрдү атоону сунуштайм, мис. ringAnimation0, ringAnimation1…

    Мен жасаган сүрөттөрдүн баалуулугун түзүңүз же дагы оригиналдуу жана муздак сүрөттөрдү жаратыңыз

  • Эң акырында, биз "радио топтому (X)" блогун колдонуп, түзмөктүн радио тобун 0ге коюшубуз керек
  • Ыктыярдуу түрдө, колдонуучуга баары сүзүлүп кеткенин билдирүү үчүн сериялык чыгарууга "Инициализация аяктады" билдирүүсүн жазыңыз.
  • Эми биз түзмөктү орнотуп бүткөндөн кийин, биздин мамлекеттик цикл функциясын чакыра алабыз.

6 -кадам: Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз

Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз
Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз
Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз
Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз
Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз
Биз 5 X 5 LED дисплейин колдонуп анимацияларды жана графиканы көрсөтүүнү каалайбыз

Эми таптакыр башка нерсе үчүн.

Биз бир нече анимацияны жана бир нече каармандарды көрсөтүүнү каалайбыз, бирок биз негизги мамлекеттик циклди үзгүбүз келбейт. Тилекке каршы, сүрөттөрдү жана текст саптарын көрсөткөн блоктор демейки боюнча 400 мс кечиктирилет. Коддун JavaScript өкүлчүлүгүн түзөтпөстөн муну өзгөртүүгө эч кандай жол жок. Демек, бул биз кыла турган нерсе.

  • Ар бир сүрөт үчүн функция түзүңүз. Бул javascriptти түзөтүүнүн ордуна, сүрөттү көрсөтүү үчүн бир блокту колдонууга мүмкүнчүлүк берет. Бул атайын программада эч кандай сүрөт бир нече жолу колдонулбайт, бирок мен дагы эле бул стиль кодду окууну жеңилдетет деп ойлойм.
  • Ар бир жаңы функцияда "X сүрөттү (X) офсет 0" блогун кошуп, тиешелүү сүрөт өзгөрмөсүнүн атын (X) алмаштырыңыз
  • Негизги мамлекеттик циклге кошуңуз. "Көрсөтүлгөн сап (X)" блоктору, БҮТҮРҮЛБӨГӨН абалды башкарган блоктон тышкары, ар бир блокко. Түзмөктүн ар кандай абалын көрсөтүү үчүн көрсөтүлүүчү белгини кошуңуз. Мына мен эмне кылдым:

    • LISTEN_A: 'a'
    • LISTEN_B: 'b'
    • TEAM_A: 'А'
    • TEAM_B: 'B'

      ТААСЫРЫЛБАГАН мамлекет үчүн, жүктөө анимациясын жаңырта турган функцияга чалыңыз. Бул функциянын чоо -жайын биз төмөндө толтурабыз

  • JavaScript режимине которулуу.
  • X.showImage (0) жана basic.showString (X) ар бир чалууну табуу
  • Ар бирин X.showImage (0, 0) же basic.showString (X, 0) деп өзгөртүңүз

    • Бул кошумча аргументти кошуу аракеттен кийинки кечигүүнү 0 кылып коёт. Демейки боюнча, бул сыртта калат жана бул блоктордун ар бири аткарылгандан кийин түзмөк 400 мс тыным алат.
    • Эми бизде азыр өзүбүз кура турган анимация блокторубузда сүрөттөрүбүздү көрсөтүү үчүн кечиктирилгис механизм бар

Биринчиден, биз анимациянын салыштырмалуу жөнөкөй функциясын курабыз. Бул жөнөкөй, анткени биз колдонуучунун функция бүткөнгө чейин эч нерсе кыла алышын каалабайбыз, ошондуктан аларды берүү функциясын спам кылуусун токтотуу үчүн. Муну ишке ашыруу үчүн, биз жөн гана стандарттык жүрүм -турум, функция бүткүчө блоктун агымын чектей алабыз.

  • Эфир анимациясын көрсөтө турган функцияны түзүңүз.
  • Бул блоктун ичинде, анимациянын ар бир кадрына үч функционалдык чалууну, аларды көрсөтүү тартиби боюнча кошуңуз
  • Сүрөт көрсөтүү функциясына ар бир чалуудан кийин "күтүү (бизге) (X)" блогун кошуңуз.

    Эскертүү: Бул блок, өркүндөтүлгөн башкаруу бөлүмүнөн, "паузадан (мс)" дагы ары кетет, анткени ал белгиленген убакыт өткөнгө чейин процессорду толугу менен тоңдурат. Пауза блогу колдонулганда, ал аппарат көшөгө артында башка милдеттерди аткарышы мүмкүн. Бул күтүү блогу менен мүмкүн эмес

  • (X) менен (MS_PER_FRAME_BROADCAST_ANIMATION x MICROSECONDS_PER_MILLISECOND) алмаштырыңыз
  • Анимация эми туура иштеши керек

Экинчиден, биз жүктөө анимациясын көрсөтүү механизмин курабыз. Мунун идеясы LED дисплейин MS_PER_DEVICE_TICK өзгөрмөсүндө аныкталган белгилүү бир аралыкта жаңыртуу. Бул маани, түзмөктүн белгилөө узундугу, абалдын циклинин ар бир кайталануусун аяктагандан кийин түзмөк тындырган миллисекунддардын саны. Бул маани кичине болгондуктан, дисплейди дисплей циклинин ар бир кайталанышында бир жолу жаңырта алабыз жана колдонуучуга анимация үзгүлтүксүз өнүгүп жаткандай көрүнөт жана абал өзгөргөндө, колдонуучунун киргизүү ортосунда өтө аз кечигүү болот дисплей жаңыртылып жатат. ITickLoadingAnimation өзгөрмөсү менен кылган кенелерди эсептөө менен биз анимациянын тиешелүү кадрын көрсөтө алабыз.

  • Жүктөө анимациясын жаңырта турган функцияны түзүңүз
  • Кене эсептегич максималдуу мааниге жеткенин текшерүү үчүн шарт кошуңуз. Бул шарт, эгерде эсептегичтин мааниси жүктөө анимациясындагы кадрлардын санынан чоңураак болсо, ар бир кадрды көрсөтүү үчүн кенелердин санына чоңураак болот.

    Эгерде шарт чын болсо, iTickLoadingAnimation -ды 0го кайтарыңыз

  • If-else шарттарынын блогун кошуңуз. Булар анимациянын кайсы кадрын көрсөтүүнү аныктайт.

    Анимациянын ар бир кадры үчүн, эгер кене эсептегич ар бир анимациядагы кенелердин санынан анимациянын кадр санына көбөйтүлсө (1ден башталса), анда ал кадрды көрсөтүңүз, болбосо кийинки фреймдин ким экендигин текшериңиз көрсөтүлсүн

  • Блоктун ылдый жагында iTickLoadingAnimation көбөйөт
  • Анимация эми туура иштеши керек

Эскертүү: Менин мисалда пайда болгон боз блоктордун бардыгы блоктун javascript өкүлчүлүгүн түзөткөндө пайда болот. Бул жөн эле блоктун стандарттык топтомун колдонуу менен көрсөтүлбөгөн JavaScript кодун билдирет жана текст түрүндө түзөтүлүшү керек дегенди билдирет.

7 -кадам: Биз Түзмөктүн радиосун колдонуу менен зымсыз маалыматтарды бергибиз келет

Түзмөктүн радиосун колдонуу менен маалыматтарды зымсыз өткөрүп бергибиз келет
Түзмөктүн радиосун колдонуу менен маалыматтарды зымсыз өткөрүп бергибиз келет

Бул кадам мурдагыга караганда алда канча кыска. Чынында, бул, балким, бул үйрөткүчтүн эң кыска кадамы.

Эсиңизде болсун, биз түзмөктүн колдонуучу киргизген жоопторун программалаганда, менде ошол бөлүмдө түшүндүрүлбөгөн скриншотто эки блок болгон. Бул радио аркылуу сигнал жөнөтүүчү функцияларга болгон чалуулар. Тагыраак:

  • А баскычы басылды:

    • Эгерде түзмөк TEAM_A абалында болсо:

      Таратуу сигналы SIG_A

  • В баскычы басылды:

    • Эгерде түзмөк TEAM_B абалында болсо

      Таратуу сигналы SIG_B

Эгерде алар буга чейин жок болсо, бул функцияларды түзүңүз.

Ар бир функцияда:

  • Уктуруу анимациясынын функциясын чакырыңыз. Бул MS_PER_FRAME_BROADCAST_ANIMATION * 3 = 1,5 секунда ичинде боло турган башка нерселердин бүтүшүнө тоскоол болот. Туруктуу үчкө көбөйтүлөт, анткени анимацияда үч кадр бар. Бул жөн эле эмес жана эстетикалык жаңыртуу жетишерлик чоң болсо, дагы кошсо болот. Бул анимациянын экинчи максаты - колдонуучунун уктуруу функциясын спам кылуусуна жол бербөө.
  • "Радио жөнөтүү номери (X)" блогун кошуңуз, бул жерде функция аталышында айтылган сигналдын константасы

Мунун баары радио аркылуу берүү үчүн керек.

8 -кадам: Биз Түзмөктүн Радиосунан Уккубуз жана Алууну Алгыбыз келет жана ошого жараша иштетебиз

Биз Түзмөктүн Радиосунан Уккубуз жана Алууну Алгыбыз келет жана ошого жараша иштетебиз
Биз Түзмөктүн Радиосунан Уккубуз жана Алууну Алгыбыз келет жана ошого жараша иштетебиз
Биз Түзмөктүн Радиосунан Уккубуз жана Алууну Алгыбыз келет жана ошого жараша иштетебиз
Биз Түзмөктүн Радиосунан Уккубуз жана Алууну Алгыбыз келет жана ошого жараша иштетебиз

Бул негизги тиркемени түзүү үчүн акыркы кадам.

Биз аппаратка келген радио сигналдарды кантип иштетүү керектигин айтып жатабыз. Биринчиден, биздин аппарат алган сигналды атамакчы. Андан кийин, бул сигналдын маанисине таянып, эгер бар болсо, кандай чара көрүлөрүн чечет.

Алгачкы:

  1. "Кабыл алынган радиодо (X)" блогунан башталган код блогун түзүңүз.
  2. Ыктыярдуу түрдө, алынган маанини башка сыпаттоочу ат менен башка өзгөрмөгө дайындаңыз.
  3. Сигналды иштете турган функцияны чакырыңыз

Экинчиден, сигналды иштетүү функциясында:

  1. Сигналдын маанисине негизделген тармакты башкаруучу if-else билдирүүлөрүнүн блогун түзүңүз.
  2. Эгерде сигнал SIG_R болсо

    Түзмөктүн абалын BOOT_STATE деп коюңуз (ушул себептен биз бул константаны мурда түзгөнбүз)

  3. Эгерде сигнал SIG_A болсо жана учурдагы абал LISTEN_A болсо

    Түзмөктүн абалын TEAM_A деп коюңуз

  4. Эгерде сигнал SIG_B болсо жана учурдагы абал LISTEN_B болсо

    Түзмөктүн абалын TEAM_B деп коюңуз

Дал ушул. Колдонмо аяктады.

9 -кадам: Түзмөк: Биз Сигналды Тандоого жөндөмдүү болууну каалайбыз

Түзмөк: Биз сигналды тандап алгыбыз келет
Түзмөк: Биз сигналды тандап алгыбыз келет

Эми, биз "root" түзмөгүнө, башкача айтканда, тармакты башкара турган түзмөккө жөнөкөй колдонмо жазабыз.

Бул аппарат эки функцияны аткарышы керек:

  • Биз колдонуучуга сигналдарыбыздын бирин тандоого уруксат бергибиз келет
  • Биз колдонуучуга сигналды берүүгө уруксат бергибиз келет

Бул колдонмонун спецификациясы мурункунун чакан бөлүгү болгондуктан, мен обзор берем, бирок мен мурункудай майда -чүйдөсүнө чейин барбайм. Жогорудагы сүрөттө бул колдонмонун толук коду камтылган.

Колдонуучуга сигналды тандоого уруксат берүү үчүн:

  1. "Стартта" блогунда 5 өзгөрмөнү баштоо:

    1. Үч сигнал (0, 1, 2)
    2. Сигналдардын саны (3)
    3. Учурда тандалган сигналды кармоочу өзгөрмө (башында биринчи сигналга коюлган, 0)
  2. А баскычын басыңыз:

    1. Тандалган сигналды көбөйтүү
    2. Тандалган сигнал сигналдардын санынан чоң же барабар экенин текшериңиз

      Андай болсо, тандалган сигналды 0 коюңуз

  3. Старт блогунан кийин, учурдагы тандалган сигналдын маанисин кечиктирбестен көрсөтүүчү "түбөлүк" циклди иштетиңиз

Колдонуучуга сигналды берүүгө уруксат берүү үчүн

  1. "Стартта" блогунда радио тобун 0го коюңуз
  2. B баскычын баскыла:

    Тандалган сигналды "радио жөнөтүү номери (X)" блогунун жардамы менен таратыңыз

Дал ушул. Тамыр түйүнү колдонмосу өтө жөнөкөй.

10 -кадам: Биз бүттүк

Биз Бүттүк
Биз Бүттүк

Жогоруда тиркемени иштеткен түзмөктөрдүн сүрөтү. Оң жактагы экөө негизги "колдонуучу" тиркемесин, сол жагындагылар "тамыры" тиркемесин иштетип жатышат.

Мен бул оюнду CS Connections 2018де көрсөттүм, информатика боюнча орто жана жогорку мектеп мугалимдери үчүн бир жумага созулган жайкы конференция. Мен мугалимдерге 40ка жакын аппаратты берип, эрежелерди түшүндүрдүм. Көбү оюнду көңүл ачуучу деп табышты, көбү кантип ойноо керектигин түшүнмөйүнчө башаламан деп ойлошту. Демонстрация кыска болду, бирок биз оюнду ар түрдүү элдин арасында кызыктуу деп таптык.

CS Connections 2018 жөнүндө көбүрөөк маалыматты бул жерден тапса болот.

Сунушталууда: