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 SUB
Ihan 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.