Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Kaksoispuskurointi 13h

KemXy [07.05.2003 17:36:12]

#

Yksinkertainen ja hidas kaksoispuskurointi, joka toimii mode 13h:ssa. Ajatus on, että otetaan taulukon(puskurin) muistisosoite ja poketetaan sinne. Lopuksi kuva puskurista kopioidaan ruudulle.

'Kaksoispuskurointi Mode 13h:ssa pokella
'Mika Kemppainen

DIM Puskuri(32001) AS INTEGER 'Puskuri 64000 pikselille, kun
                              'Yksi väri vie muistia 8 bittiä
                              'ja Integer-muuttujaan sopii 16 bittiä

DIM Lippu(5, 5) AS INTEGER    'Taulukko lippukuvalle ja
DIM LippuX AS INTEGER         'sen koordinaatit sekä liike
DIM LippuY AS INTEGER
DIM LisaysX AS INTEGER
DIM LisaysY AS INTEGER

FOR y% = 0 TO 4
        FOR x% = 0 TO 5
                READ Lippu(x%, y%)
        NEXT x%
NEXT y%

Puskuri(0) = 2560       'Puskurin pituus bitteinä
Puskuri(1) = 200        'Puskurin korkeus pikseleinä
LisaysX = 1
LisaysY = 1

CLS
SCREEN 13

DO
        LippuX = LippuX + LisaysX
        LippuY = LippuY + LisaysY

        IF LippuX >= 319 - 50 THEN LippuX = 319 - 50: LisaysX = -INT(RND * 5)
        IF LippuX <= 0 THEN LippuX = 0: LisaysX = INT(RND * 5)
        IF LippuY >= 199 - 40 THEN LippuY = 199 - 40: LisaysY = -INT(RND * 5)
        IF LippuY <= 0 THEN LippuY = 0: LisaysY = INT(RND * 5)


        DEF SEG = VARSEG(Puskuri(0))    'Segmenttiosoitteeksi puskurin osoite
        'Tyhjennetään ruutu(puskuri)
        FOR x% = 0 TO 319
                FOR y% = 0 TO 199
                        POKE VARPTR(Puskuri(2)) + 320& * y% + x%, 0
                NEXT y%
        NEXT x%

        'Piirretään lippu
        FOR x% = 0 TO 50
                FOR y% = 0 TO 40
                        vari% = Lippu(x% / 10, y% / 10)
                        POKE VARPTR(Puskuri(2)) + 320& * (LippuY + y%) + (LippuX + x%), vari%
                NEXT y%
        NEXT x%

        'Siirretään kuva näytölle puskurista
        PUT (0, 0), Puskuri, PSET

LOOP UNTIL INKEY$ = CHR$(27)

DATA 15,15,01,15,15,15
DATA 15,15,01,15,15,15
DATA 01,01,01,01,01,01
DATA 15,15,01,15,15,15
DATA 15,15,01,15,15,15

GeoHound [07.05.2003 18:22:20]

#

nätti puskuri

Antti Laaksonen [07.05.2003 20:43:52]

#

Nuo 320:lla kertomiset hidastavat aika paljon silmukkoja. Puskurin tyhjentäminen kannattaisi ainakin tehdä yhden for-silmukan avulla seuraavasti:

'Tyhjennetään ruutu(puskuri)
kohta% = VARPTR(Puskuri(2))
FOR x& = 0 to 64000
   POKE kohta% + x&, 0
NEXT

Lipun piirtämistä voisi myös jotenkin optimoida, se tosin on vähän vaikeampaa, kun pikselit eivät ole peräkkäin. Muuten ihan ok esimerkki, muuttujan paikan muistissa palauttavista VARSEG:stä ja VARPTR:sta on hyötyä monissa muissakin ohjelmissa.

NiKC [08.05.2003 01:05:22]

#

Hiih, joku jaksaa vielä 13h:takin vielä vääntää. Kuul :D

Onkos jossain jotain kamaa näytillä?

Dude [24.09.2007 20:22:18]

#

Johonaki oli semmoonen että se hirtetään näytölle PUTilla.

Vastaus

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

Tietoa sivustosta