Tetris Yangu Kamili
Hii Ni Nini
Tetris ni mchezo wa hadithi na mmoja ninayoupenda sana. Ninapenda mchezo huo kwa dhati na ninafurahia kuucheza. Ni njia nzuri ya kupunguza msongo wa mawazo. Kwa mradi wa wikendi wa kufurahisha, niliamua kujenga mchezo huo kama mchezo/appen ya kivinjari iliyoundwa kwa ajili ya Desktop na Mobile, nikitumia kanuni za vibe coding. Sehemu ya simu ya toleo hili ilichochewa na Play-Tetris, ambayo ina mpangilio mzuri wa simu na udhibiti unaotegemea svipe. Angalia na ucheze utekelezaji wangu wa Tetris hapa, ni kile ninachodhani ni toleo “kamili” la Tetris.
Zaidi ya Msimbo
Sikuanzishi kujenga nakala ya Tetris kama mradi wa wasifu au kujifunza kitu kipya. Niliijenga kwa sababu nilihitaji kwa dhati. Ninapokuwa na msongo wa mawazo, iwe ni wiki ngumu kazini au maisha yanapokusanyika, Tetris ni mojawapo ya vitu chache vya kiafya vinavyonisaidia kunirudisha. Ninapokuwa na msongo huwa ninakula sana, jambo ambalo huongezeka kwa muda, hivyo kuwa na kitu kinachofanya kazi bila hasara yoyote ni jambo kubwa kwangu. Dakika 10 hadi 30 tu za kuangusha vipande hunifanya nipate nafuu kidogo kwa akili. Si tu kutuliza kawaida kwangu, ni njia ya kuwa na kitu rahisi na chenye lengo cha kumwaga msongo huo. Kuna utafiti mzuri unaonyesha Tetris inaweza kuathiri jinsi ubongo unavyoshughulikia kumbukumbu zinazovurugika na msongo, kwa mfano katika majaribio ya filamu za trauma, kwa watu waliopatwa baada ya ajali halisi, na kama nyongeza kwa tiba zenye mabadiliko ya ubongo yenye kupimika. Sikujiwekei nia ya kubadilisha mchezo huu kuwa tiba ya kiafya, lakini ni baridi kuona kwamba kuna sayansi halisi inayoweza kuunga mkono kile nilichonihisi, kwamba Tetris inaweza kwa dhati kuwasaidia watu kushughulikia msongo wa mawazo.
Hivyo nilitafuta toleo zuri la Tetris la kucheza, na shida ilikuwa kwamba hakuna kitu humo kilichokidhi jinsi nilivyotaka kucheza. Programu za simu kwenye iOS App Store zimejaa matangazo na microtransactions. Matoleo ya wavuti yalikuwa yakichelewesha au yalihisi mabaya kwenye simu. Toleo la zamani la NES ni nzuri lakini inahitaji emulator na vifaa vya ziada. Hata nlinunua Miyoo Mini nikidhani itatatua shida, na kile nilichokifanya ni kubeba kifaa cha pili tu kucheza Tetris. Katika hatua fulani nilitambua nilikuwa nakwenda kutafuta toleo linalofaa zaidi ya muda ambao ungechukua kujijengea moja.
Kwa kivinjari vya kisasa, zana za LLM kama Claude Code, na mtiririko wa kazi kama vibe coding, hatimaye ilinifanya nihisi ni wakati mwafaka kujenga Tetris nililotaka mwenyewe. Haraka, minimal, bila matangazo, bila akaunti, bila duka la programu. Mchezo wa kivinjari tu unaofanya kazi kwenye simu yangu na kompyuta yangu ya mezani na ninauwasilisha kikamilifu. Katika siku moja nilikuwa na toleo linalofanya kazi, na baada ya takriban wiki ya kazi mara kwa mara kufanya iwe imara na kupata hisia sahihi kwenye desktop na mobile, nilifarijika nalo.
Ninashiriki kwa sababu ikiwa itasaidia hata mtu mmoja kutulia kama inavyonisaidia mimi, hiyo itanifanya nifurahie sana. Ni jambo dogo, lakini wakati mwingine jambo dogo ndilo hasa unalohitaji.
Vipengele
- Bodi ya Tetris ya jadi 10x20
- Udhibiti kamili wa kibodi kwenye Desktop na udhibiti wa ishara za kugusa kwenye Mobile
- Randomizer ya vipande aina saba (seven-bag) ya kawaida
- Kuhifadhi kipande (Hold) na onyesho la kipande kinachofuata
- Uonyesho wa kipande cha mzaha (ghost piece) unaoonyesha wapi vipande vitashuka
- Mwinuko wa kasi unaotegemea ngazi na kuchelewesha kufunga kwa nguvu (dynamic lock delay)
- Ufuatiliaji wa alama, mistari, ngazi, na alama za juu umehifadhiwa kwenye hifadhi ya ndani
- Alama za kuangusha polepole (soft drop) na kuangusha ghafi (hard drop)
- Menyu ya kusitisha kwa chaguzi za kuendelea, kuanza upya, na kuondoka
- Mvuto wa mwangaza wa kusafisha mstari
- Muziki wa asili unaoweza kuzimwa/kuzima (hali imehifadhiwa)
- Msaada wa eneo salama la iOS (Dynamic Island, notch, kiashiria cha nyumbani)
- Msaada wa kazi bila mtandao kupitia Service Worker (inafanya kazi bila intaneti baada ya ziara ya kwanza)
- Inaweza kusakinishwa kama PWA (ongeza kwenye skrini ya nyumbani kwenye iOS/Android kwa uzoefu kama wa programu)
Vidhibiti
Desktop (Kibodi)
| Kitendo | Vifungo |
|---|---|
| Sogeza | ← → or A D |
| Shuka Polepole | ↓ or S |
| Shuka Ghafi | Space |
| Zungusha (kwa mwelekeo wa saa) | ↑ W X |
| Zungusha (kinyume cha saa) | Z |
| Shikilia | C or LShift |
| Zima Sauti | M |
| Simamisha | Esc or P |
Mobile (Gusa)
| Kitendo | Ishara |
|---|---|
| Sogeza | Teleza kushoto / kulia |
| Shuka Polepole | Shikilia na vuta chini |
| Shuka Ghafi | Kuteleza kwa haraka chini |
| Zungusha (kwa mwelekeo wa saa) | Gusa |
| Shikilia | Kuteleza kwa haraka juu |
Mwinuko wa Ugumu
Mwinuko wa kasi na kuchelewesha kufunga (lock delay) katika toleo hili vilirekebishwa kwa kutumia utafiti kuhusu jinsi michezo ya Tetris ya jadi na ya kisasa inavyoshughulikia maendeleo ya ugumu. Katika NES Tetris ya asili, mvutano unafikia safu moja kwa fremu katika ngazi ya 29, ambayo ikawa ile inayojulikana kama “kill screen” ambapo mchezo unakuwa siyo wa kuchezwa kwa watu wengi. Hiyo haikuwa mwisho uliopangwa, ilikuwa zaidi athari ya vifaa na jinsi DAS (Delayed Auto Shift) ilikuwa polepole sana kufuatilia kasi ya kuangusha. Willis Gibson alithibitisha hili mwaka 2024 alipopita hadi hapo na kufanya mchezo kutatizwa katika ngazi ya 157 (akavunja mchezo) link.
Michezo ya kisasa kama TGM (Tetris: The Grand Master) ilitatua hili kwa njia tofauti. Badala ya kufanya vipande vishuke tu kwa kasi hadi mchezo ubomoke, TGM inaweka upeo wa mvutano kwa 20G (kuanguka mara moja) kisha inakaza dirisha zingine za wakati kama kuchelewesha kufunga na DAS kuongeza ugumu. Mstari wa kawaida wa Tetris Guideline unatumia kuchelewesha kufunga kwa 500ms na hadi upya wa harakati 15, jambo ambalo toleo hili linafuata. Utafiti wa TGM2 Death mode na TGM3 Shirase unaonyesha kwamba kiwango cha chini kinachofaa kwa mchezo wa mashindano ni takriban 250ms ya kuchelewesha kufunga na DAS ya haraka, wakati chochote chini ya 133ms ni eneo la wataalamu.
Kulingana na haya yote, mwinuko wa kasi hapa unaweka upeo mvutano kwa 33ms kwa kila safu (sawa na ngazi za NES 19 hadi 28) badala ya kwenda kwa kuanguka mara moja, na DAS inapungua kutoka 170ms hadi 100ms katika ngazi za juu ili uweze kupita bodi wakati wa kuchelewesha kufunga. Lengo lilikuwa kufanya ngazi za juu zihisi kwa kasi sana lakini ziko sawa, karibu na jinsi Tetris 99 na TGM zinavyoshughulikia ugumu wa mwisho wa mchezo badala ya njia ya NES ya asili ya kumruhusu kasi ghafi kuondoka mbele ya kuingiza kwako.
Ndani ya Mfumo
- Muundo unaoweza kujibadilisha ulioboreshwa kwa Desktop na Mobile (mwelekeo wa portrait)
- Sprites za vipande zilizotayarishwa kabla na mandhari ya gridi kwa utendakazi
- Inatumia Super Rotation System (SRS) aina ya wall kicks kwa kuzungusha vipande
- Ugunduzi wa ishara za kugusa unaotegemea kasi (velocity) kwa utofauti wa tiririka vs buruta
- Mfumo wa muda unaotegemea ngazi kwa kasi ya mvutano na kuchelewesha kufunga
- Alama za juu na hali ya kutuliza sauti zimehifadhiwa kwa kutumia
localStorage - Chanzo cha muziki wa nyuma NmCCQxVBfyM
- Mradi umefunguliwa kabisa chini ya MIT License
- Imetengenezwa kwa zana za AI zifuatazo:
- Claude Code CLI - kodishaji/maendeleo
- Gemini CLI - kodishaji/maendeleo
- Cha CLI - kodishaji na uandishi
- xAI Grok - nembo na ikon
- Perplexity - utafiti wa bug
Mawazo ya Mwisho
Huu ulikuwa mmoja wa miradi ambayo motisha haikuwa ya kiufundi, ilikuwa ya kibinafsi. Nilitaka tu toleo la Tetris ambalo lingefanya kazi jinsi nilivyotaka, bila matangazo, bila vifaa vya ziada, na bila kutegemea programu ya mtu mwingine ambayo inaweza kupotea au kubadilika wakati wowote. Ukweli kwamba niliweza kutoka wazo hadi mchezo uliopambwa ndani ya takriban wiki ya kazi mara kwa mara nikitumia zana za AI za kisasa na vibe coding unasema mengi kuhusu tulipo sasa katika maendeleo ya programu.
Nimetumia toleo hili karibu kila siku tangu nilipotengeneza, na bado linafanya hasa kile ninachohitaji kifanye. Linanisaidia niondoke kwa chochote kinachonisumbua, nikalenga kitu rahisi kwa dakika chache, kisha nirudi nikiwa na akili iliyo wazi zaidi. Ikiuijaribu na ikakufanyia hivyo pia, hiyo ndiyo matokeo bora kabisa ningeweza kuomba. Na ikiwa ungependa kuiigawa (fork), kurekebisha mwinuko wa kasi, kubadilisha vidhibiti, au kujenga juu yake, fanya hivyo. Ikiwa utapata mdudu au una pendekezo, jisikie huru kufungua suala kwenye hifadhi. Hilo ndilo lengo kuu la kuifanya iwe chanzo wazi.