Tämä listaus sisältää aliohjelman TaytaKuvio, joka täyttää tietyllä värillä rajatun alueen toisella värillä, vähän niinkuin QB:n oma PAINT-käsky. Käskynä tämä on varmasti PAINTia hitaampi, mutta tätä voi halutessaan muokata ja lisätä omia ominaisuuksia (kuvion pinta-alan laskenta, neliöpikseleitä ;)..). Ja jos taitoa riittää, voihan tämän kääntää assemblyllekin.
'TaytaKuvio-aliohjelman käyttämä datatyyppi
TYPE tt
s AS INTEGER
m AS INTEGER
END TYPE
'piirretään esimerkkikuvio
SCREEN 13
LINE (1, 1)-(319, 199), 15, B
CIRCLE (50, 50), 20
LINE (50, 50)-(100, 100), 15
LOCATE 2, 2: PRINT "Paina ENTER..."
FOR i% = 5 TO 195 STEP 2
LINE (250 + (i% MOD 25) * 1, i%)-(300 - (i% MOD 25) * 1, i%)
NEXT
'odotetaan näppäimen painallusta
SLEEP
'täytetään kuvio sinisellä, valkoinen väri muodostaa ääriviivat
TaytaKuvio 100, 50, 1, 15
SLEEP
SUB TaytaKuvio (x%, y%, v%, tv%)
'taulukko "risteyskohdille"
DIM t(16000) AS tt
'aloituskohta näyttömuistissa
k& = 320 * y% + x%
'oikea segmentti
DEF SEG = &HA000
DO
'piirretään piste tämän hetkiseen kohtaan
POKE k&, v%
'jos vasemmalla ei ole valkoista tai täyttöväriä
IF PEEK(k& - 1) <> tv% AND PEEK(k& - 1) <> v% THEN
IF t(i%).s = 1 THEN
t(i%).m = t(i%).m + 1
ELSE
i% = i% + 1: t(i%).s = 1: t(i%).m = 1
END IF
k& = k& - 1: o% = 1
'jos ylhäällä ei ole valkoista tai täyttöväriä
ELSEIF PEEK(k& - 320) <> tv% AND PEEK(k& - 320) <> v% THEN
IF t(i%).s = 2 THEN
t(i%).m = t(i%).m + 1
ELSE
i% = i% + 1: t(i%).s = 2: t(i%).m = 1
END IF
k& = k& - 320: o% = 2
'jos oikealla ei ole valkoista tai täyttöväriä
ELSEIF PEEK(k& + 1) <> tv% AND PEEK(k& + 1) <> v% THEN
IF t(i%).s = 3 THEN
t(i%).m = t(i%).m + 1
ELSE
i% = i% + 1: t(i%).s = 3: t(i%).m = 1
END IF
k& = k& + 1: o% = 3
'jos alhaalla ei ole valkoista tai täyttöväriä
ELSEIF PEEK(k& + 320) <> tv% AND PEEK(k& + 320) <> v% THEN
IF t(i%).s = 4 THEN
t(i%).m = t(i%).m + 1
ELSE
i% = i% + 1: t(i%).s = 4: t(i%).m = 1
END IF
k& = k& + 320: o% = 4
ELSE
'palataan takaisin risteyskohtiin
SELECT CASE t(i%).s
CASE 1: k& = k& + 1
CASE 2: k& = k& + 320
CASE 3: k& = k& - 1
CASE 4: k& = k& - 320
END SELECT
IF t(i%).m = 1 THEN
i% = i% - 1
ELSE
t(i%).m = t(i%).m - 1
END IF
END IF
LOOP WHILE i% > 0
END SUBIhan hieno ja yllättävän nopea.
mulle on käyttöä tolle vbssä, kun siinä ei ole PAINTtia, kiitos. ja on yllättävän nopea
siis toi ohjelmasi on nopea :)
Ku kopioi tuon toiseen ohojelmaan niin tulee "Overflow" siinä k& muuttujan kohoras, mutta tuo toimii(se toinen oli se aaltojuttu).
Aihe on jo aika vanha, joten et voi enää vastata siihen.