Eli onko tapaa selvittää näytöllä olevan ASCII-merkin väriä. Merkin koodinhan saa selville SCREEN(rivi, sarkain)-käskyllä, mutta entäs väri? Yritin etsiä HELP:stä mutta ei löytynyt oikein mitään. Täytynee käyttää portteja, vai?
Tekstinäytön sisältö on tallennettu muistiin segmentistä &HB800 alkaen. Merkit on tallennettu ylhäältä alas ja vasemmalta oikealle niin, että ensimmäinen tavu on merkin koodi ja toinen tavu on sen väri. Sen vuoksi POKElla ja PEEKillä onnistuu sekä merkkien kirjoittaminen että niiden lukeminen.
CLS 'tekstinäytön muistisegmentti DEF SEG = &HB800 'kirjoituskohdan koordinaatit x% = 10 y% = 5 'lasketaan kirjoituskohta muistissa kohta& = (y% - 1) * 160 + (x% - 1) * 2 'kirjoitetaan merkki näytölle POKE kohta&, 65 '65 on A-kirjaimen koodi POKE kohta& + 1, 1 '1 on sininen väri 'luetaan merkki näytöltä merkki% = PEEK(kohta&) vari% = PEEK(kohta& + 1) PRINT "Merkin ASCII-koodi on"; merkki%; "ja sen väri on"; vari%
OK. Toimii, kiitos!
Mutta mitenkäs kun teen peliä, jossa pitää selvittää merkin väri ja sitten vaihtaa COLOR-käskyllä kirjoitusväri samaksi ja jostain syystä arvot joita PEEK antaa ovat luokaa 36 tai 112, vaikka eikös SCREEN 0:ssa ole vain värit 0-15? Arvelisin että kyse on taustaväristä. Olenko oikeassa ja jos olen, niin miten luvusta tietää mikä on tekstiväri ja mikä taustaväri?
Taustaväri on ylemmissä 4:ssä bitissä ja merkin väri 4:ssä alemmassa (tai toisinpäin, en juuri nyt muista). Voit kuitenkin testata sitä AND-bittioperaattorilla.
Eli
vari% = PEEK(kohta& + 1) tvari% = vari% AND 240 '4 y., 16+32+64+128 mvari% = vari% AND 15 '4 alempaa bittiä, 1+2+4+8 PRINT "Merkki koostuu väreistä "; tvari%; "ja"; mvari%
Ööh... joo en ole varma käsitinkö tuon bittiselityksen oikein mutta pääasia on että saan toimimaan. Kiitti!
Jeps, toimii! Mutta sehän oli tietysti loogisesti:
tvari% = (vari% AND 240) / 16
Sen hokasin jopa itsekin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.