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
RETURNHauska idea. Seuraavaksi BlicBlockin voisi toteutta Commodore 64:lle. Riittäisikö BASIC?
C64:n BASIC:lla pystyy spritejä piirtämään, joten ei kai se mahdotonta ole! :)
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.
Jooh... hitaus tulee siitä kun pikseli kerrallaan putoilee palikat > suuremmalla tarkkuudella pudotusmatka pitenee. Koodissa viilaamista vielä.
Ajattelin ennemmin merkkigrafiikalla tehtyä. Kuusnepan tetris on tyylikkäämpiä tetriksiä, mitä on tehty.
Pävitetty koodi, enää ei pitäisi hidastella ;)
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()
^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
():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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.