Neljän suora -peli Minecraftissa - purnukka

purnukka

arkistojen dumppauspaikka.

Neljän suora -peli Minecraftissa

Kesä on parhainta aikaa prokrastinointiin. Nyt pitäisi kirjoittaa kandia, mutta löydän itseni tekemästä mitä ihmeellisempiä sivuprojekteja sen sijasta. Tällä kertaa tuli sitten väännettyä neljän suora Minecraftissa redstonen avulla.

Speksejä

  • normaali 7 × 6 -pelilauta
  • automaaginen vuoronvaihto ääniefekteillä
  • täysin digitaalinen, ei hiekkaa tmv. virityksiä
  • voittajan tunnistus vaakaan, pystyyn ja vinottain

 

Miten helvetissä tämä voi toimia?

Sitä mietin itsekin useammassa kohdassa rakenteluvaiheessa. Ja useammassa kohdassa rakenteluvaiheessa juuri mikään ei toiminut. Oheisessa kuvassa on laitos ylhäältä päin kuvattuna.

Tsydeemi ylhäältä katsottuna
Tsydeemi ylhäältä katsottuna

Vehje koostuu neljästä erilaisesta palikasta, jotka juttelevat keskenään redstonen avulla:

  • näyttösolut ovat pelin näkyvin osa, ne kertovat kunkin solun tilanteen (tyhjä/piste/rengas)
  • muisti pitää kirjaa siitä, onko jompikumpi merkeistä solussa aktiivisena
  • "tiputin" pitää huolen, että signaali pysähtyy alhaalta ylöspäin mennessä siihen soluun, joka on ensimmäiseksi vapaana; eli tyhjä solu estää signaalin kulkemisen ylöspäin (ja muistiblokissa on varmistin, joka estää palan asettamisen jo täytettyyn soluun)
  • voitontunnistus käyttää redstonesignaalin heikkenemistä hyödyksi, ja tunnistaa voittotilanteet kaikissa suunnissa

Lisäksi pelissä on tietysti myös resettinamiska, sekä vuoronvaihtologiikka, joka toimii syöteboksin yhteydessä.

 

Muisti

Solun muistipalikka on sikäli typerästi tehty, että siinä kummankin "nappulan" tila on säilytetty omana t-flipfloppinaan. Fiksumpaa olisi ehkä ollut säilöä statusbitti ja muistibitti erikseen. Näin se nyt joka tapauksessa tuli toteutettua.

Solun muistipalikka
Solun muistipalikka

Flip-floppina 1x1-pötkylä, joka toimii observerien ja pistonien avulla. Redstonepalikan sijaan päätin käyttää vesipataa, jotta tilan saa luettua siistimmin, eikä redstonepalikka säteile sähköä joka suuntaan...

Muistista lähtee tilatieto sekä ruudulle että "takaisinpäin" voitontunnistimelle ja tiputtimelle. Signaali kulkee siis ensin eteenpäin, ja sitten taaksepäin, mikä on näin jälkikäteen ajateltuna törkeän typerä vaihtoehto.

Lisäksi muistipalikkaan on ängetty myös resettisignaalin tuonti (kuvassa etuvasemmalla näkyvä piston), joka siis palauttaa aktiivisena olevan flipflopin takaisin nolla-asentoon.

 

Tiputin eli lukkomekanismi

Tiputinmekanismin monet kopiot takaosassa
Tiputinmekanismin monet kopiot takaosassa

Kuvassa näkyvät pistonit estävät signaalin pääsyn jo täytettyyn soluun.

Tiputtimelle oleellisinta on se, että signaali pysähtyy siihen soluun, joka on ensimmäisenä tyhjä alhaalta ylöspäin mentäessä. Siis tiputtimelle riittääkin tieto muistista siitä, että onko jokin nappula tällä hetkellä ko. solussa. Tiputtimen kanssa suurin ongelma oli lukitussignaalin tuonti "joka-toinen-tyhjä"-rakojen välistä, mutta sekin lopulta onnistui. Ei ehkä kovin pienellä signaaliviiveellä, mutta onnistui kuitenkin!

Jos olisin ollut fiksumpi, olisin tehnyt signaalista ylhäältä alaspäin kulkevan, jolloin jonkinlaisen tippumisanimaation tekeminen olisi ollut helpompaa. Nyt sellaista animaatiota ei ole, ja nappula vain ilmestyy asianmukaiseen ruutuunsa.

 

Voitontunnistus

Rakensin ensin pelin muutoin valmiiksi ennen voitontunnistusmööpeliin kajoamista. Olin pohtinut jonkinlaista logiikkaa voitontunnistusta varten, ja jopa dekooderin käyttöä, mutta voittotapauksia on niin paljon, että muunlainen logiikka olisi vienyt aika paljon tilaa. Perusajatuksena olisi ollut tutkia tilannetta, jossa neljän solun keskelle saataisiin tieto, että vasemmalla palaa kaksi ja oikealla kaksi ...mutta onneksi löysin paremman vaihtoehdon!

Vaakamallinen voitontunnistajamasiina
Vaakamallinen voitontunnistajamasiina

Tämä voitontunnistus on saanut innoitusta monien muiden käyttämästä vastaavasta, jonka selitys löytyy esim. tästä videosta.

Redstonesignaali tunnetusti heikkenee yhden pykälän verran joka palan matkalla. Siis järjestelemällä signaalitulot sopivankokoiseksi ruudukoksi (tarkalleen 5x5-ruudukoksi) voi signaalin heikkenemistä käyttää apuna. Kuvan mukaisella systeemillä saadaan aina yksi tunnistussoihtu syttymään, kun neljä signaalia on ketjusta pimeänä (kytkimet ovat kuvassa signaalisisääntuloja).

Ketjussa käytetään lasipalikkaa eräänlaisena diodina: signaali pääsee vain vasemmalta oikealle (siis lasipalikkaa pitkin vain ylös muttei alas), jolloin se heikkenee asianmukaisesti. Näin soihtu tunnistaa aina neljä siitä vasemmanpuoleista sisääntuloa.

Voitontunnistus "siniselle" pelaajalle
Voitontunnistus "siniselle" pelaajalle

Sitten pitikin enää rakentaa sama voitontunnistus pysty- ja vinottaissuuntaisesti. En lähtenyt lainkaan yhtä vaikeaan systeemiin kuin edellä linkatulla videolla on näytetty, vaan totesin homman toimivan yhtä hyvin myös simppelimmin.

Esimerkki vinottaismallisesta voitontunnistusrivistöstä. Huomaa, että joka valkoiselle villalle ei ole soihtua!
Esimerkki vinottaismallisesta voitontunnistusrivistöstä. Huomaa, että joka valkoiselle villalle ei ole soihtua!

Ongelmakseni koitui aluksi se, etten tajunnut, ettei ihan joka "moduuliin" voitontunnistusrivissä pidä laittaa ulostulosoihtua. Esimerkiksi pisimmälläkin vinottaisrivillä voi olla vain kolme voittotilannetta, joten vain kolme viimeistä soihtupaikkaa pitää ottaa huomioon. Aikani viriteltyä ja säädettyä (ja nukuttuani yhden yön välissä) sain kuin sainkin homman toimimaan!

Voitontunnistin lähettää signaalinsa näytön päällä olevaan voittonäyttöön, jossa yksinkertaisesti syttyy valaisemaan voittanut nappulatyyppi ja teksti "VOITTI".

 

Näyttö

Näyttö on koko pelin yksinkertaisin osa. Se ottaa sisään "nappulasignaalin" ja näyttää sen mukaisen kuvion, joko renkaan tai pisteen.

Yksittäisen solun näyttömoduuli
Yksittäisen solun näyttömoduuli

Näytöllä nähtävät symbolit
Näytöllä nähtävät symbolit

Aloin aluksi kaavailemaan pistoneilla toiminutta X- tai O-merkkinäyttöä, mutta sen piuhoitus vei liikaa tilaa (pistonit kun ovat melko herkkiä ottamaan virtaa ympäriltään...perkele!). Seuraavaksi kokeilin värivilloilla toiminutta näyttöä, joka toimikin jonkin aikaa, mutta virhesignaalien vuoksi pystyrivien pistonit päätyivät usein ottamaan mukaansa väärän välistä villaa, tai vielä parempaa, toisensa...

Yritinpä vielä beaconien valokeilan värjäämiseen perustunutta merkkinäyttöä, mutta värisekoitukset eivät onnistuneet kovin hyvin näin pienessä tilassa.

Siispä valonäyttö siitä tuli!

 

Pelaajaboksi ja syötteet

Pelaamista varten kummallekin pelaajalle on oma nappirivistönsä ja vuorovalonsa. Vuorotilanne vaihdetaan pelaajaboksin alla olevalla t-flipflopilla, jonka tila myös määrää sen, annetaanko pelaajan namiskuukkeleiden syötteiden mennä pelilaudalle asti.

Peliboksin yläpuoleisnäkymä. Värivillat ovat pelilaudan sarakkeiden syötteitä, jotka vuorotilanteesta riippuen joko luetaan tai ei lueta. Vuorotieto lähetetään pelilaudalle yhtenä linjana, resettitieto toisena.
Peliboksin yläpuoleisnäkymä. Värivillat ovat pelilaudan sarakkeiden syötteitä, jotka vuorotilanteesta riippuen joko luetaan tai ei lueta. Vuorotieto lähetetään pelilaudalle yhtenä linjana, resettitieto toisena.

 

Parannuksia?

Jälkikäteen huomaa aina monia asioita, joita voisi tehdä fiksummin. Tavoitteena olisi parannella tätäkin masiinaa vielä jonkin verran, ja tehdä siitä mahdollisesti kompaktimpi.

Yritän muistaa päivittää alle uusia latauslinkkejä sitä mukaa, kun jaksan tehdä parannuksia (...ja korjauksia: tässä masiinassa varmasti on vielä löytymättömiä ongelmia!)

 

MisSÄ tÄtÄ VOi PeLATA???? laTAusLinkkI???????

Neljän suora -pelin schematic- ja maailmatiedostot on suojattu CC BY-NC-SA 4.0 -lisenssillä.

Huomioi, että masiina ei välttämättä toimi täysin oikein, koska sitä ei ole testattu tarpeeksi.

Schematic-tiedostot:

Kommentit

Ei vielä yhtään kommenttia!

Jätä kommentti

Kommentoidessasi ip-osoitteesi ja nimimerkkisi tallennetaan systeemiin.