Kirjautuminen

Haku

Tehtävät

Keskustelu: Projektit: QBlicBlock

Sivun loppuun

terrist [31.08.2018 11:27:09]

#

QB-versio Sims 4:n BlicBlockista.

4K-graffat korvattu retrografiikoilla jotta pyörii jouhevasti.
Kirjoitin koodin osittain uusiksi, toimii nyt myös Qbasicilla!

'
' QBlicBlock by Tertsi 2018
'
RANDOMIZE TIMER
SCREEN 13
Update$ = "v.1.5"

'QB64-hemmoille:
_FULLSCREEN _SQUAREPIXELS '  Qbasic-hemmo, poista tama rivi
_TITLE "QBlicBlock " + Update$ ' Qbasic-hemmo, poista tama rivi

PK = 20: PY = PK * 2: PX = PK * 4.5: highscore = 0: TopLevel = 0
DIM Palikka(1000), Seuraava(1000)
DIM Taulukko(5, 7), Poistot(5, 7)

DIM Numero$(9) 'Custom numero-fontti! Piirretaan DRAW-kaskylla
Numero$(0) = "r7d14l7u14" '0
Numero$(1) = "br3 r1d14" '1
Numero$(2) = "r7d7l7d7r7" '2
Numero$(3) = "r7d14l7 bu7 r7" '3
Numero$(4) = "d7r7 bu7 d14" '4
Numero$(5) = "br7 l7d7r7d7l7" '5
Numero$(6) = "d14r7u7l7" '6
Numero$(7) = "r7d14" '7
Numero$(8) = "r7d14l7u14 bd7 r7" '8
Numero$(9) = "r7d14 bu7 l7u7" '9

OPEN "QBlicBlock.top" FOR APPEND AS #1 'jos tiedostoa ei ole, APPEND luo uuden
PRINT #1, highscore 'jos tiedosto olemassa, kirjoittaa vanhan sisallon peraan
PRINT #1, TopLevel
CLOSE #1

OPEN "QBlicBlock.top" FOR INPUT AS #1 'INPUT vain lukee
INPUT #1, highscore 'luetaan high score ekalta rivilta
INPUT #1, TopLevel
CLOSE #1

OPEN "QBlicBlock.top" FOR OUTPUT AS #1 'OUTPUT luo uuden ja tuhoaa vanhan tiedoston > APPEND:in luoma ylimaarainen rivi poistuu
PRINT #1, highscore 'kirjoitetaan highscore
PRINT #1, TopLevel
CLOSE #1

Alku:

IF score > highscore THEN
    highscore = score
    OPEN "QBlicBlock.top" FOR OUTPUT AS #1
    PRINT #1, highscore 'kirjoitetaan highscore
    PRINT #1, TopLevel
    CLOSE #1
END IF
IF level > TopLevel THEN
    TopLevel = level
    OPEN "QBlicBlock.top" FOR OUTPUT AS #1
    PRINT #1, highscore 'kirjoitetaan highscore
    PRINT #1, TopLevel
    CLOSE #1
END IF

c = 7: GOSUB MenuTekstit

DO
    Menu$ = INKEY$
    IF Menu$ = CHR$(13) THEN EXIT DO 'Enter aloittaa pelin
    IF Menu$ = CHR$(27) THEN GOTO Loppu 'Esc lopettaa
LOOP

LINE (8, 0)-(102, 143), 0, BF ' menu piiloon
FOR x = 1 TO 5: FOR Y = 1 TO 7: Taulukko(x, Y) = 0: Poistot(x, Y) = 0: NEXT Y: NEXT x 'nollataan taulukot
score = 0: level = 1: LevelUp = 20: PoistotTotal = 0: PoistotLevel = 0 'nollataan tilastot

Next1 = INT(RND * 6) + 1: block1 = Next1: NextX = PK * 11 + 1: NextY1 = PY + PK / 2 'arvotaan seuraavat palikat
LINE (NextX, NextY1)-(NextX + PK - 1, NextY1 + PK - 1), Next1, BF 'tumma reunus
LINE (NextX + 5, NextY1 + 5)-(NextX + PK - 6, NextY1 + PK - 6), Next1 + 8, BF 'vaalea sisus

Next2 = INT(RND * 6) + 1: block2 = Next2: NextX = PK * 11 + 1: NextY2 = PY + PK * 2
LINE (NextX, NextY2)-(NextX + PK - 1, NextY2 + PK - 1), Next2, BF 'tumma reunus
LINE (NextX + 5, NextY2 + 5)-(NextX + PK - 6, NextY2 + PK - 6), Next2 + 8, BF 'vaalea sisus

LINE (PX + PK - 1, PK - 1)-(PX + PK * 6, PY - 1), 8, B ' score-alue

LINE (PX + PK - 1, PY - 1)-(PX + PK * 6, PK * 9), 8, B ' pelialue
LINE (PX + PK, PY)-(PX + PK * 6 - 1, PK * 9 - 1), 0, BF

LINE (PX + PK * 6, PY - 1)-(PX + PK * 8 + 1, PY + PK * 3.5), 8, B 'next-alue
LINE (PX - PK - 5, PK * 7 + 3)-(PX + PK - 1, PK * 9), 8, B ' level-alue

GOSUB PrintScore
GOSUB PrintLevel

DO

    GET (NextX, NextY1)-(NextX + PK - 1, NextY1 + PK - 1), Palikka()
    GET (NextX, NextY2)-(NextX + PK - 1, NextY2 + PK - 1), Seuraava()
    PUT (NextX, NextY1), Seuraava(), PSET
    block = block1: SWAP block1, block2
    Next2 = INT(RND * 6) + 1: NextX = PK * 11 + 1: NextY2 = PY + PK * 2
    LINE (NextX, NextY2)-(NextX + PK - 1, NextY2 + PK - 1), Next2, BF 'tumma reunus
    LINE (NextX + 5, NextY2 + 5)-(NextX + PK - 6, NextY2 + PK - 6), Next2 + 8, BF 'vaalea sisus
    block2 = Next2
    x = 3: Y = 0

    DO
        LINE (PX + x * PK, PY + Y)-(PX + (x + 1) * PK - 1, PY + Y), 0 ' pikselin paksuinen musta viiva palikan ylalaitaan
        IF Taulukko(3, 2) = 0 THEN Y = Y + 1 ' pudotellaan pikselin verran alaspain
        PUT (PX + x * PK, PY + Y), Palikka(), PSET
        T = TIMER
        DO
            a$ = INKEY$
            IF a$ <> "" THEN
                SELECT CASE a$
                    CASE CHR$(27): GOTO Loppu 'esc
                    CASE CHR$(0) + "K" 'vasen nuolinappain
                        IF POINT(PX + x * PK - 1, PY + Y) = 0 AND POINT(PX + x * PK - 1, PY + Y + PK - 1) = 0 THEN
                            GOSUB PoistaPalikka
                            x = x - 1
                            PUT (PX + x * PK, PY + Y), Palikka(), PSET
                        END IF
                    CASE CHR$(0) + "M" 'oikea nuolinappain
                        IF POINT(PX + x * PK + PK, PY + Y) = 0 AND POINT(PX + x * PK + PK, PY + Y + PK - 1) = 0 THEN
                            GOSUB PoistaPalikka
                            x = x + 1
                            PUT (PX + x * PK, PY + Y), Palikka(), PSET
                        END IF
                    CASE CHR$(0) + "P" 'nuolinappain alas > hard drop
                        GOSUB PoistaPalikka
                        DO
                            Y = Y + 1
                            IF POINT(PX + x * PK + PK / 2, PY + PK + Y) <> 0 THEN EXIT DO
                        LOOP
                        PUT (PX + x * PK, PY + Y), Palikka(), PSET
                        EXIT DO
                END SELECT
            END IF
            IF level > 14 THEN ajastin = 0.001 ELSE ajastin = .0015 - level * .0001
        LOOP UNTIL TIMER - T > ajastin
        IF POINT(PX + x * PK + PK / 2, PY + PK + Y) <> 0 THEN EXIT DO
    LOOP

    lx = x: ly = FIX(Y / PK) + 1: Taulukko(lx, ly) = block: score = score + level

    DO
        Poistuu = 0
        FOR block = 1 TO 6
            GOSUB Taulukot
        NEXT block
        GOSUB PrintScore
        IF Poistuu = 1 THEN GOSUB Pudotusta ELSE EXIT DO
    LOOP
    IF lx = 3 AND ly = 1 THEN GOTO Alku
    IF PoistotLevel >= LevelUp THEN
        Yli = PoistotLevel - LevelUp
        IF level < 99 THEN level = level + 1
        PoistotLevel = 0 + Yli
        GOSUB PrintLevel
    END IF
LOOP

Loppu:
SYSTEM


PrintLevel:
LINE (PX - PK - 4, PK * 7 + 4)-(PX + PK - 2, PK * 9 - 1), 0, BF ' level-alue
DRAW "c3 bm68,146 r4 d14 bu14 r4 br3 d14 bu14 r7 d14 bu7 l7 bd7 br10 r7 u7 l7 u7 r7 br3 r7 d14 l7 u14" 'taso-teksti
MLevel$ = LTRIM$(STR$(level)) ' muutetaan level merkkimuotoon
MLeveys = LEN(MLevel$)
FOR z = 1 TO MLeveys
    Num = VAL(MID$(MLevel$, z, 1))
    IF MLeveys = 1 THEN xalku = 74 ELSE xalku = 69
    DRAW "c5 bm" + STR$(xalku + z * 10) + ",163" + Numero$(Num)
NEXT z
RETURN


MenuTekstit:
COLOR c
LINE (8, 0)-(102, 143), 8, B
LOCATE 2, 3: PRINT "QBlicBlock"
LOCATE 3, 8: PRINT Update$
LOCATE 5, 3: PRINT "TOP-SCORE"
hisx = LEN(LTRIM$(STR$(highscore)))
LOCATE 6, 13 - hisx: PRINT LTRIM$(STR$(highscore))
LOCATE 8, 3: PRINT "TOP-LEVEL"
LOCATE 9, 11: PRINT USING "##"; TopLevel
LOCATE 11, 3: PRINT " " + CHR$(27) + " " + CHR$(26) + "  Move"
LOCATE 13, 3: PRINT "  " + CHR$(25) + "   Drop"
LOCATE 15, 3: PRINT " ESC  Quit"
LOCATE 17, 3: PRINT "ENTER Play"
RETURN


PrintScore:
LINE (PX + PK, PK)-(PX + PK * 6 - 1, PY - 2), 0, BF ' score-alueen sisusta
MScore$ = LTRIM$(STR$(score)) ' muutetaan pisteet merkkimuotoon
ScoreLeveys = LEN(MScore$)
FOR z = 1 TO ScoreLeveys
    Num = VAL(MID$(MScore$, z, 1))
    DRAW "c5 bm" + STR$(151 - ((ScoreLeveys * 10) / 2) + z * 10) + ",22" + Numero$(Num)
NEXT z
RETURN


PoistaPalikka:
LINE (PX + x * PK, PY + Y)-(PX + (x + 1) * PK - 1, PY + Y + PK - 1), 0, BF
RETURN


PiirraPalikka:
LINE (NextX, NextY)-(NextX + PK - 1, NextY + PK - 1), block, BF 'tumma reunus
LINE (NextX + 5, NextY + 5)-(NextX + PK - 6, NextY + PK - 6), block + 8, BF 'vaalea sisus
RETURN


Taulukot: 'Tunnistetaan taulukosta Tetris-palikoiden muotoisia muodostelmia ja merkataan ne poisto-taulukkoon
FOR tx = 1 TO 4: FOR ty = 1 TO 6 'O-palikka
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 5: FOR ty = 1 TO 4 'I-palikka pysty
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx, ty + 2) = block AND Taulukko(tx, ty + 3) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx, ty + 2) = block: Poistot(tx, ty + 3) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 2: FOR ty = 1 TO 7 'I-palikka vaaka
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 2, ty) = block AND Taulukko(tx + 3, ty) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 2, ty) = block: Poistot(tx + 3, ty) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'S-palikka vaaka
        IF Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 2, ty) = block THEN
            Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 2, ty) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'S-palikka pysty
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 1, ty + 2) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 1, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'Z-palikka vaaka
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 2, ty + 1) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 2, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'Z-palikka pysty
        IF Taulukko(tx, ty + 1) = block AND Taulukko(tx, ty + 2) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 1, ty + 1) = block THEN
            Poistot(tx, ty + 1) = block: Poistot(tx, ty + 2) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 1, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'L-palikka vaaka 1
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 2, ty) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 2, ty) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'L-palikka vaaka 2
        IF Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 2, ty + 1) = block AND Taulukko(tx + 2, ty) = block THEN
            Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 2, ty + 1) = block: Poistot(tx + 2, ty) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'L-palikka pysty 1
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx, ty + 2) = block AND Taulukko(tx + 1, ty + 2) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx, ty + 2) = block: Poistot(tx + 1, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'L-palikka pysty 2
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 1, ty + 2) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 1, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'J-palikka vaaka 1
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 2, ty) = block AND Taulukko(tx + 2, ty + 1) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 2, ty) = block: Poistot(tx + 2, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'J-palikka vaaka 2
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 2, ty + 1) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 2, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'J-palikka pysty 1
        IF Taulukko(tx + 1, ty) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 1, ty + 2) = block AND Taulukko(tx, ty + 2) = block THEN
            Poistot(tx + 1, ty) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 1, ty + 2) = block: Poistot(tx, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'J-palikka pysty 2
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx, ty + 2) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'T-palikka vaaka 1
        IF Taulukko(tx, ty) = block AND Taulukko(tx + 1, ty) = block AND Taulukko(tx + 2, ty) = block AND Taulukko(tx + 1, ty + 1) = block THEN
            Poistot(tx, ty) = block: Poistot(tx + 1, ty) = block: Poistot(tx + 2, ty) = block: Poistot(tx + 1, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 3: FOR ty = 1 TO 6 'T-palikka vaaka 2
        IF Taulukko(tx + 1, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 2, ty + 1) = block THEN
            Poistot(tx + 1, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 2, ty + 1) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'T-palikka pysty 1
        IF Taulukko(tx, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx, ty + 2) = block THEN
            Poistot(tx, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
FOR tx = 1 TO 4: FOR ty = 1 TO 5 'T-palikka pysty 2
        IF Taulukko(tx + 1, ty) = block AND Taulukko(tx, ty + 1) = block AND Taulukko(tx + 1, ty + 1) = block AND Taulukko(tx + 1, ty + 2) = block THEN
            Poistot(tx + 1, ty) = block: Poistot(tx, ty + 1) = block: Poistot(tx + 1, ty + 1) = block: Poistot(tx + 1, ty + 2) = block: Poistuu = 1
        END IF
NEXT ty: NEXT tx
IF Poistuu = 1 THEN
    FOR tx = 1 TO 5: FOR ty = 1 TO 7 'valaistaan poistettavat palikat
            IF Poistot(tx, ty) = block THEN
                LINE (PX + tx * PK, PK + (ty) * PK)-(PX + (tx + 1) * PK - 1, PK + (ty + 1) * PK - 1), block + 8, BF 'vaalea kehys
                LINE (PX + tx * PK + 5, PY + (ty - 1) * PK + 5)-(PX + tx * PK + PK - 6, PY + (ty - 1) * PK + PK - 6), 15, BF 'valkea sisus
            END IF
    NEXT ty: NEXT tx
    T = TIMER: DO: LOOP UNTIL TIMER - T > .15 'pikkanen viive
    FOR tx = 1 TO 5: FOR ty = 1 TO 7 'valkaistaan poistettavat palikat
            IF Poistot(tx, ty) = block THEN
                LINE (PX + tx * PK, PK + (ty) * PK)-(PX + (tx + 1) * PK - 1, PK + (ty + 1) * PK - 1), 15, BF 'valkea palikka
            END IF
    NEXT ty: NEXT tx
    T = TIMER: DO: LOOP UNTIL TIMER - T > .15 'pikkanen viive
    laske = 0
    FOR tx = 1 TO 5: FOR ty = 1 TO 7 'poistetaan palikat ruudulta ja annetaan pisteet
            IF Poistot(tx, ty) = block THEN
                laske = laske + 1
                IF PoistotLevel > LevelUp THEN PoistotLevel = LevelUp
                LINE (PX + tx * PK, PK + (ty) * PK)-(PX + (tx + 1) * PK - 1, PK + (ty + 1) * PK - 1), 0, BF
                Poistot(tx, ty) = 0: Taulukko(tx, ty) = 0: score = score + 100 * (laske + level)
            END IF
    NEXT ty: NEXT tx
    PoistotTotal = PoistotTotal + laske
    PoistotLevel = PoistotLevel + laske
END IF
RETURN


Pudotusta: ' pudotellaan palikoita ruudulla ja taulukossa
FOR tx = 1 TO 5
    FOR toista = 1 TO 6
        ty = 8
        FOR typ = 1 TO 6
            ty = ty - 1
            IF Taulukko(tx, ty) = 0 THEN
                IF Taulukko(tx, ty - 1) > 0 THEN
                    MuistaYlempi = Taulukko(tx, ty - 1)
                    LINE (PX + tx * PK, PK + (ty - 1) * PK)-(PX + (tx + 1) * PK - 1, PK + (ty) * PK - 1), 0, BF
                    LINE (PX + tx * PK, PY + (ty - 1) * PK)-(PX + tx * PK + PK - 1, PY + (ty - 1) * PK + PK - 1), MuistaYlempi, BF
                    LINE (PX + tx * PK + 5, PY + (ty - 1) * PK + 5)-(PX + tx * PK + PK - 6, PY + (ty - 1) * PK + PK - 6), MuistaYlempi + 8, BF
                    Taulukko(tx, ty - 1) = 0: Taulukko(tx, ty) = MuistaYlempi
                END IF
            END IF
        NEXT typ
    NEXT toista
NEXT tx
RETURN

jsbasic [03.09.2018 10:08:47]

#

Hauska idea. Seuraavaksi BlicBlockin voisi toteutta Commodore 64:lle. Riittäisikö BASIC?

terrist [03.09.2018 11:06:56]

#

C64:n BASIC:lla pystyy spritejä piirtämään, joten ei kai se mahdotonta ole! :)

Grez [03.09.2018 11:52:22]

#

Mulla kyllä skaalautuu 4K näytöllä, mutta kone ei jaksa pyöritätä niin nopeasti että olisi pelattava. Nuoli alas siis esim. ei näytä tekevän mitään.

terrist [03.09.2018 12:59:35]

#

Jooh... hitaus tulee siitä kun pikseli kerrallaan putoilee palikat > suuremmalla tarkkuudella pudotusmatka pitenee. Koodissa viilaamista vielä.

jsbasic [03.09.2018 14:11:46]

#

Ajattelin ennemmin merkkigrafiikalla tehtyä. Kuusnepan tetris on tyylikkäämpiä tetriksiä, mitä on tehty.

terrist [05.09.2018 16:05:07]

#

Pävitetty koodi, enää ei pitäisi hidastella ;)

Metabolix [15.09.2018 21:44:21]

#

Mahtava peli. FreeBASIC QB-moodissa ei selviä noista GET- ja PUT-riveistä, sanoo ”Expected pointer, before '('”. Esimerkiksi siis seuraavassa kohdassa:

GET (NextX, NextY1)-(NextX + PK - 1, NextY1 + PK - 1), Palikka()
                                                               ^

terrist [21.09.2018 20:59:45]

#

Kiitos. FreeBASIC ei ole itelle tuttu, mutta QB64 lisää väkisin noi tarpeettomat sulkeet GET ja PUT rivien perään, toimisko jos poistaa koodista ():t

Metabolix [22.09.2018 16:53:31]

#

():n poisto tosiaan ratkaisi FreeBASIC-käännösongelman. Vielä muutamia korjauksia tarvitaan:

TIMER palauttaa ilmeisesti niin isoja lukuja, että float-tyyppiset T ja TIMER pyöristyvät jatkuvasti samaksi luvuksi ja peli jää jumiin. Muuttuja T täytyy erikseen alustaa double-tyyppisiksi, jotta peli alkaa kulkea.

Peli on aivan liian nopea. Säädätkin tuossa, että peli kulkee framen eteenpäin noin 1000 kertaa sekunnissa – aika hurjaa. Ehkä Windowsissa (ja QB64:ssa) TIMERin resoluutio on niin heikko, että peli tuurilla kulkee paljon hitaammin (ja tasosta riippumatta samalla nopeudella). Lisäksi yrität ilmeisesti nopeuttaa peliä tason noustessa, mutta tasolla 14 ajastin on 0.0001 ja tasolla 15 taas 0.001. Pitäisikö ajastimessa ehkä lukea näin:

IF level > 14 THEN ajastin = 0.01 ELSE ajastin = .025 - level * .001

Eli:

ajastin = .025 - level * .001
IF ajastin < 0.01 THEN ajastin = 0.01

QB64-versiossa tietysti voi miettiä, olisiko silmukassa _DELAY 0.001 hyödyksi turhan kuormituksen välttämiseksi.


Sivun alkuun

Vastaus

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

Tietoa sivustosta