Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Breakout From Hell

terrist [05.07.2011 23:50:57]

#

Tänään oli tekemisen puute ja väänsin tämmösen, monella tapaa vielä keskeneräinen, mutta pelattavissa. Kolme kenttää, pelataan nuolinäppäimillä, esc lopettaa.

Huom! Tämä pelinalku vaatii QB64:n toimiakseen!

Title$ = "BREAKOUT FROM HELL v0.3"
DIM PG$(20)
SCREEN 12
speed% = 700 ' muuta tätä arvoa jos peli tuntuu liian hitaalta / nopealta
balls% = 3: score% = 0: level% = 1
Alku:
CLS
FOR y% = 1 TO 20
    PG$(y%) = SPACE$(18)
    LINE (1 * 32, y% * 16)-(18 * 32 + 31, y% * 16 + 15), 1, BF
NEXT y%
IF level% = 1 THEN
    PG$(3) = " 1111111111111111 "
    PG$(4) = " 12 3  12 13  2 1 "
    PG$(5) = " 1     1  1     1 "
    PG$(6) = " 111   1111   111 "
    PG$(10) = " 1111111111111111 "
END IF
IF level% = 2 THEN
    PG$(1) = "4   4   2 4   4   "
    PG$(2) = "                  "
    PG$(3) = "        2         "
    PG$(4) = "                  "
    PG$(5) = "111111111111111111"
END IF
IF level% = 3 THEN
    PG$(1) = "2 1 2 1 2 1 2 1 2 "
    PG$(2) = "  1   1   1   1   "
    PG$(3) = "2 1 2 1 2 1 2 1 2 "
    PG$(4) = "  1   1   1   1   "
    PG$(5) = "2 1 2 1 2 1 2 1 2 "
    PG$(6) = "  1   1   1   1   "
END IF
blocks% = 0
FOR y% = 1 TO 20
    FOR x% = 1 TO 18
        IF MID$(PG$(y%), x%, 1) <> " " THEN
            koko% = VAL(MID$(PG$(y%), x%, 1))
            LINE (x% * 32 + 1, y% * 16 + 1)-(x% * 32 + (32 * koko%) - 2, y% * 16 + (16 * koko%) - 2), 9, BF
            blocks% = blocks% + 1
        END IF
    NEXT x%
NEXT y%
Irti:
_TITLE Title$ + " - LEVEL " + STR$(level%) + " - SCORE: " + STR$(score%) + " - Balls left: " + STR$(balls%)
px% = 18: py% = 20 ' mailan sijainti
bx% = 20: by% = 19 ' pallon sijanti
bd% = 5 ' pallon suunta numeronäppäimistön mukaisesti 7/9/5/1/3
LINE (px% * 16, py% * 16)-((4 + px%) * 16 - 1, py% * 16 + 14), 15, BF ' maila
LINE (bx% * 16, by% * 16)-(bx% * 16 + 14, by% * 16 + 14), 15, BF ' pallo
DO
    hit% = 0: bxold% = bx%: byold% = by%
    DO
        IF by% = 20 THEN GOTO Pohjalla
        SELECT CASE bd%
            CASE 9
                IF POINT(bx% * 16 + 20, by% * 16 - 4) = 1 AND POINT(bx% * 16 + 20, by% * 16 + 4) = 1 AND POINT(bx% * 16 + 4, by% * 16 - 4) = 1 THEN
                    bx% = bx% + 1: by% = by% - 1: hit% = 0
                ELSE
                    hit% = 1: muistibd% = 0
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) <> 1 AND POINT(bx% * 16 + 4, by% * 16 - 4) <> 1 THEN muistibd% = 1
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) = 9 THEN bd% = 7: PAINT (bx% * 16 + 20, by% * 16 + 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 4, by% * 16 - 4) = 9 THEN bd% = 3: PAINT (bx% * 16 + 4, by% * 16 - 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 20, by% * 16 - 4) = 9 THEN bd% = 3: PAINT (bx% * 16 + 20, by% * 16 - 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) <> 1 OR POINT(bx% * 16 + 20, by% * 16 - 4) <> 1 THEN bd% = 7
                    IF POINT(bx% * 16 + 4, by% * 16 - 4) = 0 THEN bd% = 3
                    IF muistibd% = 1 THEN bd% = 1
                END IF
            CASE 7
                IF POINT(bx% * 16 - 4, by% * 16 - 4) = 1 AND POINT(bx% * 16 - 4, by% * 16 + 4) = 1 AND POINT(bx% * 16 + 4, by% * 16 - 4) = 1 THEN
                    bx% = bx% - 1: by% = by% - 1: hit% = 0
                ELSE
                    hit% = 1: muistibd% = 0
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) <> 1 AND POINT(bx% * 16 + 4, by% * 16 - 4) <> 1 THEN muistibd% = 3
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) = 9 THEN bd% = 9: PAINT (bx% * 16 - 4, by% * 16 + 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 4, by% * 16 - 4) = 9 THEN bd% = 1: PAINT (bx% * 16 + 4, by% * 16 - 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 - 4, by% * 16 - 4) = 9 THEN bd% = 1: PAINT (bx% * 16 - 4, by% * 16 - 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) <> 1 OR POINT(bx% * 16 - 4, by% * 16 - 4) <> 1 THEN bd% = 9
                    IF POINT(bx% * 16 + 4, by% * 16 - 4) = 0 THEN bd% = 1
                    IF muistibd% = 3 THEN bd% = 3
                END IF
            CASE 3
                IF POINT(bx% * 16 + 20, by% * 16 + 20) = 1 AND POINT(bx% * 16 + 20, by% * 16 + 4) = 1 AND POINT(bx% * 16 + 4, by% * 16 + 20) = 1 THEN
                    bx% = bx% + 1: by% = by% + 1: hit% = 0
                ELSE
                    hit% = 1: muistibd% = 0
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) <> 1 AND POINT(bx% * 16 + 4, by% * 16 + 20) <> 1 THEN muistibd% = 7
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) = 9 THEN bd% = 1: PAINT (bx% * 16 + 20, by% * 16 + 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 4, by% * 16 + 20) = 9 THEN bd% = 9: PAINT (bx% * 16 + 4, by% * 16 + 20), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 20, by% * 16 + 20) = 9 THEN bd% = 9: PAINT (bx% * 16 + 20, by% * 16 + 20), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 20, by% * 16 + 4) <> 1 OR POINT(bx% * 16 + 20, by% * 16 + 20) <> 1 THEN bd% = 1
                    IF POINT(bx% * 16 + 4, by% * 16 + 20) > 1 THEN bd% = 9
                    IF POINT(bx% * 16 + 20, by% * 16 + 20) > 1 THEN bd% = 9
                    IF muistibd% = 7 THEN bd% = 7
                END IF
            CASE 1
                IF POINT(bx% * 16 - 4, by% * 16 + 20) = 1 AND POINT(bx% * 16 - 4, by% * 16 + 4) = 1 AND POINT(bx% * 16 + 4, by% * 16 + 20) = 1 THEN
                    bx% = bx% - 1: by% = by% + 1: hit% = 0
                ELSE
                    hit% = 1: muistibd% = 0
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) <> 1 AND POINT(bx% * 16 + 4, by% * 16 + 20) <> 1 THEN muistibd% = 9
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) = 9 THEN bd% = 3: PAINT (bx% * 16 - 4, by% * 16 + 4), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 + 4, by% * 16 + 20) = 9 THEN bd% = 7: PAINT (bx% * 16 + 4, by% * 16 + 20), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 - 4, by% * 16 + 20) = 9 THEN bd% = 7: PAINT (bx% * 16 - 4, by% * 16 + 20), 1: GOSUB Pisteet
                    IF POINT(bx% * 16 - 4, by% * 16 + 4) <> 1 OR POINT(bx% * 16 - 4, by% * 16 + 20) <> 1 THEN bd% = 3
                    IF POINT(bx% * 16 + 4, by% * 16 + 20) > 1 THEN bd% = 7
                    IF POINT(bx% * 16 - 4, by% * 16 + 20) > 1 THEN bd% = 7
                    IF muistibd% = 9 THEN bd% = 9
                END IF
            CASE 5
        END SELECT
    LOOP WHILE hit% = 1
    IF blocks% = 0 THEN level% = level% + 1: GOTO Alku
    FOR d% = 1 TO 16
        IF bd% <> 5 THEN
            LINE (bxold% * 16 + ((bx% - bxold%) * d%), byold% * 16 + ((by% - byold%) * d%))-(bxold% * 16 + ((bx% - bxold%) * d%) + 15, byold% * 16 + ((by% - byold%) * d%) + 15), 1, B
            LINE (bxold% * 16 + ((bx% - bxold%) * d%) + 1, byold% * 16 + ((by% - byold%) * d%) + 1)-(bxold% * 16 + ((bx% - bxold%) * d%) + 14, byold% * 16 + ((by% - byold%) * d%) + 14), 15, BF
        END IF
        FOR luuppi% = 1 TO speed%
            Korkeus% = 9: GOSUB Laava
            a$ = INKEY$
            IF a$ <> "" THEN
                IF bd% = 5 THEN LINE (bx% * 16, by% * 16)-(bx% * 16 + 14, by% * 16 + 14), 1, BF
                LINE (px% * 16, py% * 16)-((4 + px%) * 16 - 1, py% * 16 + 14), 1, BF ' hide paddle
                SELECT CASE a$
                    CASE CHR$(27): END ' esc lopettaa
                    CASE CHR$(0) + "K"
                        IF px% > 2 THEN
                            px% = px% - 1
                            IF bd% = 5 THEN bx% = bx% - 1
                        END IF
                    CASE CHR$(0) + "M"
                        IF px% < 34 THEN
                            px% = px% + 1
                            IF bd% = 5 THEN bx% = bx% + 1
                        END IF
                    CASE CHR$(0) + "H": IF bd% = 5 THEN bd% = 9
                END SELECT
                IF bd% = 5 THEN LINE (bx% * 16, by% * 16)-(bx% * 16 + 14, by% * 16 + 14), 15, BF
                LINE (px% * 16, py% * 16)-((4 + px%) * 16 - 1, py% * 16 + 14), 15, BF
            END IF
        NEXT luuppi%
        WAIT &H3DA, 8
    NEXT d%
LOOP
Pohjalla:
FOR y% = 0 TO 15
    FOR upotus% = 1 TO speed%
        FOR tulitsunami% = 9 TO 29
            Korkeus% = tulitsunami%: GOSUB Laava
            WAIT &H3DA, 8
        NEXT
    NEXT
NEXT y%
LINE (32, 20 * 16 - 1)-(607, 21 * 16), 1, BF
balls% = balls% - 1
IF balls% > 0 THEN GOTO Irti
_TITLE Title$ + " - LEVEL " + STR$(level%) + " - SCORE: " + STR$(score%) + " - Balls left: " + STR$(balls%) + " - GAME OVER!"
level% = 1: balls% = 3: score% = 0: level% = 1
LOCATE 26, 33: PRINT "ENTER = NEW GAME"
LOCATE 27, 33: PRINT "  ESC = QUIT"
DO
    b$ = INKEY$
    IF b$ = " " OR b$ = CHR$(13) THEN GOTO Alku
    IF b$ = CHR$(27) THEN END
LOOP
Pisteet:
blocks% = blocks% - 1
score% = score% + 10
_TITLE Title$ + " - LEVEL " + STR$(level%) + " - SCORE: " + STR$(score%) + " - Balls left: " + STR$(balls%) + " - Bricks left: " + STR$(blocks%)
RETURN
Laava:
lx% = INT(RND * 576) + 32
lc% = INT(RND * 5) + 1
ll% = INT(RND * 4) + 1
lr% = INT(RND * Korkeus%) + 1
IF lc% = 1 THEN pc% = 1
IF lc% = 2 THEN pc% = 4
IF lc% = 3 THEN pc% = 12
IF lc% = 4 THEN pc% = 14
IF lc% = 5 THEN pc% = 15
PSET (lx%, 3 + 16 * 21 + lc% * 4 + ll% - lr%), pc%
RETURN

pake10 [14.12.2011 16:00:21]

#

Laadukas peli, mutta minusta joihinkin pallon pomppuihin on mahdoton ehtiä "viivalla", kun liikkuu ns. porrasmaisesti.

gamehouse [06.02.2012 23:27:55]

#

Ihan hieno, mutta suosittelen että käytät nuolinäppäinten lukuun _KEYDOWN- käskyä ja koska se on PALJON nopeampi tapa, ohjelman nopeutta tarvii rajoittaa käyttämällä _LIMIT- käskyä. Limittiä käytettäessä et tarvi enää muuta hidastusta, ohjelma pyörii silloin kaikilla koneilla samalla nopeudella.
Uskon että osaat etsiä lisätietoja noista käskyistä QB64-wikistä ;)

Vastaus

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

Tietoa sivustosta