Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: ASCII-merkin värin palautus

hunajavohveli [06.12.2003 21:33:44]

#

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?

Antti Laaksonen [06.12.2003 21:44:44]

#

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%

hunajavohveli [06.12.2003 21:49:26]

#

OK. Toimii, kiitos!

hunajavohveli [07.12.2003 18:50:10]

#

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?

sqwiik [07.12.2003 19:09:03]

#

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%

hunajavohveli [07.12.2003 21:19:14]

#

Ööh... joo en ole varma käsitinkö tuon bittiselityksen oikein mutta pääasia on että saan toimimaan. Kiitti!

hunajavohveli [07.12.2003 21:24:19]

#

Jeps, toimii! Mutta sehän oli tietysti loogisesti:
tvari% = (vari% AND 240) / 16
Sen hokasin jopa itsekin.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta