Orodha ya maudhui:

Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo: Hatua 10 (na Picha)
Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo: Hatua 10 (na Picha)

Video: Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo: Hatua 10 (na Picha)

Video: Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo: Hatua 10 (na Picha)
Video: Siri 5 ili kuwa mjasiriamali mwenye mafanikio. 2024, Novemba
Anonim
Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo
Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo
Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo
Ushindani wa Mtandao: Mchezo wa kuchelewesha kwa BBC Micro: kidogo

Katika mafunzo haya, nitaelezea jinsi ya kutekeleza mchezo wa msingi wa wachezaji wengi kwenye BBC ndogo: kidogo na huduma zifuatazo:

  • Interface rahisi
  • Ucheleweshaji wa chini kati ya vitufe vya vitufe na visasisho vya skrini
  • Idadi rahisi ya washiriki
  • Udhibiti rahisi juu ya mchezo kwa kutumia kifaa cha mbali ("mzizi")

Mchezo kimsingi ni masimulizi ya siasa. Wachezaji wote huanza bila kutolewa kwa timu yoyote, isipokuwa wachezaji wawili. Mmoja wa wachezaji hawa amepewa Timu A, na mwingine amepewa Timu B.

Lengo la mchezo kwa kila mchezaji kuwa kwenye timu na wachezaji wengi wakati ambapo kila mtu ameongoka.

Mchoro hapo juu unaonyesha mashine ya serikali inayokoma, kwa mfano maelezo ya majimbo ambayo kifaa kinaweza kuwa ndani na mabadiliko kati ya majimbo hayo.

Hali inaweza kuzingatiwa kama seti ya sasa ya data inayoelezea kumbukumbu ya kifaa tangu ilipowashwa. Kulingana na data hiyo, kifaa kinaweza kufanya vitendo fulani au kuguswa tofauti na uingizaji wa mtumiaji.

Mpito ni hali ya kimantiki ambayo, wakati ni kweli, husababisha kifaa kubadilisha hali yake. Mpito unaweza kutoka jimbo moja kwenda jimbo lingine lolote. Jimbo linaweza kuwa na mabadiliko mengi.

Mchoro hapo juu unataja majimbo yafuatayo:

  • Haijapewa
  • Sikiliza A
  • Msikilize B
  • Timu A
  • Timu B

Kifaa kinachotumia nambari ya mchezo kinaweza kuwa katika moja ya majimbo haya matano, lakini moja tu kwa wakati, na hizi tano tu.

Nitafikiria kwenye mwongozo wote kwamba unatumia mhariri wa MicrosoftCodeCode, ambayo inaweza kupatikana kwa:

Utekelezaji kamili wa mchezo unaweza kupatikana hapa:

makecode.microbit.org/_CvRMtheLbRR3 ("microbit-demo-user" ni jina la mradi)

Na utekelezaji wa bwana ("mzizi") mtawala wa mtandao unaweza kupatikana hapa:

makecode.microbit.org/_1kKE6TRc9TgE ("microbit-demo-root" ni jina la mradi)

Nitarejelea mifano hii wakati wa mafunzo yangu yote.

Hatua ya 1: Kuzingatia Kubuni Picha

Kabla ya kuandika nambari yoyote, tunahitaji kufikiria juu ya kile tunataka bidhaa yetu ya mwisho ionekane. kwa maneno mengine, ni nini mahitaji ya maombi? Nambari yetu inapaswa kuambia kifaa ifanye nini ikiwa imekamilika? Nimegawanya utendaji wa programu kuu katika vikundi sita, ambayo kila moja inaweza kuzingatiwa kutoka kwa mtazamo tofauti wa muundo.

  1. Tunataka kudhibiti vitendo vya kifaa kulingana na hali yake ya sasa
  2. Tunataka kifaa kuguswa na uingizaji wa mtumiaji
  3. Tunataka kuonyesha michoro na picha kwa kutumia onyesho la 5 x 5 la LED
  4. Tunataka kuanzisha maadili ya data kwenye kumbukumbu ya vifaa wakati kifaa kinakua
  5. Tunataka kusambaza data bila waya kutumia redio ya kifaa
  6. Tunataka kusikiliza na kupokea data juu ya redio ya kifaa na kuichakata ipasavyo

Niruhusu niende kwa undani zaidi juu ya kila moja.

1. Tunataka kudhibiti vitendo vya kifaa kulingana na hali yake ya sasa

Kama programu zingine nyingi, utekelezaji wa maagizo yaliyotajwa na nambari hufanyika laini moja kwa wakati. Tunataka kifaa chetu kitekeleze maagizo fulani kulingana na hali yake ya ndani, kama inavyoonyeshwa na mchoro ulio juu ya mafunzo haya. Tunaweza kuandika safu ya masharti baada ya kila kificho ambacho kinachunguza kifaa kinapaswa kufanya, lakini njia hii inaweza kuwa mbaya sana haraka sana, kwa hivyo tutatumia kitanzi kisicho na kipimo ambacho huangalia tu ubadilishaji mmoja, na kulingana na mabadiliko hayo., hufanya seti maalum ya maagizo au haifanyi chochote hata. Tofauti hii itatambuliwa na kiambishi "_state" katika matumizi yetu ya mtumiaji na programu tumizi yetu.

2. Tunataka kifaa kuguswa na uingizaji wa mtumiaji

Licha ya utekelezaji wa kawaida wa nambari kutokea kwa mtiririko, hiyo ni kusema, mstari mmoja kwa wakati, tunahitaji kifaa chetu kuguswa na vifungo vya kitufe wakati kitanzi kikuu cha serikali kinaamua ni nini kifaa kinapaswa kufanya wakati wowote. Kwa kusudi hilo, kifaa kina uwezo wa kutuma ishara kwa programu ya kiwango cha chini ambayo inaingiliana na vifaa, na kusababisha kile kinachoitwa tukio. Tunaweza kuandika nambari ambayo inaambia kifaa kufanya kitu wakati hugundua aina fulani ya hafla.

3. Tunataka kuonyesha michoro na picha kwa kutumia onyesho la 5 x 5 la LED

Utaratibu wa kufanya hivyo unaonekana kuwa rahisi, lakini kizuizi kinaonyesha picha inaongeza ucheleweshaji uliofichwa wa 400 ms. Kwa sababu tunataka kifaa chetu kiendelee kutekeleza kitanzi chake cha hali na latency kidogo iwezekanavyo, tutahitaji kuhariri nambari ya javascript ili kupunguza ucheleweshaji.

4. Tunataka kuanzisha maadili ya data kwenye kumbukumbu ya vifaa wakati kifaa kinakua

Kabla ya kifaa chetu kufanya chochote, programu inahitaji kupakia data zake kwenye kumbukumbu. Hii ni pamoja na vigeugeu vya mara kwa mara vinavyoitwa kwa usomaji wa nambari, vigeuzi ambavyo vina picha, ambazo zinaweza kuwa sehemu ya uhuishaji, na vigeuzi vya kukabiliana ambavyo vinahitaji kuanza saa 0 kufanya kazi vizuri. Tutaishia na orodha ndefu ya majina yanayobadilika na maadili yao mapya. Kama chaguo la mtindo wa kibinafsi, nitaashiria maadili ya kila wakati, i.e. maadili ambayo sitahitaji kubadilisha, kwa kutumia ALL_CAPS. Pia nitatanguliza vitambulisho kuu vyenye kutofautisha na jina la kategoria ambalo linamaanisha aina ya kitu au aina ambayo kitambulisho iko chini. Hii ni kujaribu kufanya nambari iwe rahisi kufuata. Sitatumia jina linalobadilika kama "kipengee" au "x" kwa sababu ya sintofahamu inayotokea wakati wa kujaribu kufafanua nambari hiyo.

5. Tunataka kusambaza data bila waya kutumia redio ya kifaa

Kwa kweli hii ni kazi rahisi wakati wa kutumia lugha ya MakeCode inazuia lugha. Tunaweka vifaa vyote kwa kikundi kimoja cha redio wakati wa boot na wakati tunataka kutuma ishara, tunaweza kupitisha nambari moja kwenye kizuizi cha "Nambari ya kutuma Redio" tuliyopewa. Ni muhimu kwamba mtumaji na mpokeaji wanafanya kazi kwenye kikundi kimoja cha redio, kwa sababu ikiwa sivyo, watatuma au kupokea kwa masafa tofauti, na mawasiliano hayatafanikiwa.

6. Tunataka kusikiliza na kupokea data juu ya redio ya kifaa na kuichakata ipasavyo

Kwa kuzingatia kuzingatia sawa na kipengee kilichotangulia, tutasikiliza usambazaji unaokuja kwa njia ile ile ambayo tutasikiliza uingizaji wa mtumiaji: na mshughulikiaji wa hafla. Tutaandika kificho cha nambari ambacho kitachunguza ishara zozote zinazoingia na kuangalia ikiwa hatua yoyote inapaswa kuchukuliwa bila kuvuruga kitanzi kikuu cha serikali.

Kwa kuongezea, tunapaswa kuzingatia kwa ufupi muundo wa programu rahisi zaidi ya mizizi, mpango ambao utaruhusu kifaa kudhibiti mtandao mzima. Sitatumia muda mwingi kwa hii kwani ni rahisi zaidi kuliko muundo uliotajwa hapo juu na mengi yake ni kurudia tu. Nimegawanya utendaji wa deice ya mizizi katika vikundi vitatu.

  1. Tunataka kuweza kuchagua ishara
  2. Tunataka kuwa na uwezo wa kupitisha ishara

--

1. Tunataka kuweza kuchagua ishara

Hii inaweza kufanywa kwa kuwa na kitufe kinachozidi kupitia ishara zinazowezekana. Kwa kuwa kuna tatu tu, njia hii itatosha. Wakati huo huo, tunaweza kuwa na kitanzi ambacho huonyesha tena ishara iliyochaguliwa kila wakati, ikiruhusu mtumiaji kubonyeza kitufe na kuona ishara iliyochaguliwa ikionekana kwenye onyesho la LED na latency kidogo sana.

2. Tunataka kuwa na uwezo wa kupitisha ishara

Kwa kuwa kuna vifungo viwili, tunaweza kuteua moja ya uteuzi na nyingine kwa uthibitisho. Kama matumizi ya mtumiaji, tunatuma tu ishara juu ya mtandao kama nambari. Hakuna habari nyingine inayohitajika.

Nitazungumza zaidi juu ya itifaki rahisi ya ishara katika sehemu inayofuata.

Hatua ya 2: Itifaki ya Ishara: Lugha Rahisi ya Mawasiliano ya Mtandao

Ishara zifuatazo zinaweza kuzingatiwa kama seti ya maneno yote yanayowezekana ambayo vifaa vinaweza kutumia kuongea kwa kila mmoja. Kwa sababu mtandao ni rahisi sana, hakuna mengi ya kusema, na kwa hivyo tunaweza kuwakilisha ishara hizi tatu kwa nambari rahisi za nambari.

0. Weka upya

  • Kitambulisho katika nambari: SIG-R
  • Thamani kamili: 0
  • Kusudi: Waambie vifaa vyote katika anuwai waangalie kile wanachofanya na watende kana kwamba wamepandishwa tu. Ikiwa ishara hii inafikia kila kifaa kwenye mtandao, mtandao wote utarejeshwa na watumiaji wanaweza kuanza mchezo mpya. Ishara hii inaweza kutangazwa tu na kifaa cha mizizi.

1. Uongofu A

  • Kitambulisho katika nambari: SIG-A
  • Thamani kamili: 1
  • Kusudi: Eleza kifaa chochote kilicho katika hali LISTEN_A, pindi tu wanapopokea ishara ya ubadilishaji, kubadili hali TEAM_A.

2. Uongofu B

  1. Kitambulisho katika nambari: SIG-B
  2. Thamani kamili: 2
  3. Kusudi: Eleza kifaa chochote kilicho katika hali LISTEN_B, pindi tu wanapopokea ishara ya ubadilishaji, kubadili hali TEAM_B.

Hatua ya 3: Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa

Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa
Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa
Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa
Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa
Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa
Tunataka Kudhibiti Vitendo vya Kifaa kulingana na Hali Yake Ya Sasa

Mwishowe, tunaweza kuanza kuandika nambari.

Kwanza, Fungua mradi mpya katika Fanya Msimbo

  • Unda kazi mpya. Niliita kitanzi changu kwa sababu hii ndio kitanzi cha msingi cha programu
  • Ongeza kizuizi kitanzi ambacho kitarudia bila kikomo. Nilitumia while (true) kwa sababu ukweli halisi hautawahi kuwa wa uwongo, kwa hivyo mtiririko wa udhibiti wa programu hautatoka kamwe kitanzi
  • Ongeza vizuizi vya kutosha ikiwa-vingine ili kuangalia ikiwa kifaa kiko katika mojawapo ya majimbo yake matano yanayowezekana
  • Unda kutofautisha kushikilia hali ya kifaa cha sasa
  • Unda vigeuzi vya kuwakilisha kila moja ya majimbo matano yanayowezekana

    Kumbuka: Ni sawa kwamba vigeuzi hivi havina maadili yoyote yaliyopewa bado. Tutafika hapo. Kwa wakati huu, ni muhimu zaidi tuandike nambari safi, rahisi kusoma

  • Badilisha kila hali katika vizuizi vingine ikiwa kulinganisha hali ya sasa na moja ya hali zinazowezekana
  • Chini ya vizuizi vingine ikiwa, ingiza pause kwa idadi kadhaa ya millisecond, na uunda ubadilishaji wa kushikilia nambari hiyo. Tutaianzisha baadaye. Hakikisha ubadilishaji una jina la kuelezea, kama kupe au mapigo ya moyo. Kwa sababu hii ndio kitanzi cha msingi cha kifaa, pause hii itaamua kasi ambayo kifaa hufanya kitanzi kuu, kwa hivyo ni thamani muhimu sana, na ni muhimu sana kuwa nambari ya uchawi isiyo na jina.

Kumbuka: Usijali kuhusu vizuizi vya kijivu kwenye picha ya tatu. Nitafika kwa wale baadaye.

Hatua ya 4: Tunataka kuguswa na Ingizo la Mtumiaji

Tunataka Kuguswa na Uingizaji wa Mtumiaji
Tunataka Kuguswa na Uingizaji wa Mtumiaji
Tunataka Kuguswa na Uingizaji wa Mtumiaji
Tunataka Kuguswa na Uingizaji wa Mtumiaji

Sasa, tunataka kuambia kifaa jinsi ya kushughulikia mashinikizo ya vitufe. Mawazo ya kwanza ya mtu yanaweza kuwa ni kutumia tu vizuizi vya "Wakati kitufe kinapobanwa" katika kitengo cha kuingiza, lakini tungependa udhibiti wa punjepunje zaidi ya hapo. Tutatumia kizuizi cha "on event from (X) with value (Y)" from the control category under the advanced section, kwa sababu tumesonga mbele kwenye mafunzo haya.

  • Unda nne "kwenye tukio kutoka kwa …" vitalu.

    • Wawili kati ya hawa wanapaswa kuangalia chanzo cha tukio "MICROBIT_ID_BUTTON_A"
    • Wawili kati ya hawa wanapaswa kuangalia chanzo cha tukio "MICROBIT_ID_BUTTON_B"
    • Kati ya hafla mbili zinazolenga kila kitufe:

      • Mtu anapaswa kuangalia tukio la aina "MICROBIT_BUTTON_EVT_UP"
      • Mtu anapaswa kuangalia tukio la aina "MICROBIT_BUTTON_EVT_DOWN"
    • Kumbuka: Chaguzi hizi kwa herufi kubwa zote ni lebo ambazo hutumiwa katika kiwango kidogo cha chini: nambari ndogo. Wao ni washikaji tu ambao baadaye hubadilishwa na nambari wakati nambari imekusanywa kwa binary inayoweza kutekelezwa. Ni rahisi kwa wanadamu kutumia maandiko haya kuliko kutafuta ni nambari gani ya kuweka, ingawa zote zingefanya kazi kwa njia ile ile.
  • Nilichagua, kama suala la mtindo, kuwa na kila "kwenye tukio kutoka…" kuzuia wito wa kazi ambayo inaelezea tukio lililoinuliwa. Ingawa sio lazima sana, kwa maoni yangu hii inaboresha usomaji. Ikiwa mtu anataka kufanya hivyo, wanaweza kuweka nambari ya kushughulikia hafla ndani ya "tukio kutoka"….

    Kumbuka: Kizuizi cha nambari kinachoshughulikia majibu ya kifaa kwenye hafla inaitwa kwa intuitively "mshughulikiaji wa hafla"

  • Ongeza, katika kila mshughulikiaji wa hafla, muundo huo kama mwingine unatumika kugawanya mtiririko wa udhibiti kulingana na hali ya kifaa kama muundo katika kitanzi kikuu cha serikali.
  • Ongeza vizuizi vya kazi ambavyo vinarekebisha hali hiyo ya kifaa kama ilivyoainishwa na mchoro wetu wa serikali

    • Tunajua kwamba wakati kifaa kiko katika hali isiyotengwa, kifaa kinapaswa kuguswa na kitufe A kilichobanwa na mpito kwenda hali LISTEN_A, na kwa kifungo B iliyobanwa na mpito kwenda hali LISTEN_B
    • Tunajua pia kwamba wakati kifaa kiko katika hali LISTEN_A au LISTEN_B, kifaa kinapaswa kuguswa na kitufe A kilichotolewa na kitufe B kilichotolewa, mtawaliwa, kwa kurudi tena kwa hali isiyotengwa.
    • Mwishowe, tunajua kwamba wakati kifaa kiko katika jimbo la TEAM_A au TEAM_B, kifaa kinapaswa kuguswa na kitufe A kilichobanwa na kitufe B kilichobanwa kwa kutangaza SIG_A na kwa kutangaza SIG_B mtawaliwa.

      Sio lazima wakati huu kujaza maelezo ya ishara za utangazaji. Tutapata hiyo baadaye. Kilicho muhimu ni kwamba tufundishe kazi hizi kutumia nambari ambayo tutaandika kwa kutoa jina la jina, kama matangazoSignalSIG_A, ambayo inaelezea kile kinachopaswa kufanywa wakati huo

Hatua ya 5: Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka

Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka
Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka
Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka
Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka
Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka
Tunataka kuanzisha Maadili ya Takwimu kwenye Kumbukumbu ya Vifaa Wakati Kifaa kinaongezeka

Kwa wakati huu, tumetumia anuwai nyingi (majina ya data), lakini hatujapeana maadili kwa majina hayo. Tunataka kifaa kipakie maadili ya vigeuzi hivi vyote kwenye kumbukumbu wakati inavu, kwa hivyo tunaweka uanzishaji wa anuwai hizi kwenye kizuizi cha "mwanzo".

Hizi ndizo maadili tunazopaswa kuanzisha:

  • Vipindi vya ishara, kulingana na itifaki ya ishara. Maadili LAZIMA yawe:

    • SIG_R = 0
    • SIG_A = 1
    • SIG_B = 2
    • Kumbuka: Niliweka viambatanisho hivi na "EnumSignals" ili kuashiria kwamba vigeuzi hivi vinapaswa kuishi kama kwamba ni sehemu ya aina iliyoorodheshwa iitwayo Ishara. Hivi ndivyo vigeuzi hivi vinaweza kutekelezwa katika lugha zingine za programu. Ufafanuzi na ufafanuzi wa aina zilizoorodheshwa ni zaidi ya upeo wa mafunzo yangu. Mtu anaweza kuipatia Google ikiwa wanataka. Viambishi hivi ni chaguo za mitindo tu na sio muhimu kabisa kwa utendaji mzuri wa programu.
  • Mara kwa mara ya serikali, ambayo inaweza kuwa ya kiholela maadamu yana thamani. Nilifanya chaguo la mtindo kutumia tu nambari kupanda kutoka 0, kama hivyo:

    • ZISIZOBATILIWA = 0
    • SIKILIZA_A = 1
    • SIKILIZA_B = 2
    • TIMU_A = 3
    • TEAM_B = 4
    • Kumbuka: Nilifanya uamuzi huo wa mtindo kuhusu viambishi awali vya vigeuzi hivi pia. Kwa kuongezea, nitataja kuwa kila kitu juu ya kazi hizi, maadili na utaratibu, ni wa kiholela kabisa. Haijalishi hata kwamba maadili haya ni sawa kutoka kwa kifaa hadi kifaa, kwa sababu hutumiwa tu ndani na sio kwa mawasiliano juu ya mtandao. Yote ya muhimu ni kwamba anuwai zina thamani na kwamba zinaweza kulinganishwa na kila mmoja kuona ikiwa zina sawa au la.
  • Kwa usomaji, mara kwa mara inayoitwa BOOT_STATE na kuiweka kwa UNASSIGNED. Hii inafanya ukweli kwamba tunaweka upya kwa hali ya boot, badala ya hali ya kiholela, wazi zaidi wakati kifaa kinapokea ishara ya kuweka upya, ambayo tutatekeleza baadaye.
  • Vipindi vya uhuishaji, vilivyotumika katika hatua ifuatayo kuunda michoro inayoruhusu usumbufu wa chini sana kupitia uingizaji wa mtumiaji. Hatujatumia hizi hadi sasa, lakini hakika zitaelezewa na kutumika katika sehemu ifuatayo. Maana ya baadhi ya haya yanapaswa kuwa ya angavu kwa sababu ya majina yao.

    • 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
  • Tofauti nyingine ya uhuishaji, wakati huu kaunta ambayo kwa kweli sio mara kwa mara. Kama kaunta nyingi, tunaianzisha kwa 0

    iTickLoadingAnimation = 0

  • Unda safu mbili za vigeu kushikilia muafaka wa michoro. Ya kwanza, ambayo naiita "uhuishaji wa upakiaji", inapaswa kuwa na picha nne (ambazo unaweza kukisia na uanzishaji wa mara kwa mara wa mwisho), na ya pili, ambayo naiita "uhuishaji wa matangazo", ambayo inapaswa kuwa na picha tatu. Ninapendekeza kutaja vigeuwe ili kuendana na fremu za uhuishaji, n.k. peteUhuishaji0, peteUhuishaji1…

    Unda maadili sawa ya picha kama nilivyofanya au tengeneza picha za asili na baridi zaidi

  • Mwishowe, lazima tuweke kikundi cha redio cha kifaa 0 kwa kutumia kizuizi cha "kikundi cha seti ya redio (X)"
  • Kwa hiari, andika ujumbe "Uanzishaji umekamilika" kwa pato la serial kumwambia mtumiaji kuwa kila kitu kilikwenda kwa kuogelea.
  • Sasa kwa kuwa tumemaliza kuweka kifaa, tunaweza kupiga kazi ya kitanzi cha hali yetu.

Hatua ya 6: Tunataka Kuonyesha Mifano kwa michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED

Tunataka Kuonyesha Michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED
Tunataka Kuonyesha Michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED
Tunataka Kuonyesha Mifano kwa michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED
Tunataka Kuonyesha Mifano kwa michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED
Tunataka Kuonyesha Michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED
Tunataka Kuonyesha Michoro na Picha Kutumia Uonyesho wa 5 X 5 wa LED

Na sasa kwa kitu tofauti kabisa.

Tunataka kuonyesha michoro kadhaa na herufi chache, lakini hatutaki kukatisha kitanzi kikuu cha serikali. Kwa bahati mbaya, vizuizi vinavyoonyesha picha na nyuzi za maandishi vina ucheleweshaji wa ms 400 kwa chaguo-msingi. Hakuna njia ya kubadilisha hii bila kuhariri uwakilishi wa JavaScript wa nambari. Kwa hivyo, hii ndio tutafanya.

  • Unda kazi kwa kila picha. Hii itamruhusu mtu atumie kizuizi kimoja kuonyesha picha badala ya kuhariri JavaScript kila wakati. Katika programu hii maalum, hakuna picha inayotumiwa zaidi ya mara moja, lakini bado nadhani mtindo huu hufanya nambari iwe rahisi kusoma.
  • Ongeza, katika kila kazi mpya, "onyesha picha (X) kwa zuia 0" na jina linalofanana la jina linalobadilisha (X)
  • Ongeza, katika kitanzi kuu cha serikali. "Onyesha kamba (X)" kwa kila kitalu kando na ile inayoshughulikia hali isiyotengwa. Ongeza herufi kwa kifaa kuonyesha kuonyesha majimbo yake tofauti. Hivi ndivyo nilifanya:

    • SIKILIZA_A: 'a'
    • SIKILIZA_B: 'b'
    • TIMU_A: 'A'
    • TEAM_B: 'B'

      Kwa hali ISIYOBORESHWA, piga simu kwenye shughuli ambayo itasasisha uhuishaji wa upakiaji. Tutajaza maelezo ya kazi hii hapa chini

  • Badilisha kwa hali ya javascript.
  • Pata kila simu kwa X.showImage (0) na basic.showString (X)
  • Badilisha kila moja iwe X.showImage (0, 0) au basic.showString (X, 0)

    • Kuongeza hoja hii ya ziada kutaweka kuchelewesha baada ya kitendo kuwa 0. Kwa chaguo-msingi, hii imeachwa nje, na kifaa kitasimama kwa ms 400 baada ya utekelezaji wa kila moja ya vitalu hivi.
    • Sasa, tuna utaratibu wa karibu wa ucheleweshaji wa kuonyesha picha zetu kwenye vizuizi vya uhuishaji, ambavyo tunaweza sasa kujenga

Kwanza, tutaunda kazi rahisi ya uhuishaji ya utangazaji. Ni rahisi kwa sababu hatutaki mtumiaji aweze kufanya chochote mpaka kazi hiyo ikamilike, ili kuwazuia kutamka kazi ya utangazaji. Ili kukamilisha hili, tunaweza kuweka tu mtiririko wa udhibiti uliozuiliwa kwenye kizuizi hadi kazi ikamilike, ambayo ni tabia ya kawaida.

  • Unda kazi ambayo itaonyesha uhuishaji wa matangazo.
  • Ndani ya kizuizi hicho, ongeza simu tatu za kufanya kazi, moja kwa kila fremu ya uhuishaji, kwa utaratibu ambao inapaswa kuonyeshwa
  • Ongeza kizuizi cha "subiri (sisi) (X)" baada ya kila simu kwenye kazi ya kuonyesha picha.

    Kumbuka: Kizuizi hiki, kutoka sehemu ya udhibiti wa hali ya juu, kitaenda mbali zaidi kuliko "pause (ms)" kwa kuwa itasimamisha kabisa processor mpaka wakati maalum utakapopita. Wakati kizuizi cha pause kinatumiwa, inawezekana kwamba kifaa kitafanya kazi zingine nyuma ya pazia. Hii haiwezekani na kizuizi cha kusubiri

  • Badilisha (X) na (MS_PER_FRAME_BROADCAST_ANIMATION x MICROSECONDS_PER_MILLISECOND)
  • Uhuishaji unapaswa sasa kufanya kazi vizuri

Pili, tutaunda utaratibu wa kuonyesha uhuishaji wa upakiaji. Wazo nyuma ya hii ni kusasisha onyesho la LED kwa muda maalum, ambao tunafafanua katika ubadilishaji wa MS_PER_DEVICE_TICK. Thamani hii, urefu wa kupe wa kifaa, ni idadi ya milliseconds ambazo kifaa husimama baada ya kumaliza kila upunguzaji wa kitanzi cha serikali. Kwa sababu thamani hii ni ndogo ya kutosha, tunaweza kusasisha onyesho mara moja wakati wa kila upunguzaji wa kitanzi cha kuonyesha na itaonekana kwa mtumiaji kuwa uhuishaji unaendelea bila mshono, na wakati hali inabadilika, kutakuwa na latency kidogo kati ya pembejeo ya mtumiaji maonyesho yakisasishwa. Kwa kuhesabu kupe, ambayo tunafanya na ubadilishaji wa iTickLoadingAnimation, tunaweza kuonyesha sura inayofaa ya uhuishaji.

  • Unda kazi ambayo itasasisha uhuishaji wa upakiaji
  • Ongeza hali ya kuangalia ikiwa kaunta ya kupe imefikia kiwango cha juu. Hali hii itakuwa ya kweli ikiwa thamani ya kaunta ya kupe ni kubwa kuliko idadi ya fremu katika uhuishaji wa upakiaji iliongezeka kwa idadi ya kupe kuonyesha kila fremu

    Ikiwa hali ni ya kweli, weka tena iTickLoadingAnimation kuwa 0

  • Ongeza kizuizi cha hali ikiwa -ngine. Hizi zitaamua sura gani ya uhuishaji kuonyesha.

    Kwa kila fremu ya uhuishaji, ikiwa kaunta ya kupe ni chini ya idadi ya kupe katika kila uhuishaji iliyozidishwa na nambari ya fremu ya uhuishaji (kuanzia 1), kisha onyesha fremu hiyo, vingine angalia ikiwa fremu inayofuata ndiyo kuonyeshwa

  • Chini ya kizuizi, nyongeza iTickLoadingAnimation
  • Uhuishaji unapaswa sasa kufanya kazi vizuri

Kumbuka: Vitalu vyote vya kijivu vinavyoonekana katika mfano wangu vinazalishwa wakati mtu anabadilisha uwakilishi wa javascript wa block. Inamaanisha tu kwamba kizuizi kinawakilisha nambari ya javascript ambayo haiwezi kuwakilishwa kwa kutumia seti ya kiwango ya vizuizi na lazima ibadilishwe katika fomu ya maandishi.

Hatua ya 7: Tunataka Kusambaza Takwimu bila waya Kutumia Redio ya Kifaa

Tunataka Kusambaza Takwimu bila waya Kutumia Redio ya Kifaa
Tunataka Kusambaza Takwimu bila waya Kutumia Redio ya Kifaa

Hatua hii ni fupi sana kuliko ya awali. Kwa kweli, labda ni hatua fupi zaidi katika mafunzo haya yote.

Kumbuka kwamba wakati tulipoweka majibu ya kifaa kwa uingizaji wa mtumiaji, nilikuwa na vizuizi viwili kwenye skrini ambayo haijaelezewa katika sehemu hiyo. Hizi zilikuwa wito kwa kazi zinazotuma ishara juu ya redio. Zaidi haswa:

  • Kwenye kitufe A kilichoshinikizwa:

    • Ikiwa kifaa kiko katika jimbo TEAM_A:

      Ishara ya matangazo SIG_A

  • Kwenye kitufe B kilichobanwa:

    • Ikiwa kifaa kiko katika jimbo TEAM_B

      Ishara ya matangazo SIG_B

Unda kazi hizi ikiwa hazipo tayari.

Katika kila kazi:

  • Piga kazi ya uhuishaji ya utangazaji. Hii itazuia kitu kingine chochote kutokea hadi kitakapokamilika, ambacho kitakuwa katika MS_PER_FRAME_BROADCAST_ANIMATION * sekunde 3 = 1.5. Mara kwa mara huzidishwa na tatu kwa sababu kuna muafaka tatu kwenye uhuishaji. Hii ni ya kiholela na zaidi inaweza kuongezwa ikiwa uboreshaji wa uzuri ni wa kutosha. Kusudi la pili la uhuishaji huu ni kumzuia mtumiaji kutamka kazi ya utangazaji.
  • Ongeza kizuizi cha "nambari ya kutuma redio (X)", iko wapi ishara ya mara kwa mara iliyotajwa katika jina la kazi

Hiyo ndiyo yote mtu anahitaji kutangaza kupitia redio.

Hatua ya 8: Tunataka Kusikiliza na Kupokea Takwimu Juu ya Redio ya Kifaa na Kuichakata Ipasavyo

Tunataka Kusikiliza na Kupokea Takwimu Juu ya Redio ya Kifaa na Kuichakata Ipasavyo
Tunataka Kusikiliza na Kupokea Takwimu Juu ya Redio ya Kifaa na Kuichakata Ipasavyo
Tunataka Kusikiliza na Kupokea Takwimu Juu ya Redio ya Kifaa na Kuichakata Ipasavyo
Tunataka Kusikiliza na Kupokea Takwimu Juu ya Redio ya Kifaa na Kuichakata Ipasavyo

Hii ni hatua ya mwisho kuunda programu kuu.

Tutaambia kifaa jinsi ya kusindika ishara zinazoingia za redio. Kwanza, kifaa chetu kitaita ishara inayopokelewa. Halafu, kulingana na thamani ya ishara hiyo, itaamua ni hatua gani ya kuchukua, ikiwa ipo.

Kwanza:

  1. Unda kificho cha nambari ukianza na kizuizi cha "kwenye redio iliyopokelewa (X)".
  2. Kwa hiari, mpe thamani iliyopokea kwa ubadilishaji mwingine na jina la kuelezea zaidi.
  3. Piga kazi ambayo itashughulikia ishara

Pili, katika kazi ya usindikaji wa ishara:

  1. Unda kizuizi cha taarifa-ikiwa nyingine ambayo udhibiti wa tawi hutiririka kulingana na thamani ya ishara.
  2. Ikiwa ishara ilikuwa SIG_R

    Weka hali ya kifaa kuwa BOOT_STATE (hii ndio sababu tuliunda hii mara kwa mara mapema)

  3. Ikiwa ishara ilikuwa SIG_A na ikiwa hali ya sasa ni LISTEN_A

    Weka hali ya kifaa iwe TEAM_A

  4. Ikiwa ishara ilikuwa SIG_B na ikiwa hali ya sasa ni LISTEN_B

    Weka hali ya kifaa iwe TEAM_B

Hiyo ndio. Programu imekamilika.

Hatua ya 9: Kifaa cha Mizizi: Tunataka Kuwa na Uwezo wa kuchagua Ishara

Kifaa cha Mizizi: Tunataka Kuwa na Uwezo wa kuchagua Ishara
Kifaa cha Mizizi: Tunataka Kuwa na Uwezo wa kuchagua Ishara

Sasa, tutaandika programu rahisi ya kifaa cha "mizizi", ambayo ni kusema, kifaa ambacho kitadhibiti mtandao.

Kifaa hiki kitahitaji kutekeleza kazi mbili:

  • Tunataka kumruhusu mtumiaji kuchagua moja ya ishara zetu
  • Tunataka kumruhusu mtumiaji kutangaza ishara

Kwa sababu maelezo ya programu hii ni sehemu ndogo ya iliyotangulia, nitatoa muhtasari lakini sitaingia kwa undani kama vile nilikuwa hapo awali. Picha hapo juu ina nambari kamili ya programu tumizi hii.

Kuruhusu mtumiaji kuchagua ishara:

  1. Anzisha vigeuzi 5 katika kizuizi cha "mwanzo":

    1. Ishara tatu (0, 1, 2)
    2. Idadi ya ishara (3)
    3. Tofauti kushikilia ishara iliyochaguliwa sasa (mwanzoni imewekwa kwa ishara ya kwanza, 0)
  2. Shughulikia kitufe cha kitufe cha A:

    1. Ongeza ishara iliyochaguliwa
    2. Angalia ikiwa ishara iliyochaguliwa ni kubwa kuliko au sawa na idadi ya ishara

      Ikiwa ndivyo, weka ishara iliyochaguliwa kuwa 0

  3. Baada ya kizuizi cha kuanza, endesha kitanzi "milele" ambacho kinaonyesha thamani ya ishara iliyochaguliwa sasa bila kuchelewa

Kuruhusu mtumiaji kutangaza ishara

  1. Weka kikundi cha redio kuwa 0 kwenye kizuizi cha "mwanzo"
  2. Shughulikia kitufe cha kitufe cha B:

    Tangaza ishara iliyochaguliwa kwa kutumia kizuizi cha "nambari ya kutuma redio (X)"

Hiyo ndio. Maombi ya node ya mizizi ni rahisi sana.

Hatua ya 10: Tumemalizika

Tumemalizika
Tumemalizika

Hapo juu ni picha ya vifaa vinavyoendesha programu. Wale wawili kulia wanaendesha programu kuu ya "mtumiaji", na yule wa kushoto anaendesha programu ya "mizizi".

Nilionyesha mchezo huu kwenye CS Connections 2018, mkutano wa majira ya joto wa wiki moja kwa waalimu wa shule za kati na sekondari juu ya elimu ya sayansi ya kompyuta. Niliwapatia waalimu vifaa 40 na kuwaelezea sheria hizo. Wengi waligundua mchezo huo kuwa wa kuburudisha, na wengi waliuona kuwa wa kutatanisha hadi walipogundua jinsi ya kucheza. Maonyesho yalikuwa mafupi, lakini tuliona mchezo kuwa wa kufurahisha kati ya umati wa watu tofauti.

Habari zaidi juu ya Uunganisho wa CS 2018 inaweza kupatikana hapa.

Ilipendekeza: