Агуулгын хүснэгт:

Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит: 10 алхам (зурагтай)
Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит: 10 алхам (зурагтай)

Видео: Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит: 10 алхам (зурагтай)

Видео: Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит: 10 алхам (зурагтай)
Видео: Java tech talk: Spring Boot and GraphQl integration. Как сделать это просто? 2024, Долдугаар сарын
Anonim
Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит
Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит
Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит
Сүлжээний өрсөлдөөн: BBC Micro-ийн хувьд бага хоцрогдолтой тоглоом: бит

Энэхүү гарын авлагад би BBC micro: bit дээр олон тоглогчийн үндсэн тоглоомыг дараах онцлогтой хэрхэн хэрэгжүүлэх талаар тайлбарлах болно.

  • Энгийн интерфэйс
  • Товчлуур дарах болон дэлгэцийн шинэчлэлтүүдийн хоорондох хоцролт
  • Оролцогчдын уян хатан тоо
  • Алсын удирдлагатай ("root") төхөөрөмжийг ашиглан тоглоомыг хялбархан хянах боломжтой

Тоглоом нь үндсэндээ улс төрийн дүрслэл юм. Хоёр тоглогчоос бусад бүх тоглогчид ямар ч багт хуваарилагдаагүйгээр эхэлдэг. Эдгээр тоглогчдын нэг нь А багт, нөгөө нь В багт хуваарилагдсан.

Тоглоомын зорилго бол хүн бүр хөрвүүлэгдэх үед ихэнх тоглогчидтой багт байх явдал юм.

Дээрх диаграммд хязгаарлагдмал төлөв байдлын машин, өөрөөр хэлбэл төхөөрөмж дотор байж болох мужуудын тодорхойлолт, тэдгээр төлөв хоорондын шилжилтийг харуулав.

Төлөв бол төхөөрөмжийг асааснаас хойш санах ойг дүрсэлсэн одоогийн өгөгдлийн багц гэж ойлгож болно. Энэхүү өгөгдөл дээр үндэслэн төхөөрөмж тодорхой үйлдэл хийх эсвэл хэрэглэгчийн оруулсан мэдээлэлд өөрөөр хариу үйлдэл үзүүлэх боломжтой.

Шилжилт бол үнэн бол төхөөрөмжийн төлөв байдлыг өөрчлөхөд хүргэдэг логик нөхцөл юм. Шилжилт нь нэг мужаас өөр муж руу шилжиж болно. Мужид олон шилжилт байж болно.

Дээрх диаграммд дараах төлөвийг тодорхойлсон болно.

  • Оноосонгүй
  • А -г сонсоорой
  • Б -г сонсоорой
  • А баг
  • Б баг

Тоглоомын кодыг ажиллуулдаг төхөөрөмж нь эдгээр таван төлөвийн аль нэгэнд байж болно, гэхдээ нэг удаад ганцхан, зөвхөн эдгээр тав.

Та гарын авлагын туршид та Microsoft -ийн MakeCode засварлагчийг ашиглаж байгаа гэж үзэх болно. Үүнийг https://makecode.microbit.org дээрээс олж болно.

Тоглоомын бүрэн хэрэгжилтийг эндээс олж болно.

makecode.microbit.org/_CvRMtheLbRR3 ("microbit-demo-user" бол төслийн нэр юм)

Мастер ("root") сүлжээний хянагчийн хэрэгжилтийг эндээс олж болно.

makecode.microbit.org/_1kKE6TRc9TgE ("microbit-demo-root" бол төслийн нэр юм)

Би сургалтынхаа туршид эдгээр жишээг авч үзэх болно.

Алхам 1: Том зураг төсөлд анхаарах зүйлс

Аливаа код бичихийн өмнө бид эцсийн бүтээгдэхүүнээ ямар байгаасай гэж хүсч байгаагаа бодох хэрэгтэй. өөрөөр хэлбэл өргөдөлд ямар шаардлага тавьдаг вэ? Манай код төхөөрөмж дууссаны дараа юу хийхийг хэлэх ёстой вэ? Би үндсэн хэрэглээний функцийг зургаан ангилалд хуваасан бөгөөд тус бүрийг дизайны өөр өнцгөөс авч үзэх боломжтой.

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

Би тус бүрийн талаар бага зэрэг дэлгэрэнгүй ярихыг зөвшөөрнө үү.

1. Бид төхөөрөмжийн өнөөгийн байдалд үндэслэн түүний үйлдлийг хянахыг хүсч байна

Бусад ихэнх програмуудын нэгэн адил кодоор заасан зааврыг гүйцэтгэх нь нэг мөрөнд хийгддэг. Энэхүү гарын авлагын дээд хэсэгт байгаа диаграммд харуулсны дагуу бид төхөөрөмжөө дотоод төлөв байдалд үндэслэн тодорхой зааврыг гүйцэтгэхийг хүсч байна. Төхөөрөмж хийх ёстой кодын блок бүрийн дараа бид хэд хэдэн нөхцөлт нөхцлүүдийг бичиж болно, гэхдээ энэ арга нь маш хурдан замбараагүй болох тул бид оронд нь нэг хувьсагчийг шалгадаг хязгааргүй давталтыг ашиглах болно., тодорхой багц зааврыг гүйцэтгэдэг эсвэл огт юу ч хийдэггүй. Энэ хувьсагчийг манай хэрэглэгчийн болон root програмын аль алинд нь "_state" дагавараар тодорхойлох болно.

2. Бид төхөөрөмжийг хэрэглэгчийн оролтод хариу өгөхийг хүсч байна

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

3. Бид 5 x 5 LED дэлгэц ашиглан анимаци, графикийг үзүүлэхийг хүсч байна

Үүнийг хийх механизм нь энгийн мэт боловч дүрсийг харуулах блок нь 400 мс далд хоцролтыг бий болгодог. Бид төхөөрөмжөө төлөв байдлын давталтаа аль болох бага хоцрогдолтой үргэлжлүүлэн хийхийг хүсч байгаа тул саатлыг багасгахын тулд javascript кодыг засварлах шаардлагатай болно.

4. Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна

Манай төхөөрөмж ямар нэгэн зүйл хийхээс өмнө програм нь өгөгдлөө санах ойд ачаалах ёстой. Үүнд код уншихад зориулагдсан тогтмол хувьсагчид, хөдөлгөөнт дүрсийн нэг хэсэг байж болох дүрс агуулсан хувьсагчууд, зөв ажиллахын тулд 0 -ээс эхлэх шаардлагатай тоолуурын хувьсагчид орно. Бид хувьсагчийн нэрс ба тэдгээрийн шинээр томилогдсон утгуудын урт жагсаалтыг гаргах болно. Хувийн хэв маягийн сонголтын хувьд би ALL_CAPS -ийг ашиглан тогтмол утгуудыг, өөрөөр хэлбэл хэзээ ч өөрчлөх шаардлагагүй утгуудыг илэрхийлнэ. Би мөн үндсэн хувьсагчийн танигчдыг уг ангилалд хамаарах объект эсвэл төрөлд хамаарах категорийн нэрээр угтварлах болно. Энэ нь кодыг дагаж мөрдөхөд хялбар болгох зорилготой юм. Кодыг тайлах гэж оролдоход үүсдэг ойлгомжгүй байдлаас болж би "зүйл" эсвэл "x" гэх мэт хувьсагчийн нэрийг хэзээ ч ашиглахгүй.

5. Бид төхөөрөмжийн радиог ашиглан өгөгдлийг утасгүй дамжуулахыг хүсч байна

MakeCode -ийг блоклох хэлийг ашиглах үед энэ нь үнэндээ маш энгийн ажил юм. Бид ачаалах үед бүх төхөөрөмжийг нэг радио бүлэгт оруулдаг бөгөөд дараа нь бид дохио илгээхийг хүссэн үедээ бидэнд өгсөн "Радио илгээх дугаар" блок руу нэг дугаар дамжуулж болно. Илгээгч болон хүлээн авагч нь нэг радио бүлэг дээр ажиллаж байгаа нь чухал бөгөөд хэрэв үгүй бол тэд өөр өөр давтамжтайгаар илгээж, хүлээн авах бөгөөд харилцаа холбоо амжилтгүй болно.

6. Бид төхөөрөмжийн радиогоор өгөгдлийг сонсож, хүлээн авч, үүний дагуу боловсруулмаар байна

Өмнөх зүйлтэй ижил зүйлийг анхаарч үзээд бид ирж буй дамжуулалтыг хэрэглэгчийн оруулсан мэдээллийг сонсохтой адил сонсох болно: үйл явдал зохицуулагчтай. Бид ирж буй дохиог шалгаж, төлөв байдлын үндсэн хүрдэнд саад учруулахгүйгээр ямар нэгэн арга хэмжээ авах эсэхийг шалгах код бичих болно.

Нэмж дурдахад, бид сүлжээг бүхэлд нь хянах боломжийг олгодог програм болох илүү энгийн root програмын дизайныг товч авч үзэх хэрэгтэй. Дээрх загвараас хамаагүй хялбар бөгөөд ихэнх нь зүгээр л давтагдах тул би үүнд их цаг зарцуулахгүй. Би root deice -ийн функцийг гурван төрөлд хуваасан.

  1. Бид дохио сонгох чадвартай байхыг хүсч байна
  2. Бид дохио дамжуулах чадвартай байхыг хүсч байна

-

1. Бид дохио сонгох чадвартай байхыг хүсч байна

Үүнийг хийх боломжтой товчлуур байж болзошгүй дохиог давтаж болно. Зөвхөн гурав байдаг тул энэ арга нь хангалттай байх болно. Үүний зэрэгцээ бид сонгосон дохиог байнга дахин харуулдаг давталттай байж болох бөгөөд ингэснээр хэрэглэгч товчлуур дарж, сонгосон дохио нь LED дэлгэц дээр маш бага хоцорч байгааг харах боломжийг олгодог.

2. Бид дохио дамжуулах чадвартай байхыг хүсч байна

Хоёр товчлуур байгаа тул бид нэгийг нь сонгох, нөгөөг нь баталгаажуулахаар зааж өгч болно. Хэрэглэгчийн програмын нэгэн адил бид дохиог сүлжээгээр дугаар болгон илгээдэг. Өөр мэдээлэл оруулах шаардлагагүй.

Дараагийн хэсэгт би энгийн дохионы протоколын талаар илүү ихийг ярих болно.

Алхам 2: Дохионы протокол: сүлжээний харилцааны энгийн хэл

Дараахь дохиог төхөөрөмжүүд хоорондоо ярилцахад ашиглах боломжтой бүх үгсийн багц гэж ойлгож болно. Сүлжээ нь маш энгийн тул хэлэх зүйл бараг байхгүй тул бид эдгээр гурван дохиог энгийн бүхэл тоон утгаар илэрхийлж чадна.

0. Дахин тохируулах

  • Кодонд танигч: SIG-R
  • Бүхэл тоо: 0
  • Зорилго: Хүрээнд байгаа бүх төхөөрөмжид хийж буй зүйлээ орхиж, дөнгөж ачаалагдаж байгаа мэт ажиллахыг хэл. Хэрэв энэ дохио сүлжээнд байгаа бүх төхөөрөмжид хүрвэл сүлжээг бүхэлд нь тохируулах бөгөөд хэрэглэгчид шинэ тоглоом эхлүүлэх боломжтой болно. Энэ дохиог зөвхөн root төхөөрөмжөөр дамжуулах боломжтой.

1. Хөрвүүлэлт А

  • Кодонд танигч: SIG-A
  • Бүхэл тоо: 1
  • Зорилго: LISTEN_A төлөвт байгаа аливаа төхөөрөмжид хөрвүүлэлтийн дохиог хүлээн авсны дараа TEAM_A төлөвт шилжихийг хэл.

2. Хөрвүүлэх B

  1. Кодонд танигч: SIG-B
  2. Бүхэл тоо: 2
  3. Зорилго: LISTEN_B төлөвт байгаа аливаа төхөөрөмжид хөрвүүлэлтийн дохиог хүлээн авсны дараа TEAM_B төлөвт шилжихийг хэл.

Алхам 3: Бид төхөөрөмжийн одоогийн байдлыг үндэслэн түүний үйлдлийг хянахыг хүсч байна

Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна
Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна
Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна
Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна
Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна
Бид төхөөрөмжийн одоогийн байдлыг харгалзан түүний үйлдлийг хянахыг хүсч байна

Эцэст нь бид код бичиж эхлэх боломжтой.

Нэгдүгээрт, Make Code дээр шинэ төсөл нээнэ үү

  • Шинэ функц үүсгэх. Энэ бол програмын үндсэн цикл учраас би уурхайн давталт гэж нэрлэсэн
  • Хязгааргүй давтагдах давталтын блокыг нэмнэ үү. Би "үнэн" -ийг ашигласан, учир нь жинхэнэ үнэн хэзээ ч худал байдаггүй тул програмын хяналтын урсгал давталтаас хэзээ ч гарахгүй.
  • Төхөөрөмж нь боломжтой таван төлөвт байгаа эсэхийг шалгахын тулд хангалттай if-else блокуудыг нэмнэ үү
  • Төхөөрөмжийн одоогийн төлөвийг хадгалахын тулд хувьсагч үүсгэнэ үү
  • Боломжит таван төлөв тус бүрийг илэрхийлэх хувьсагч үүсгэ

    Тэмдэглэл: Эдгээр хувьсагчид хараахан оноосон утга байхгүй байгаа нь зүгээр юм. Бид үүнд хүрэх болно. Энэ үед бид цэвэр, уншихад хялбар код бичих нь илүү чухал юм

  • If-else блокуудын нөхцөл бүрийг өөрчилж, одоогийн төлөвийг боломжит төлөвүүдийн аль нэгтэй харьцуулж үзээрэй
  • If-else блокуудын доод талд хэдэн миллисекунд түр зогсолт хийж, энэ тоог барих хувьсагч үүсгэнэ үү. Бид үүнийг дараа нь эхлүүлэх болно. Хувьсагч нь хачиг эсвэл зүрхний цохилт гэх мэт тайлбартай нэртэй эсэхийг шалгаарай. Энэ нь төхөөрөмжийн гол гогцоо учраас энэ түр зогсолт нь төхөөрөмжийн үндсэн гогцоог гүйцэтгэх хурдыг тодорхойлдог тул энэ нь маш чухал үнэ цэнэ бөгөөд нэргүй шидэт тоо байх нь хэтэрхий чухал юм.

Тэмдэглэл: Гурав дахь зураг дээрх саарал блокуудын талаар санаа зовох хэрэггүй. Би дараа нь тэдэнд хүрэх болно.

Алхам 4: Бид хэрэглэгчийн оролтод хариу өгөхийг хүсч байна

Бид хэрэглэгчийн оролтод хариу өгөхийг хүсч байна
Бид хэрэглэгчийн оролтод хариу өгөхийг хүсч байна
Бид хэрэглэгчийн оруулсан мэдээлэлд хариу өгөхийг хүсч байна
Бид хэрэглэгчийн оруулсан мэдээлэлд хариу өгөхийг хүсч байна

Одоо бид төхөөрөмжид товчлуур дарахад хэрхэн ажиллахыг хэлэхийг хүсч байна. Эхний санаа бол оролтын ангиллын "Товчлуур дарагдсан үед" блокуудыг ашиглах явдал байж болох ч бид үүнээс илүү нарийн хяналттай байхыг хүсч байна. Бид энэ хичээл дээр ахисан түвшний байгаа тул хяналтын категорийн "on event ((X) -ээс (Y) утга)") блокыг ашиглах болно.

  • … -аас үйл явдал болох дөрвөн блок үүсгэнэ үү.

    • Эдгээрийн хоёр нь "MICROBIT_ID_BUTTON_A" үйл явдлын эх сурвалжийг шалгах ёстой.
    • Эдгээрийн хоёр нь "MICROBIT_ID_BUTTON_B" үйл явдлын эх сурвалжийг шалгах ёстой.
    • Товчлуур бүрт чиглэсэн хоёр үйл явдлаас:

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

    Тэмдэглэл: Төхөөрөмжийн үйл явдалд үзүүлэх хариу үйлдлийг зохицуулдаг кодын блокыг "үйл явдал зохицуулагч" гэж нэрлэдэг

  • Үйл явдал зохицуулагч болгонд үндсэн төлөвийн давталтын бүтэцтэй адил төхөөрөмжийн төлөвт үндэслэн хяналтын урсгалыг хуваахад ашигладаг if-else бүтцийг нэмнэ үү.
  • Манай төлөв диаграмд заасны дагуу төхөөрөмжийн төлөв байдлыг өөрчилдөг даалгаврын блокуудыг нэмнэ үү

    • Төхөөрөмж ТАНИЛЦААГҮЙ байх үед төхөөрөмж LISTEN_A төлөвт шилжсэнээр А товчлуур дээр дарж, LISTEN_B төлөвт шилжсэнээр В товчлуурыг дарах ёстой гэдгийг бид мэднэ.
    • Төхөөрөмж LISTEN_A эсвэл LISTEN_B төлөвт байх үед төхөөрөмж нь A товчлуурыг суллаж, В товчлуурыг суллахад хариу өгөх ёстой гэдгийг бид мэдэгдээгүй төлөв рүү шилжих ёстой гэдгийг бас мэднэ.
    • Эцэст нь хэлэхэд, төхөөрөмж TEAM_A эсвэл TEAM_B төлөвт байх үед төхөөрөмж нь A товчлуурыг дарж, B товчлуурыг SIG_A, SIG_B дамжуулалтаар дарах ёстой.

      Энэ үед цацах дохионы дэлгэрэнгүй мэдээллийг бөглөх шаардлагагүй болно. Бид дараа нь үүнд хүрэх болно. Хамгийн чухал зүйл бол бид эдгээр үйлдлүүдэд тухайн үед юу хийх ёстойг тайлбарласан өргөн нэвтрүүлгийн сигнал гэх мэт нэр өгөх замаар бичих кодыг ашиглахыг зааж өгөх явдал юм

Алхам 5: Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна

Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна
Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна
Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна
Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна
Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна
Төхөөрөмж асах үед бид төхөөрөмжийн санах ой дахь өгөгдлийн утгыг эхлүүлэхийг хүсч байна

Энэ үед бид маш олон хувьсагч (өгөгдлийн нэр) ашигласан боловч үнэндээ тэдгээр нэрэнд утга оноож өгөөгүй байна. Бид төхөөрөмжийг ачаалах үед эдгээр бүх хувьсагчийн утгыг санах ойд ачаалахыг хүсч байгаа тул эдгээр хувьсагчдын анхны тохиргоог "эхлүүлэх" блокт байрлуулна.

Эдгээр нь бидний эхлүүлэх ёстой үнэт зүйлс юм.

  • Дохионы протоколын дагуу дохионы тогтмолууд. Утга нь заавал байх ёстой:

    • SIG_R = 0
    • SIG_A = 1
    • SIG_B = 2
    • Тэмдэглэл: Эдгээр хувьсагчууд нь Signals гэж нэрлэгдсэн тоологдсон хэлбэрийн нэг хэсэг шиг ажиллах ёстой гэдгийг илэрхийлэхийн тулд би эдгээр тогтмолуудын урд "EnumSignals" гэж оруулав. Эдгээр хувьсагчдыг бусад програмчлалын хэл дээр ингэж хэрэгжүүлж болно. Тоологдсон төрлүүдийн тодорхойлолт, тайлбар нь миний хичээлийн хамрах хүрээнээс гадуур юм. Хэрэв тэд хүсвэл Google үүнийг ашиглах боломжтой. Эдгээр угтвар нь стилист сонголтууд бөгөөд програмыг зөв ажиллуулахад огт чухал биш юм.
  • Үнэ цэнэтэй л бол дур зоргоороо байж болох төрийн тогтмолууд. Би 0 -ээс дээш бүхэл тоонуудыг ашиглах хэв маягийн сонголтыг хийсэн.

    • ГАРААГҮЙ = 0
    • LISTEN_A = 1
    • LISTEN_B = 2
    • БАГ_А = 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…

    Миний хийсэнтэй ижил зургийн утгыг бий болгох эсвэл илүү анхны, сэрүүн дүрсийг бүтээх

  • Эцэст нь хэлэхэд бид "radio set group (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 -ийг засварлахын оронд нэг блок ашиглан зургийг харуулах боломжийг олгоно. Энэхүү тусгай програмд ямар ч зургийг нэгээс олон удаа ашигладаггүй, гэхдээ энэ хэв маяг нь кодыг уншихад хялбар болгодог гэж бодож байна.
  • Шинэ функц бүрт "офсет 0 дээрх зургийг харуулах (X)" блокыг харгалзах зургийн хувьсагчийн нэрийг (X) орлуулах замаар нэмнэ үү.
  • Үндсэн төлөвийн гогцоонд нэмнэ үү. "Бичигдээгүй (X)" блокуудыг БҮР ГАРААГҮЙ гэж үзсэн блокоос гадна блок бүрт харуулна. Төхөөрөмжийн өөр өөр төлөв байдлыг харуулахын тулд тэмдэгт нэмж оруулна уу. Миний хийсэн зүйл энд байна:

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

      ТАЙЛАГДААГҮЙ улсын хувьд ачаалах анимацийг шинэчлэх функц рүү залгаарай. Бид энэ функцын дэлгэрэнгүй мэдээллийг доор бөглөх болно

  • JavaScript горим руу шилжих.
  • X.showImage (0) болон basic.showString (X) руу хийх дуудлага бүрийг олоорой.
  • Тус бүрийг X.showImage (0, 0) эсвэл basic.showString (X, 0) болгож өөрчилнө үү.

    • Энэхүү нэмэлт аргументыг нэмснээр үйлдлийн дараах хоцролтыг 0 болгож тохируулна. Анхдагч байдлаар үүнийг орхигдуулсан бөгөөд эдгээр блок тус бүрийг ажиллуулсны дараа төхөөрөмж 400 мс -ийн турш түр зогсох болно.
    • Одоо бид зургуудаа анимац блок дээрээ харуулах бараг л хоцрогдолгүй механизмтай болсон бөгөөд үүнийг одоо хийж болно

Нэгдүгээрт, бид харьцангуй энгийн нэвтрүүлгийн анимацийн функцийг бүтээх болно. Нэвтрүүлгийн функцийг спам хийхээс урьдчилан сэргийлэхийн тулд хэрэглэгчийг функц дуустал юу ч хийхийг хүсэхгүй байгаа тул энэ нь илүү хялбар юм. Үүнийг хийхийн тулд бид функцийг дуустал хяналтын урсгалыг блокоор хязгаарлаж болно, энэ бол стандарт зан үйл юм.

  • Нэвтрүүлгийн анимацийг харуулах функцийг үүсгэнэ үү.
  • Энэ блок дотор хөдөлгөөнт дүрс бүрийн дараалал тус бүрт гурван функцын дуудлага оруулах ёстой
  • Зураг харуулах функцэд дуудлага бүрийн дараа "хүлээх (бид) (X)" блок нэмнэ үү.

    Тэмдэглэл: Дэвшилтэт хяналтын хэсгээс энэ блок нь "түр зогсоох" (ms) "-ээс ч илүү гарах бөгөөд энэ нь тогтоосон хугацаа дуустал процессорыг бүрэн зогсоох болно. Түр зогсоох блок ашиглагдах үед төхөөрөмж хөшигний цаана бусад даалгавруудыг гүйцэтгэх боломжтой байдаг. Хүлээх блокийн хувьд энэ нь боломжгүй юм

  • (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 өргөн нэвтрүүлгийн дохио

  • B товчлуур дээр дарагдсан:

    • Хэрэв төхөөрөмж 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)" блок ашиглан цацна уу

Ингээд л боллоо. Root node програм нь маш энгийн.

Алхам 10: Бид дууссан

Бид дууссан
Бид дууссан

Дээрх програмыг ажиллуулж буй төхөөрөмжүүдийн зураг байна. Баруун талд байгаа хоёр нь үндсэн "хэрэглэгч" програмыг, зүүн талд байгаа нь "root" програмыг ажиллуулж байна.

Би энэ тоглоомыг дунд болон ахлах ангийн багш нарт зориулан зуны долоо хоногийн турш зохион байгуулдаг CS Connections 2018 компьютерын шинжлэх ухааны боловсролын талаар үзүүлэв. Би багш нарт 40 орчим төхөөрөмж тарааж, дүрмийг тайлбарласан. Ихэнх нь тоглоомыг зугаа цэнгэлтэй гэж үздэг байсан бөгөөд олон хүн хэрхэн тоглохоо олж мэдэх хүртэл төөрөгдөлд оруулдаг байв. Жагсаалт богино байсан ч бид олон янзын хүмүүсийн дунд тоглоомыг хөгжилтэй өнгөрүүллээ.

CS Connections 2018 -ийн талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой.

Зөвлөмж болгож буй: