|
Życie Wieczne
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Sob 14:45, 04 Wrz 2021 Temat postu: |
|
|
REM modul BSAVE do gry "Serca"
SCREEN 13
DIM kolor$(0 TO 255)
DIM cegla(0 TO 32) AS LONG
DIM tlo(0 TO 32) AS LONG
DIM poltlo(0 TO 16) AS LONG
DIM bitmap$(0 TO 31)
DIM blok(0 TO 64) AS LONG
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 0A 0A 0A": REM tlo plyta
kolor$(2) = "02 06 06 06": REM tlo fuga
kolor$(3) = "03 10 10 10": REM tlo krawedz
kolor$(4) = "04 00 2F 00": REM liscie
kolor$(5) = "05 3F 3F 3F"
kolor$(6) = "06 3F 3F 3F"
kolor$(7) = "07 28 0A 00": REM doniczka
kolor$(8) = "08 00 00 3F": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F"
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy
REM bloki przezroczystosci
kolor$(16) = "10 3F 3F 3F"
kolor$(32) = "20 3F 3F 3F"
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
kolor$(31) = "1F 28 00 00": REM sweter
kolor$(47) = "2F 05 12 2F": REM spodnie
kolor$(63) = "3F 17 17 17": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 2C 17": REM skora1
kolor$(127) = "7F 18 00 00": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 30 20 00": REM nos
kolor$(159) = "9F 04 0D 23": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 20 00 00": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 2B 2B": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
REM rysunki ****************************************
REM rysunek cegly
bitmap$(0) = "DDDDDDDEDDDDDDDE"
bitmap$(1) = "DFFFFFFEDFFFFFFE"
bitmap$(2) = "DFFFFFFEDFFFFFFE"
bitmap$(3) = "EEEEEEEEEEEEEEEE"
bitmap$(4) = "DDDEDDDDDDDDDDDD"
bitmap$(5) = "FFFEDFFFFFFFFFFF"
bitmap$(6) = "FFFEDFFFFFFFFFFF"
bitmap$(7) = "EEEEEEEEEEEEEEEE"
REM 250-A 251-B 252-C 253-D 254-E 255-F
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 - 1 + &HF0 + 10
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), cegla
REM komorka tla
REM tlo(0) = &H80040
bitmap$(0) = "0001200000012000"
bitmap$(1) = "1111200000011111"
bitmap$(2) = "2221200000012222"
bitmap$(3) = "0001200000012000"
bitmap$(4) = "0001200000012000"
bitmap$(5) = "0001111111112000"
bitmap$(6) = "0001222222212000"
bitmap$(7) = "0001200000012000"
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 48 + 1
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), tlo
REM przygotowanie tablic elementow wierszowych
CLS
FOR x = 0 TO 19
FOR y = 0 TO 10
PUT (x * 16, y * 8), tlo, PSET
NEXT y
NEXT x
REM cegly
FOR i = 0 TO 19
PUT (i * 16, 0), cegla, PSET
NEXT i
FOR i = 0 TO 8
PUT (i * 16, 8), cegla, PSET
PUT (304 - i * 16, 8), cegla, PSET
NEXT i
FOR i = 0 TO 4
PUT (i * 16, 16), cegla, PSET
PUT (304 - i * 16, 16), cegla, PSET
NEXT i
FOR i = 0 TO 2
PUT (i * 16, 24), cegla, PSET
PUT (304 - i * 16, 24), cegla, PSET
NEXT i
FOR i = 0 TO 9
PUT (i * 16 + 80, 24), cegla, PSET
NEXT i
REM poszerzenie przejsc pionowych
GET (8, 64)-(15, 71), poltlo
PUT (136, 8), poltlo, PSET
PUT (40, 24), poltlo, PSET
GET (0, 64)-(7, 71), poltlo
PUT (176, 8), poltlo, PSET
PUT (272, 24), poltlo, PSET
REM wykonczenie cegiel
COLOR 253: REM szczeliny
LINE (135, 8)-(135, 15)
LINE (79, 16)-(79, 23)
LINE (39, 24)-(39, 31)
LINE (239, 24)-(239, 31)
COLOR 252: REM krawedzie
LINE (184, 12)-(184, 14)
LINE (240, 21)-(240, 22)
LINE (80, 28)-(80, 30)
LINE (280, 28)-(280, 30)
REM RYSUNEK kamienia
bitmap$(0) = "JJJJJJJJJJJJJJJJ"
bitmap$(1) = "JJNNNNNNNNNNNNJJ"
bitmap$(2) = "JJNAAAKJPKAAANJJ"
bitmap$(3) = "JJNAKONPNKPKANJJ"
bitmap$(4) = "JJNAPMKLGLMPANJJ"
bitmap$(5) = "JJNKJOJKPJPKMNJJ"
bitmap$(6) = "JJNOLJKJJMKMJNJJ"
bitmap$(7) = "JJNJFMJOHKNIPNJJ"
bitmap$(8) = "JJNJILJLJHIJHNJJ"
bitmap$(9) = "JJNIHJNOHOJJKNJJ"
bitmap$(10) = "JJNAJIIHJOMPANJJ"
bitmap$(11) = "JJNAINNJLJOKANJJ"
bitmap$(12) = "JJNAAAIKJKAAANJJ"
bitmap$(13) = "JJNNNNNNNNNNNNJJ"
bitmap$(14) = "JJJJJJJJJJJJJJJJ"
bitmap$(15) = "JJJJJJJJJJJJJJJJ"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 230
: PSET (xd, yd + 64)
NEXT xd: NEXT yd
REM RYSUNEK DONICZKI
bitmap$(0) = "BBBCDEEBBEECDBBB"
bitmap$(1) = "CCCCEEEEEEEEDCCC"
bitmap$(2) = "DDDEEEEEEEEEEDDD"
bitmap$(3) = "BBBEEEEEEEECEEBB"
bitmap$(4) = "BBEEBEBEEBECEEBB"
bitmap$(5) = "BBECDECEECECDEBB"
bitmap$(6) = "BBECEDDEEDDEDEBB"
bitmap$(7) = "BBECEBBEEBBEDEBB"
bitmap$(8) = "BBBCDBBEEBBCDBBB"
bitmap$(9) = "CCCCDBBEEBBCCCCC"
bitmap$(10) = "DDDCBBBEEBBCDDDD"
bitmap$(11) = "BBBCDHHHHHHCDBBB"
bitmap$(12) = "BBBCDHHHHHHCDBBB"
bitmap$(13) = "BBBCCCHHHHCCDBBB"
bitmap$(14) = "BBBCDDHHHHDCDBBB"
bitmap$(15) = "BBBCDBHHHHBCDBBB"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65
: PSET (xd + 16, yd + 64)
NEXT xd: NEXT yd
REM rysunek bloku
bitmap$(0) = "JJJJJJJJJJJJJJJF" + "JJJJJJJJJJJJJJJF" + "JJJJJJJJJJJJJJJF"
bitmap$(1) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(2) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(3) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(4) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(5) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(6) = "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF" + "KHHHHHHHHHHHHHHF"
bitmap$(7) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
bitmap$(8) = "JJJJJJJFJJJJJJJJ" + "JJJJJJJFJJJJJJJJ" + "JJJJJJJFJJJJJJJF"
bitmap$(9) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(10) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(11) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(12) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(13) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(14) = "KHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFKHHHHHHF"
bitmap$(15) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
FOR yd = 0 TO 15
FOR xd = 0 TO 47
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 224
: PSET (xd + 32, yd + 64)
NEXT xd: NEXT yd
GET (48, 64)-(63, 79), blok
FOR i = 0 TO 19: PUT (i * 16, 32), blok, PSET
NEXT i
COLOR 15: LOCATE 10, 16: PRINT "SERCA 1.0"
REM animacja
REM 7,9 - rejestry przezroczyste
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066663300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866666300000" + "0000036666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111170000" + "0000711111700000"
bitmap$(11) = "0000011111170000" + "0000711111100000"
bitmap$(12) = "0000011111110000" + "0000111111100000"
bitmap$(13) = "0000711111117000" + "0007111111170000"
bitmap$(14) = "0000711111111000" + "0001111111170000"
bitmap$(15) = "0000111111111000" + "0001111111110000"
bitmap$(16) = "0001111333311000" + "0001133331111000"
bitmap$(17) = "0006602222206600" + "0066022222066000"
bitmap$(18) = "0006002222200600" + "0060022222006000"
bitmap$(19) = "0000092222200000" + "0000922222900000"
bitmap$(20) = "0000022222290000" + "0000222222200000"
bitmap$(21) = "0000022222220000" + "0000222222200000"
bitmap$(22) = "0000022202220000" + "0000222022200000"
bitmap$(23) = "0000922202220000" + "0000222022220000"
bitmap$(24) = "0000222202222000" + "0009222022220000"
bitmap$(25) = "0000222009222000" + "0002229002220000"
bitmap$(26) = "0000222000222000" + "0002220002220000"
bitmap$(27) = "0000222000222000" + "0002220002220000"
bitmap$(28) = "0009222000222300" + "0032220009229000"
bitmap$(29) = "0002220000033300" + "0033300000222000"
bitmap$(30) = "0003330000330000" + "0000330000222000"
bitmap$(31) = "0033330000000000" + "0000000000333300"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd, yd + 88)
NEXT xd
NEXT yd
REM ************************************ FAZA 2
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000001111100000" + "0000011111000000"
bitmap$(11) = "0000001111100000" + "0000011111000000"
bitmap$(12) = "0000001111100000" + "0000011111000000"
bitmap$(13) = "0000001111100000" + "0000011111000000"
bitmap$(14) = "0000071111100000" + "0000011111700000"
bitmap$(15) = "0000071111100000" + "0000011111700000"
bitmap$(16) = "0000071111300000" + "0000031111700000"
bitmap$(17) = "0000028118200000" + "0000028118200000"
bitmap$(18) = "0000022662200000" + "0000022662200000"
bitmap$(19) = "0000022662200000" + "0000022662200000"
bitmap$(20) = "0000022222000000" + "0000002222200000"
bitmap$(21) = "0000922222000000" + "0000002222290000"
bitmap$(22) = "0000222222000000" + "0000002222220000"
bitmap$(23) = "0000922222000000" + "0000002222290000"
bitmap$(24) = "0000022222000000" + "0000002222200000"
bitmap$(25) = "0000022222300000" + "0000032222200000"
bitmap$(26) = "0000002222300000" + "0000032222000000"
bitmap$(27) = "0000000222330000" + "0000332220000000"
bitmap$(28) = "0000000222033000" + "0003300222000000"
bitmap$(29) = "0000000222000000" + "0000000222000000"
bitmap$(30) = "0000000222000000" + "0000000222000000"
bitmap$(31) = "0000033330000000" + "0000000033330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 32, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 32, yd + 88)
NEXT xd
NEXT yd
REM ************************ ruch poziomy FAZA 3
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111100000" + "0000111117000000"
bitmap$(11) = "0000011111170000" + "0000111111700000"
bitmap$(12) = "0000711111110000" + "0000111111170000"
bitmap$(13) = "0000711111110000" + "0000111111170000"
bitmap$(14) = "0000711111110000" + "0000111111170000"
bitmap$(15) = "0000111111110000" + "0000111111110000"
bitmap$(16) = "0000111333310000" + "0000133331110000"
bitmap$(17) = "0000066222260000" + "0000622226600000"
bitmap$(18) = "0000006222260000" + "0000622226000000"
bitmap$(19) = "0000002222200000" + "0000022222000000"
bitmap$(20) = "0000002222200000" + "0000022222000000"
bitmap$(21) = "0000022222200000" + "0000022222200000"
bitmap$(22) = "0000022222200000" + "0000022222200000"
bitmap$(23) = "0000922222200000" + "0000022222290000"
bitmap$(24) = "0000222022200000" + "0000022202220000"
bitmap$(25) = "0000222022200000" + "0000022202220000"
bitmap$(26) = "0000222092290000" + "0000922902220000"
bitmap$(27) = "0000222002220000" + "0000222002220000"
bitmap$(28) = "0000222002220000" + "0000222002220000"
bitmap$(29) = "0003333002220000" + "0000222003333000"
bitmap$(30) = "0000000000222000" + "0002220000000000"
bitmap$(31) = "0000000033330000" + "0000333300000000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 64, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 64, yd + 88)
NEXT xd
NEXT yd
REM ************************ fazy ruchu pionowego
REM Ludzik idacy w dol lub w gore
bitmap$(0) = "0000003330000000"
bitmap$(1) = "0000033333000000"
bitmap$(2) = "0000336663300000"
bitmap$(3) = "0000363636300000"
bitmap$(4) = "0000366666300000"
bitmap$(5) = "000006C8C6000000"
bitmap$(6) = "0000006860000000"
bitmap$(7) = "0000001610000000"
bitmap$(8) = "0000711111700000"
bitmap$(9) = "0001111111110000"
bitmap$(10) = "0071111111117000"
bitmap$(11) = "0071111111117000"
bitmap$(12) = "0011711111711000"
bitmap$(13) = "0711711111711700"
bitmap$(14) = "0A11711111711A00"
bitmap$(15) = "0117A11111A71100"
bitmap$(16) = "0117111111171100"
bitmap$(17) = "01104BBBBB401100"
bitmap$(18) = "0860922222906800"
bitmap$(19) = "0000922222900000"
bitmap$(20) = "0000929092900000"
bitmap$(21) = "0000929092900000"
bitmap$(22) = "0000929092900000"
bitmap$(23) = "0000929092900000"
bitmap$(24) = "0000929092900000"
bitmap$(25) = "0000929092900000"
bitmap$(26) = "0000929092900000"
bitmap$(27) = "0000929092900000"
bitmap$(28) = "0000929092900000"
bitmap$(29) = "0000929092900000"
bitmap$(30) = "0000333033300000"
bitmap$(31) = "0003330003330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 15
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 96, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "4" THEN COLOR 32: PSET (xd + 96, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 96, yd + 88)
NEXT xd
NEXT yd
REM RYSUNEK OKNA NIEBIESKO-ZIELONEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(3) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(4) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(5) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(6) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(7) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(8) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(9) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(10) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(11) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(12) = "AGEEHEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(13) = "AGEEHEHEEEGEEHEEEEEEGEEEHEEEEGAA"
bitmap$(14) = "AGEEEHEEEEGEEHEHEEEEGEHEHEEHEGAA"
bitmap$(15) = "AGHEEHEEEEGEEEHEEEEEGEEHEEHEEGAA"
bitmap$(16) = "AGEHEHEEEEGEHEHEEHEEGEEEHEHEEGAA"
bitmap$(17) = "AGEEHEEEHEGEEHEEEEHEGEEEEHEEEGAA"
bitmap$(18) = "AGEEHEEEHEGEEHEEEEHEGEEEHEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA NIEBIESKIEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIJJJJGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIJJJJGAA"
bitmap$(3) = "AGIIIIIIIIGIIIIIIIIIGIIIIIJJJGAA"
bitmap$(4) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIJJGAA"
bitmap$(5) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(6) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(7) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(8) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(9) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(10) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(11) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(12) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(13) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(14) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(15) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(16) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(17) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(18) = "AGEEEEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 32, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA ZIELONEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(3) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(4) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(5) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(6) = "AGEEHEEEEEGEEEEEEEEEGEEHEEEEEGAA"
bitmap$(7) = "AGEEHEHEEEGEHEEEEEEHGEEEHEEEEGAA"
bitmap$(8) = "AGEEEHEEEEGEHEHEHEHEGEHEHEEHEGAA"
bitmap$(9) = "AGHEEHEEEEGEEHEEEHEEGEEHEEHEEGAA"
bitmap$(10) = "AGEHEHEHEEGHEHEEEHEHGEEEHEHEEGAA"
bitmap$(11) = "AGEEHEEHEEGEHEEEEEHEGEEEHHEEEGAA"
bitmap$(12) = "AGEEHEHEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(13) = "AGEEHHEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(14) = "AGEEHEEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(15) = "AGEEHEEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(16) = "AGEEHEEEEEGEHEEEEHHHGEEEHEEEEGAA"
bitmap$(17) = "AGEHHHEEEEGHHHEEEEEEGEEHHHEEEGAA"
bitmap$(18) = "AGEEEEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 64, yd + 120)
NEXT xd: NEXT yd
REM zapis do pliku
DEF SEG = &HA000
BSAVE "bitmap1.scr", 0, 50000
LOCATE 19, 1
INPUT a$
CLS
BLOAD "bitmap1.scr"
END
|
|
Powrót do góry |
|
|
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Sob 14:46, 04 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca"
REM wymaga emulatora o predkosci 3300 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM SHARED plansza$(0 TO 48)
DIM SHARED kod$
DIM SHARED serca(1 TO 7, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED spc40(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: XS = 100: YS = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 7)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1;
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** ustawienie gracza na planszy
GET (x, y)-(x + 15, y + 31), pamiec
PUT (x, y), vertd1, PSET
liczsercaroom = 0
REM *************************** PETLA GLOWNA
PETLA:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1800: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 301 THEN x = 4: XS = 4: roomx = roomx + 1: GOTO rysuj
IF x + dx < 2 THEN x = 301: XS = 301: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: YS = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 2 THEN y = 147: YS = 147: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = XS: y = YS
GOTO PETLA
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ************* otworzenie tego, co bylo za ludzikiem
PUT (XS, YS), pamiec, PSET
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ********************* zapamietanie tego co za ludzikiem
GET (x, y)-(x + 15, y + 31), pamiec
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN PUT (x, y), vertd1, OR: XS = x: YS = y: GOTO PETLA
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN PUT (x, y), znakl1, OR
IF przebieranie = 1 THEN PUT (x, y), znakl2, OR
IF przebieranie = 2 THEN PUT (x, y), znakl3, OR
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN PUT (x, y), znakp1, OR
IF przebieranie = 1 THEN PUT (x, y), znakp2, OR
IF przebieranie = 2 THEN PUT (x, y), znakp3, OR
END IF
XS = x: YS = y
GOTO PETLA
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
REM zabranie
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(319, 55), spc40
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
FOR i = 1 TO 10
OUT 66, 32: OUT 66, 2
OUT 66, 64: OUT 66, 1
OUT 66, 250: OUT 66, 0
OUT 66, 32: OUT 66, 1
OUT 66, 32: OUT 66, 0
OUT 66, 104: OUT 66, 2
OUT 66, 48: OUT 66, 0
OUT 66, 250: OUT 66, 2
OUT 66, 32: OUT 66, 0
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*7+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLU"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#QPPPQQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#LLLQWWQQQU"
plansza$(6) = "......................._LC__________FQ_________#PPPWQQQQUU"
REM ************ plansze wiersza roomy=2
plansza$(7) = ".......................________________________UQQQWLLLQQ#"
plansza$(8) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(9) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(10) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(11) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(12) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(13) = ".......................____DJ____aM____________UUUUQQQUUUU"
REM ************* plansze wiersza roomy=3
plansza$(14) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(15) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(16) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(17) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(18) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(19) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(20) = ".......................____aM____UP____________UQQQWPPP0##"
REM ************ plansze wiersza roomy=4
plansza$(21) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(22) = ".......................________________________WPPPWPPPP##"
plansza$(23) = "......................._______NP_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(24) = "......................._YF_YJ_YO_SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(25) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(26) = "......................._______YR_SG____________UUQQQWLLLLU"
plansza$(27) = "......................._____________LS_KK1_____##00UUPPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(28) = "......................._DD____aR_SS_YS_________ULLLWWWLLL#"
plansza$(29) = ".......................________________II4_YI4_#...UUU...#"
plansza$(30) = "......................._______aR_______GL5_YL5_WPPPQUUPPPU"
plansza$(31) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(32) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(33) = ".......................________________KR1_____UU00U000UUU"
plansza$(34) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
REM ******************* plansze wiersza roomy=6
plansza$(35) = "......................._____________KM_________#00ULLLU0UU"
plansza$(36) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(37) = "......................._______GQ_______________U0QQQQW...#"
plansza$(38) = "......................._____________YS_________#LLLU00PPP#"
plansza$(39) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(40) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(41) = "......................._CC_______ZF_MS_________#QQQWQQQ00U"
REM ******************* plansze wiersza roomy=7
plansza$(42) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(43) = ".......................____SJ____ML____________###U...####"
plansza$(44) = "......................._____________KM_________#LLLPPP####"
plansza$(45) = ".......................____PH____ZJ____________#PPP000####"
plansza$(46) = ".......................__________EE____________#LLL0######"
plansza$(47) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(48) = "......................._LQ_____________________UUUUUUUPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET
PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET
PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET
PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET
PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET
PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET
PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET
PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET
PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 3000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 3000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Nie 19:20, 05 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 48)
DIM SHARED kod$
DIM SHARED serca(1 TO 7, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 7)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
liczsercaroom = 0: zrobione = 0
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 64: OUT 66, 2
OUT 66, 130: OUT 66, 1
OUT 66, 174: OUT 66, 2
OUT 66, 220: OUT 66, 1
OUT 66, 70: OUT 66, 1
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*7+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLU"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#QPPPQQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#LLLQWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQQQQUU"
REM ************ plansze wiersza roomy=2
plansza$(7) = ".......................________________________UQQQWLLLQQ#"
plansza$(8) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(9) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(10) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(11) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(12) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(13) = ".......................____DJ____aM____________UUUUQQQUUUU"
REM ************* plansze wiersza roomy=3
plansza$(14) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(15) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(16) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(17) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(18) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(19) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(20) = ".......................____aM____UP____________UQQQWPPP0##"
REM ************ plansze wiersza roomy=4
plansza$(21) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(22) = ".......................________________________WPPPWPPPP##"
plansza$(23) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(24) = ".......................____YI____SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(25) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(26) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(27) = "......................._____________LS_KK1_____##00UUPPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(28) = "......................._DD____aQ_SS_YS_________ULLLWWWLLL#"
plansza$(29) = ".......................________________II4_YI4_#...UUU...#"
plansza$(30) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(31) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(32) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(33) = ".......................________________KR1_____UU00U000UUU"
plansza$(34) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
REM ******************* plansze wiersza roomy=6
plansza$(35) = "......................._____________KM_________#00ULLLU0UU"
plansza$(36) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(37) = "......................._______GQ_______________U0QQQQW...#"
plansza$(38) = "......................._____________YS_________#LLLU00PPP#"
plansza$(39) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(40) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(41) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
REM ******************* plansze wiersza roomy=7
plansza$(42) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(43) = ".......................____SJ____ML____________###U...####"
plansza$(44) = "......................._____________KM_________#LLLPPP####"
plansza$(45) = ".......................____PH____ZJ____________#PPP000####"
plansza$(46) = ".......................__________EE____________#LLL0######"
plansza$(47) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(48) = "......................._LQ_____________________UUUUUUUPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET
PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET
PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET
PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET
PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET
PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET
PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET
PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET
PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Nie 20:24, 05 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLU"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#QPPPQQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#LLLQWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQQQQUU"
plansza$(7) = ".......................________________________###WWWQQQUU"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________UQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________UUQQ00QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................________________________UUQQQQ000UU"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WPPPWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = ".......................____YI____SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________UUUU00PPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SS_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = ".......................________________________UUQQQWQQQUU"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPP#"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = ".......................________________________UUQQ00QQ00U"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________#PPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUUPPP#"
plansza$(55) = ".......................________________________UUU000QQQ##"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET
PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET
PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET
PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET
PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET
PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET
PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET
PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET
PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Nie 21:33, 05 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLU"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#QPPPQQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#LLLQWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQLLLUU"
plansza$(7) = ".......................________________________###WWWPPPUU"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________UQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________UUQQ00QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................________________________UUQQQQ000UU"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WPPPWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = ".......................____YI____SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________UUUU00PPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SS_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = ".......................________________________UUQQQWQQQUU"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPPU"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = ".......................________________________UUQQ00QQ00U"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________UPPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUU...#"
plansza$(55) = ".......................________________________UUU0000PPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET
PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET
PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET
PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET
PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET
PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET
PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET
PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET
PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET
PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Pon 16:13, 06 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLU"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#QPPPQQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#LLLQWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQLLLUU"
plansza$(7) = ".......................________________________###WWWPPPUU"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________UQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________UUQQ00QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................____YP__________________UUQQQQ000UU"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WWWWWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = ".......................____YI____SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________UUUU00PPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SS_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = "......................._______aO_______________UUQQQWQQQUU"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPPU"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = ".......................________________________UUQQQAQQQ0U"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________UPPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUU...#"
plansza$(55) = "......................._______GQ_______________UUUQQQBPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET: PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET: PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET: PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET: PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET: PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET: PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "A" THEN
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET: PUT (64, y16), blok2, PSET:
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "B" THEN
PUT (32, y16), szaretlo4, PSET:
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blok4, PSET:
PUT (288, y16), blok2, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET: PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Wto 10:26, 07 Wrz 2021 Temat postu: |
|
|
REM modul BSAVE do gry "Serca"
SCREEN 13
DIM kolor$(0 TO 255)
DIM cegla(0 TO 32) AS LONG
DIM tlo(0 TO 32) AS LONG
DIM poltlo(0 TO 16) AS LONG
DIM bitmap$(0 TO 31)
DIM blok(0 TO 64) AS LONG
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 0A 0A 0A": REM tlo plyta
kolor$(2) = "02 06 06 06": REM tlo fuga
kolor$(3) = "03 10 10 10": REM tlo krawedz
kolor$(4) = "04 00 2F 00": REM liscie
kolor$(5) = "05 3F 3F 3F"
kolor$(6) = "06 3F 3F 3F"
kolor$(7) = "07 28 0A 00": REM doniczka
kolor$(8) = "08 00 00 3F": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F"
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy
REM bloki przezroczystosci
kolor$(16) = "10 3F 3F 3F"
kolor$(32) = "20 3F 3F 3F"
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
kolor$(31) = "1F 28 00 00": REM sweter
kolor$(47) = "2F 05 12 2F": REM spodnie
kolor$(63) = "3F 17 17 17": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 2C 17": REM skora1
kolor$(127) = "7F 18 00 00": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 30 20 00": REM nos
kolor$(159) = "9F 04 0D 23": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 20 00 00": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 2B 2B": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
REM rysunki ****************************************
REM rysunek cegly
bitmap$(0) = "DDDDDDDEDDDDDDDE"
bitmap$(1) = "DFFFFFFEDFFFFFFE"
bitmap$(2) = "DFFFFFFEDFFFFFFE"
bitmap$(3) = "EEEEEEEEEEEEEEEE"
bitmap$(4) = "DDDEDDDDDDDDDDDD"
bitmap$(5) = "FFFEDFFFFFFFFFFF"
bitmap$(6) = "FFFEDFFFFFFFFFFF"
bitmap$(7) = "EEEEEEEEEEEEEEEE"
REM 250-A 251-B 252-C 253-D 254-E 255-F
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 - 1 + &HF0 + 10
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), cegla
REM komorka tla
REM tlo(0) = &H80040
bitmap$(0) = "0001200000012000"
bitmap$(1) = "1111200000011111"
bitmap$(2) = "2221200000012222"
bitmap$(3) = "0001200000012000"
bitmap$(4) = "0001200000012000"
bitmap$(5) = "0001111111112000"
bitmap$(6) = "0001222222212000"
bitmap$(7) = "0001200000012000"
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 48 + 1
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), tlo
REM przygotowanie tablic elementow wierszowych
CLS
FOR x = 0 TO 19
FOR y = 0 TO 10
PUT (x * 16, y * 8), tlo, PSET
NEXT y
NEXT x
REM cegly
FOR i = 0 TO 19
PUT (i * 16, 0), cegla, PSET
NEXT i
FOR i = 0 TO 8
PUT (i * 16, 8), cegla, PSET
PUT (304 - i * 16, 8), cegla, PSET
NEXT i
FOR i = 0 TO 4
PUT (i * 16, 16), cegla, PSET
PUT (304 - i * 16, 16), cegla, PSET
NEXT i
FOR i = 0 TO 2
PUT (i * 16, 24), cegla, PSET
PUT (304 - i * 16, 24), cegla, PSET
NEXT i
FOR i = 0 TO 9
PUT (i * 16 + 80, 24), cegla, PSET
NEXT i
REM poszerzenie przejsc pionowych
GET (8, 64)-(15, 71), poltlo
PUT (136, 8), poltlo, PSET
PUT (40, 24), poltlo, PSET
GET (0, 64)-(7, 71), poltlo
PUT (176, 8), poltlo, PSET
PUT (272, 24), poltlo, PSET
REM wykonczenie cegiel
COLOR 253: REM szczeliny
LINE (135, 8)-(135, 15)
LINE (79, 16)-(79, 23)
LINE (39, 24)-(39, 31)
LINE (239, 24)-(239, 31)
COLOR 252: REM krawedzie
LINE (184, 12)-(184, 14)
LINE (240, 21)-(240, 22)
LINE (80, 28)-(80, 30)
LINE (280, 28)-(280, 30)
REM RYSUNEK kamienia
bitmap$(0) = "JJJJJJJJJJJJJJJJ"
bitmap$(1) = "JJNNNNNNNNNNNNJJ"
bitmap$(2) = "JJNAAAKJPKAAANJJ"
bitmap$(3) = "JJNAKONPNKPKANJJ"
bitmap$(4) = "JJNAPMKLGLMPANJJ"
bitmap$(5) = "JJNKJOJKPJPKMNJJ"
bitmap$(6) = "JJNOLJKJJMKMJNJJ"
bitmap$(7) = "JJNJFMJOHKNIPNJJ"
bitmap$(8) = "JJNJILJLJHIJHNJJ"
bitmap$(9) = "JJNIHJNOHOJJKNJJ"
bitmap$(10) = "JJNAJIIHJOMPANJJ"
bitmap$(11) = "JJNAINNJLJOKANJJ"
bitmap$(12) = "JJNAAAIKJKAAANJJ"
bitmap$(13) = "JJNNNNNNNNNNNNJJ"
bitmap$(14) = "JJJJJJJJJJJJJJJJ"
bitmap$(15) = "JJJJJJJJJJJJJJJJ"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 230
: PSET (xd, yd + 64)
NEXT xd: NEXT yd
REM RYSUNEK DONICZKI
bitmap$(0) = "BBBCDEEBBEECDBBB"
bitmap$(1) = "CCCCEEEEEEEEDCCC"
bitmap$(2) = "DDDEEEEEEEEEEDDD"
bitmap$(3) = "BBBEEEEEEEECEEBB"
bitmap$(4) = "BBEEBEBEEBECEEBB"
bitmap$(5) = "BBECDECEECECDEBB"
bitmap$(6) = "BBECEDDEEDDEDEBB"
bitmap$(7) = "BBECEBBEEBBEDEBB"
bitmap$(8) = "BBBCDBBEEBBCDBBB"
bitmap$(9) = "CCCCDBBEEBBCCCCC"
bitmap$(10) = "DDDCBBBEEBBCDDDD"
bitmap$(11) = "BBBCDHHHHHHCDBBB"
bitmap$(12) = "BBBCDHHHHHHCDBBB"
bitmap$(13) = "BBBCCCHHHHCCDBBB"
bitmap$(14) = "BBBCDDHHHHDCDBBB"
bitmap$(15) = "BBBCDBHHHHBCDBBB"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65
: PSET (xd + 16, yd + 64)
NEXT xd: NEXT yd
REM rysunek bloku
bitmap$(0) = "KLKLKLKLKLKLKLKF" + "JJJJJJJJJJJJJJJF" + "KLKLKLKLKLKLKLKF"
bitmap$(1) = "LJJJJJJJJJJJJJJF" + "KHHHHHIHHGHHHHHF" + "LJJJJJJJJJJJJJJF"
bitmap$(2) = "MJKIJIJKJJKJJJJF" + "KHHHIHHHIHHGHHHF" + "MJJKJKJIJKJIJIJF"
bitmap$(3) = "LJJJJJJJJIJIJIJF" + "KHGHHHHIHHHHIHHF" + "LJJJIJJJIJJJJKJF"
bitmap$(4) = "MJJIJKJIJJJJKJJF" + "KHHHIHHHHIHHHHHF" + "MJJJJKJIJJJKJJJF"
bitmap$(5) = "LJKJIJJJKJJIJIJF" + "KHHGHHIHGHHIHGHF" + "LJKJIJJJKJJJIJJF"
bitmap$(6) = "MJJJJJJJJJJJJJJF" + "KHHHHHHHHHHHHHHF" + "MJJJJJJJJJIJJJJF"
bitmap$(7) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
bitmap$(8) = "KLKLKLKFJJJJJJJJ" + "JJJJJJJFJJJJJJJJ" + "JJJJJJJFKLKLKLKF"
bitmap$(9) = "LJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFLJJJJJJF"
bitmap$(10) = "MJJIJJJFKHIHHIHH" + "HIHIHHHFKHHGHGHH" + "HHGHIHHFMJKJIJJF"
bitmap$(11) = "LJJJKJJFKHHGHHHI" + "HHGHHGHFKHIHHHHI" + "HGHHHHHFLJJJKJJF"
bitmap$(12) = "MJJIJIJFKHHHIHHH" + "GHHHIHHFKHHHGHHH" + "HHHHHIHFMJJJJJJF"
bitmap$(13) = "LJKJKJJFKHIHHGHI" + "HHHIHHHFKHGHHIHG" + "HIHGHHHFLJKJIKJF"
bitmap$(14) = "MJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFMJJJJJJF"
bitmap$(15) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
FOR yd = 0 TO 15
FOR xd = 0 TO 47
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 224
: PSET (xd + 32, yd + 64)
NEXT xd: NEXT yd
GET (48, 64)-(63, 79), blok
FOR i = 0 TO 19: PUT (i * 16, 32), blok, PSET
NEXT i
COLOR 15: LOCATE 10, 16: PRINT "SERCA 1.0"
REM animacja
REM 7,9 - rejestry przezroczyste
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066663300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866666300000" + "0000036666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111170000" + "0000711111700000"
bitmap$(11) = "0000011111170000" + "0000711111100000"
bitmap$(12) = "0000011111110000" + "0000111111100000"
bitmap$(13) = "0000711111117000" + "0007111111170000"
bitmap$(14) = "0000711111111000" + "0001111111170000"
bitmap$(15) = "0000111111111000" + "0001111111110000"
bitmap$(16) = "0001111333311000" + "0001133331111000"
bitmap$(17) = "0006602222206600" + "0066022222066000"
bitmap$(18) = "0006002222200600" + "0060022222006000"
bitmap$(19) = "0000092222200000" + "0000922222900000"
bitmap$(20) = "0000022222290000" + "0000222222200000"
bitmap$(21) = "0000022222220000" + "0000222222200000"
bitmap$(22) = "0000022202220000" + "0000222022200000"
bitmap$(23) = "0000922202220000" + "0000222022220000"
bitmap$(24) = "0000222202222000" + "0009222022220000"
bitmap$(25) = "0000222009222000" + "0002229002220000"
bitmap$(26) = "0000222000222000" + "0002220002220000"
bitmap$(27) = "0000222000222000" + "0002220002220000"
bitmap$(28) = "0009222000222300" + "0032220009229000"
bitmap$(29) = "0002220000033300" + "0033300000222000"
bitmap$(30) = "0003330000330000" + "0000330000222000"
bitmap$(31) = "0033330000000000" + "0000000000333300"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd, yd + 88)
NEXT xd
NEXT yd
REM ************************************ FAZA 2
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000001111100000" + "0000011111000000"
bitmap$(11) = "0000001111100000" + "0000011111000000"
bitmap$(12) = "0000001111100000" + "0000011111000000"
bitmap$(13) = "0000001111100000" + "0000011111000000"
bitmap$(14) = "0000071111100000" + "0000011111700000"
bitmap$(15) = "0000071111100000" + "0000011111700000"
bitmap$(16) = "0000071111300000" + "0000031111700000"
bitmap$(17) = "0000028118200000" + "0000028118200000"
bitmap$(18) = "0000022662200000" + "0000022662200000"
bitmap$(19) = "0000022662200000" + "0000022662200000"
bitmap$(20) = "0000022222000000" + "0000002222200000"
bitmap$(21) = "0000922222000000" + "0000002222290000"
bitmap$(22) = "0000222222000000" + "0000002222220000"
bitmap$(23) = "0000922222000000" + "0000002222290000"
bitmap$(24) = "0000022222000000" + "0000002222200000"
bitmap$(25) = "0000022222300000" + "0000032222200000"
bitmap$(26) = "0000002222300000" + "0000032222000000"
bitmap$(27) = "0000000222330000" + "0000332220000000"
bitmap$(28) = "0000000222033000" + "0003300222000000"
bitmap$(29) = "0000000222000000" + "0000000222000000"
bitmap$(30) = "0000000222000000" + "0000000222000000"
bitmap$(31) = "0000033330000000" + "0000000033330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 32, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 32, yd + 88)
NEXT xd
NEXT yd
REM ************************ ruch poziomy FAZA 3
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111100000" + "0000111117000000"
bitmap$(11) = "0000011111170000" + "0000111111700000"
bitmap$(12) = "0000711111110000" + "0000111111170000"
bitmap$(13) = "0000711111110000" + "0000111111170000"
bitmap$(14) = "0000711111110000" + "0000111111170000"
bitmap$(15) = "0000111111110000" + "0000111111110000"
bitmap$(16) = "0000111333310000" + "0000133331110000"
bitmap$(17) = "0000066222260000" + "0000622226600000"
bitmap$(18) = "0000006222260000" + "0000622226000000"
bitmap$(19) = "0000002222200000" + "0000022222000000"
bitmap$(20) = "0000002222200000" + "0000022222000000"
bitmap$(21) = "0000022222200000" + "0000022222200000"
bitmap$(22) = "0000022222200000" + "0000022222200000"
bitmap$(23) = "0000922222200000" + "0000022222290000"
bitmap$(24) = "0000222022200000" + "0000022202220000"
bitmap$(25) = "0000222022200000" + "0000022202220000"
bitmap$(26) = "0000222092290000" + "0000922902220000"
bitmap$(27) = "0000222002220000" + "0000222002220000"
bitmap$(28) = "0000222002220000" + "0000222002220000"
bitmap$(29) = "0003333002220000" + "0000222003333000"
bitmap$(30) = "0000000000222000" + "0002220000000000"
bitmap$(31) = "0000000033330000" + "0000333300000000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 64, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 64, yd + 88)
NEXT xd
NEXT yd
REM ************************ fazy ruchu pionowego
REM Ludzik idacy w dol lub w gore
bitmap$(0) = "0000003330000000"
bitmap$(1) = "0000033333000000"
bitmap$(2) = "0000336663300000"
bitmap$(3) = "0000363636300000"
bitmap$(4) = "0000366666300000"
bitmap$(5) = "000006C8C6000000"
bitmap$(6) = "0000006860000000"
bitmap$(7) = "0000001610000000"
bitmap$(8) = "0000711111700000"
bitmap$(9) = "0001111111110000"
bitmap$(10) = "0071111111117000"
bitmap$(11) = "0071111111117000"
bitmap$(12) = "0011711111711000"
bitmap$(13) = "0711711111711700"
bitmap$(14) = "0A11711111711A00"
bitmap$(15) = "0117A11111A71100"
bitmap$(16) = "0117111111171100"
bitmap$(17) = "01104BBBBB401100"
bitmap$(18) = "0860922222906800"
bitmap$(19) = "0000922222900000"
bitmap$(20) = "0000929092900000"
bitmap$(21) = "0000929092900000"
bitmap$(22) = "0000929092900000"
bitmap$(23) = "0000929092900000"
bitmap$(24) = "0000929092900000"
bitmap$(25) = "0000929092900000"
bitmap$(26) = "0000929092900000"
bitmap$(27) = "0000929092900000"
bitmap$(28) = "0000929092900000"
bitmap$(29) = "0000929092900000"
bitmap$(30) = "0000333033300000"
bitmap$(31) = "0003330003330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 15
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 96, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "4" THEN COLOR 32: PSET (xd + 96, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 96, yd + 88)
NEXT xd
NEXT yd
REM RYSUNEK OKNA NIEBIESKO-ZIELONEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(3) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(4) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(5) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(6) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(7) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(8) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(9) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(10) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(11) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(12) = "AGEEHEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(13) = "AGEEHEHEEEGEEHEEEEEEGEEEHEEEEGAA"
bitmap$(14) = "AGEEEHEEEEGEEHEHEEEEGEHEHEEHEGAA"
bitmap$(15) = "AGHEEHEEEEGEEEHEEEEEGEEHEEHEEGAA"
bitmap$(16) = "AGEHEHEEEEGEHEHEEHEEGEEEHEHEEGAA"
bitmap$(17) = "AGEEHEEEHEGEEHEEEEHEGEEEEHEEEGAA"
bitmap$(18) = "AGEEHEEEHEGEEHEEEEHEGEEEHEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA NIEBIESKIEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIJJJJGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIJJJJGAA"
bitmap$(3) = "AGIIIIIIIIGIIIIIIIIIGIIIIIJJJGAA"
bitmap$(4) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIJJGAA"
bitmap$(5) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(6) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(7) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(8) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(9) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(10) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(11) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(12) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(13) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(14) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(15) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(16) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(17) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(18) = "AGEEEEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 32, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA ZIELONEGO
bitmap$(0) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(2) = "AGIIIIIIIIGIIIIIIIIIGIIIIIIIIGAA"
bitmap$(3) = "AGIIEEEEIIGIIIEEIIIIGIEEEIIIIGAA"
bitmap$(4) = "AGIEEEEEEIGIIEEEEIIEGEEEEEIIIGAA"
bitmap$(5) = "AGEEEEEEEEGIEEEEEEEEGEEEEEEEIGAA"
bitmap$(6) = "AGEEHEEEEEGEEEEEEEEEGEEHEEEEEGAA"
bitmap$(7) = "AGEEHEHEEEGEHEEEEEEHGEEEHEEEEGAA"
bitmap$(8) = "AGEEEHEEEEGEHEHEHEHEGEHEHEEHEGAA"
bitmap$(9) = "AGHEEHEEEEGEEHEEEHEEGEEHEEHEEGAA"
bitmap$(10) = "AGEHEHEHEEGHEHEEEHEHGEEEHEHEEGAA"
bitmap$(11) = "AGEEHEEHEEGEHEEEEEHEGEEEHHEEEGAA"
bitmap$(12) = "AGEEHEHEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(13) = "AGEEHHEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(14) = "AGEEHEEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(15) = "AGEEHEEEEEGEHEEEEEHEGEEEHEEEEGAA"
bitmap$(16) = "AGEEHEEEEEGEHEEEEHHHGEEEHEEEEGAA"
bitmap$(17) = "AGEHHHEEEEGHHHEEEEEEGEEHHHEEEGAA"
bitmap$(18) = "AGEEEEEEEEGEEEEEEEEEGEEEEEEEEGAA"
bitmap$(19) = "GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 64, yd + 120)
NEXT xd: NEXT yd
REM zapis do pliku
DEF SEG = &HA000
BSAVE "bitmap1.scr", 0, 50000
LOCATE 19, 1
INPUT a$
CLS
BLOAD "bitmap1.scr"
END
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Wto 10:27, 07 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 3F 3F 3F": REM niezdef
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM niezdef
kolor$(26) = "1A 3F 3F 3F": REM
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM niezdef
kolor$(42) = "2A 3F 3F 3F": REM
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLB"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SK____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#Q...QQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#L..PWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQLLLUU"
plansza$(7) = ".......................__________aH_WI_________##QQQBPPPAA"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________BQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________AAQQQ0QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................____YP_______KQ_________UUQQQBQQQAA"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SG____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WWWWWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = ".......................____YI____SK_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________AAAAQQPPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SS_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = "......................._______aO_______________UUQQQWQQQBB"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPPU"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = "......................._____________aI_________BBQQQUQQQAA"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________UPPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUU...#"
plansza$(55) = "......................._______MQ_aR____________AAAQQQBPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
serca(8, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
serca(8, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET: PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET: PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET: PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET: PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET: PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET: PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "A" THEN
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET: PUT (64, y16), blok2, PSET:
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "B" THEN
PUT (32, y16), szaretlo4, PSET:
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blok4, PSET:
PUT (288, y16), blok2, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET: PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yokna = (ASC(el$) - 65) * 8
GET (xokna + 8, yokna + 8)-(xokna + 15 + 8, yokna + 7 + 8), tlo
COLOR 5: LOCATE yokna / 8, xokna / 8: PRINT CHR$(3);
xserca = xokna - 8
yserca = yokna - 8
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Wto 17:35, 07 Wrz 2021 Temat postu: |
|
|
REM modul BSAVE do gry "Serca"
SCREEN 13
DIM kolor$(0 TO 255)
DIM cegla(0 TO 32) AS LONG
DIM tlo(0 TO 32) AS LONG
DIM poltlo(0 TO 16) AS LONG
DIM bitmap$(0 TO 31)
DIM blok(0 TO 64) AS LONG
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 0A 0A 0A": REM tlo plyta
kolor$(2) = "02 06 06 06": REM tlo fuga
kolor$(3) = "03 10 10 10": REM tlo krawedz
kolor$(4) = "04 00 2F 00": REM liscie
kolor$(5) = "05 3F 3F 3F"
kolor$(6) = "06 3F 3F 3F"
kolor$(7) = "07 28 0A 00": REM doniczka
kolor$(8) = "08 00 00 3F": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 20 20 20": REM framuga zewnetrzna
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy
REM bloki przezroczystosci
kolor$(16) = "10 3F 3F 3F"
kolor$(32) = "20 3F 3F 3F"
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
kolor$(31) = "1F 28 00 00": REM sweter
kolor$(47) = "2F 05 12 2F": REM spodnie
kolor$(63) = "3F 17 17 17": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 2C 17": REM skora1
kolor$(127) = "7F 18 00 00": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 30 20 00": REM nos
kolor$(159) = "9F 04 0D 23": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 20 00 00": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 2B 2B": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
REM rysunki ****************************************
REM rysunek cegly
bitmap$(0) = "DDDDDDDEDDDDDDDE"
bitmap$(1) = "DFFFFFFEDFFFFFFE"
bitmap$(2) = "DFFFFFFEDFFFFFFE"
bitmap$(3) = "EEEEEEEEEEEEEEEE"
bitmap$(4) = "DDDEDDDDDDDDDDDD"
bitmap$(5) = "FFFEDFFFFFFFFFFF"
bitmap$(6) = "FFFEDFFFFFFFFFFF"
bitmap$(7) = "EEEEEEEEEEEEEEEE"
REM 250-A 251-B 252-C 253-D 254-E 255-F
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 - 1 + &HF0 + 10
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), cegla
REM komorka tla
REM tlo(0) = &H80040
bitmap$(0) = "0001200000012000"
bitmap$(1) = "1111200000011111"
bitmap$(2) = "2221200000012222"
bitmap$(3) = "0001200000012000"
bitmap$(4) = "0001200000012000"
bitmap$(5) = "0001111111112000"
bitmap$(6) = "0001222222212000"
bitmap$(7) = "0001200000012000"
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 48 + 1
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), tlo
REM przygotowanie tablic elementow wierszowych
CLS
FOR x = 0 TO 19
FOR y = 0 TO 10
PUT (x * 16, y * 8), tlo, PSET
NEXT y
NEXT x
REM cegly
FOR i = 0 TO 19
PUT (i * 16, 0), cegla, PSET
NEXT i
FOR i = 0 TO 8
PUT (i * 16, 8), cegla, PSET
PUT (304 - i * 16, 8), cegla, PSET
NEXT i
FOR i = 0 TO 4
PUT (i * 16, 16), cegla, PSET
PUT (304 - i * 16, 16), cegla, PSET
NEXT i
FOR i = 0 TO 2
PUT (i * 16, 24), cegla, PSET
PUT (304 - i * 16, 24), cegla, PSET
NEXT i
FOR i = 0 TO 9
PUT (i * 16 + 80, 24), cegla, PSET
NEXT i
REM poszerzenie przejsc pionowych
GET (8, 64)-(15, 71), poltlo
PUT (136, 8), poltlo, PSET
PUT (40, 24), poltlo, PSET
GET (0, 64)-(7, 71), poltlo
PUT (176, 8), poltlo, PSET
PUT (272, 24), poltlo, PSET
REM wykonczenie cegiel
COLOR 253: REM szczeliny
LINE (135, 8)-(135, 15)
LINE (79, 16)-(79, 23)
LINE (39, 24)-(39, 31)
LINE (239, 24)-(239, 31)
COLOR 252: REM krawedzie
LINE (184, 12)-(184, 14)
LINE (240, 21)-(240, 22)
LINE (80, 28)-(80, 30)
LINE (280, 28)-(280, 30)
REM RYSUNEK kamienia
bitmap$(0) = "JJJJJJJJJJJJJJJJ"
bitmap$(1) = "JJNNNNNNNNNNNNJJ"
bitmap$(2) = "JJNAAAKJPKAAANJJ"
bitmap$(3) = "JJNAKONPNKPKANJJ"
bitmap$(4) = "JJNAPMKLGLMPANJJ"
bitmap$(5) = "JJNKJOJKPJPKMNJJ"
bitmap$(6) = "JJNOLJKJJMKMJNJJ"
bitmap$(7) = "JJNJFMJOHKNIPNJJ"
bitmap$(8) = "JJNJILJLJHIJHNJJ"
bitmap$(9) = "JJNIHJNOHOJJKNJJ"
bitmap$(10) = "JJNAJIIHJOMPANJJ"
bitmap$(11) = "JJNAINNJLJOKANJJ"
bitmap$(12) = "JJNAAAIKJKAAANJJ"
bitmap$(13) = "JJNNNNNNNNNNNNJJ"
bitmap$(14) = "JJJJJJJJJJJJJJJJ"
bitmap$(15) = "JJJJJJJJJJJJJJJJ"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 230
: PSET (xd, yd + 64)
NEXT xd: NEXT yd
REM RYSUNEK DONICZKI
bitmap$(0) = "BBBCDEEBBEECDBBB"
bitmap$(1) = "CCCCEEEEEEEEDCCC"
bitmap$(2) = "DDDEEEEEEEEEEDDD"
bitmap$(3) = "BBBEEEEEEEECEEBB"
bitmap$(4) = "BBEEBEBEEBECEEBB"
bitmap$(5) = "BBECDECEECECDEBB"
bitmap$(6) = "BBECEDDEEDDEDEBB"
bitmap$(7) = "BBECEBBEEBBEDEBB"
bitmap$(8) = "BBBCDBBEEBBCDBBB"
bitmap$(9) = "CCCCDBBEEBBCCCCC"
bitmap$(10) = "DDDCBBBEEBBCDDDD"
bitmap$(11) = "BBBCDHHHHHHCDBBB"
bitmap$(12) = "BBBCDHHHHHHCDBBB"
bitmap$(13) = "BBBCCCHHHHCCDBBB"
bitmap$(14) = "BBBCDDHHHHDCDBBB"
bitmap$(15) = "BBBCDBHHHHBCDBBB"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65
: PSET (xd + 16, yd + 64)
NEXT xd: NEXT yd
REM rysunek bloku
bitmap$(0) = "KLKLKLKLKLKLKLKF" + "JJJJJJJJJJJJJJJF" + "KLKLKLKLKLKLKLKF"
bitmap$(1) = "LJJJJJJJJJJJJJJF" + "KHHHHHIHHGHHHHHF" + "LJJJJJJJJJJJJJJF"
bitmap$(2) = "MJKIJIJKJJKJJJJF" + "KHHHIHHHIHHGHHHF" + "MJJKJKJIJKJIJIJF"
bitmap$(3) = "LJJJJJJJJIJIJIJF" + "KHGHHHHIHHHHIHHF" + "LJJJIJJJIJJJJKJF"
bitmap$(4) = "MJJIJKJIJJJJKJJF" + "KHHHIHHHHIHHHHHF" + "MJJJJKJIJJJKJJJF"
bitmap$(5) = "LJKJIJJJKJJIJIJF" + "KHHGHHIHGHHIHGHF" + "LJKJIJJJKJJJIJJF"
bitmap$(6) = "MJJJJJJJJJJJJJJF" + "KHHHHHHHHHHHHHHF" + "MJJJJJJJJJIJJJJF"
bitmap$(7) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
bitmap$(8) = "KLKLKLKFJJJJJJJJ" + "JJJJJJJFJJJJJJJJ" + "JJJJJJJFKLKLKLKF"
bitmap$(9) = "LJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFLJJJJJJF"
bitmap$(10) = "MJJIJJJFKHIHHIHH" + "HIHIHHHFKHHGHGHH" + "HHGHIHHFMJKJIJJF"
bitmap$(11) = "LJJJKJJFKHHGHHHI" + "HHGHHGHFKHIHHHHI" + "HGHHHHHFLJJJKJJF"
bitmap$(12) = "MJJIJIJFKHHHIHHH" + "GHHHIHHFKHHHGHHH" + "HHHHHIHFMJJJJJJF"
bitmap$(13) = "LJKJKJJFKHIHHGHI" + "HHHIHHHFKHGHHIHG" + "HIHGHHHFLJKJIKJF"
bitmap$(14) = "MJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFMJJJJJJF"
bitmap$(15) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
FOR yd = 0 TO 15
FOR xd = 0 TO 47
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 224
: PSET (xd + 32, yd + 64)
NEXT xd: NEXT yd
GET (48, 64)-(63, 79), blok
FOR i = 0 TO 19: PUT (i * 16, 32), blok, PSET
NEXT i
COLOR 15: LOCATE 10, 16: PRINT "SERCA 1.0"
REM animacja
REM 7,9 - rejestry przezroczyste
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066663300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866666300000" + "0000036666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111170000" + "0000711111700000"
bitmap$(11) = "0000011111170000" + "0000711111100000"
bitmap$(12) = "0000011111110000" + "0000111111100000"
bitmap$(13) = "0000711111117000" + "0007111111170000"
bitmap$(14) = "0000711111111000" + "0001111111170000"
bitmap$(15) = "0000111111111000" + "0001111111110000"
bitmap$(16) = "0001111333311000" + "0001133331111000"
bitmap$(17) = "0006602222206600" + "0066022222066000"
bitmap$(18) = "0006002222200600" + "0060022222006000"
bitmap$(19) = "0000092222200000" + "0000922222900000"
bitmap$(20) = "0000022222290000" + "0000222222200000"
bitmap$(21) = "0000022222220000" + "0000222222200000"
bitmap$(22) = "0000022202220000" + "0000222022200000"
bitmap$(23) = "0000922202220000" + "0000222022220000"
bitmap$(24) = "0000222202222000" + "0009222022220000"
bitmap$(25) = "0000222009222000" + "0002229002220000"
bitmap$(26) = "0000222000222000" + "0002220002220000"
bitmap$(27) = "0000222000222000" + "0002220002220000"
bitmap$(28) = "0009222000222300" + "0032220009229000"
bitmap$(29) = "0002220000033300" + "0033300000222000"
bitmap$(30) = "0003330000330000" + "0000330000222000"
bitmap$(31) = "0033330000000000" + "0000000000333300"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd, yd + 88)
NEXT xd
NEXT yd
REM ************************************ FAZA 2
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000001111100000" + "0000011111000000"
bitmap$(11) = "0000001111100000" + "0000011111000000"
bitmap$(12) = "0000001111100000" + "0000011111000000"
bitmap$(13) = "0000001111100000" + "0000011111000000"
bitmap$(14) = "0000071111100000" + "0000011111700000"
bitmap$(15) = "0000071111100000" + "0000011111700000"
bitmap$(16) = "0000071111300000" + "0000031111700000"
bitmap$(17) = "0000028118200000" + "0000028118200000"
bitmap$(18) = "0000022662200000" + "0000022662200000"
bitmap$(19) = "0000022662200000" + "0000022662200000"
bitmap$(20) = "0000022222000000" + "0000002222200000"
bitmap$(21) = "0000922222000000" + "0000002222290000"
bitmap$(22) = "0000222222000000" + "0000002222220000"
bitmap$(23) = "0000922222000000" + "0000002222290000"
bitmap$(24) = "0000022222000000" + "0000002222200000"
bitmap$(25) = "0000022222300000" + "0000032222200000"
bitmap$(26) = "0000002222300000" + "0000032222000000"
bitmap$(27) = "0000000222330000" + "0000332220000000"
bitmap$(28) = "0000000222033000" + "0003300222000000"
bitmap$(29) = "0000000222000000" + "0000000222000000"
bitmap$(30) = "0000000222000000" + "0000000222000000"
bitmap$(31) = "0000033330000000" + "0000000033330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 32, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 32, yd + 88)
NEXT xd
NEXT yd
REM ************************ ruch poziomy FAZA 3
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111100000" + "0000111117000000"
bitmap$(11) = "0000011111170000" + "0000111111700000"
bitmap$(12) = "0000711111110000" + "0000111111170000"
bitmap$(13) = "0000711111110000" + "0000111111170000"
bitmap$(14) = "0000711111110000" + "0000111111170000"
bitmap$(15) = "0000111111110000" + "0000111111110000"
bitmap$(16) = "0000111333310000" + "0000133331110000"
bitmap$(17) = "0000066222260000" + "0000622226600000"
bitmap$(18) = "0000006222260000" + "0000622226000000"
bitmap$(19) = "0000002222200000" + "0000022222000000"
bitmap$(20) = "0000002222200000" + "0000022222000000"
bitmap$(21) = "0000022222200000" + "0000022222200000"
bitmap$(22) = "0000022222200000" + "0000022222200000"
bitmap$(23) = "0000922222200000" + "0000022222290000"
bitmap$(24) = "0000222022200000" + "0000022202220000"
bitmap$(25) = "0000222022200000" + "0000022202220000"
bitmap$(26) = "0000222092290000" + "0000922902220000"
bitmap$(27) = "0000222002220000" + "0000222002220000"
bitmap$(28) = "0000222002220000" + "0000222002220000"
bitmap$(29) = "0003333002220000" + "0000222003333000"
bitmap$(30) = "0000000000222000" + "0002220000000000"
bitmap$(31) = "0000000033330000" + "0000333300000000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 64, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 64, yd + 88)
NEXT xd
NEXT yd
REM ************************ fazy ruchu pionowego
REM Ludzik idacy w dol lub w gore
bitmap$(0) = "0000003330000000"
bitmap$(1) = "0000033333000000"
bitmap$(2) = "0000336663300000"
bitmap$(3) = "0000363636300000"
bitmap$(4) = "0000366666300000"
bitmap$(5) = "000006C8C6000000"
bitmap$(6) = "0000006860000000"
bitmap$(7) = "0000001610000000"
bitmap$(8) = "0000711111700000"
bitmap$(9) = "0001111111110000"
bitmap$(10) = "0071111111117000"
bitmap$(11) = "0071111111117000"
bitmap$(12) = "0011711111711000"
bitmap$(13) = "0711711111711700"
bitmap$(14) = "0A11711111711A00"
bitmap$(15) = "0117A11111A71100"
bitmap$(16) = "0117111111171100"
bitmap$(17) = "01104BBBBB401100"
bitmap$(18) = "0860922222906800"
bitmap$(19) = "0000922222900000"
bitmap$(20) = "0000929092900000"
bitmap$(21) = "0000929092900000"
bitmap$(22) = "0000929092900000"
bitmap$(23) = "0000929092900000"
bitmap$(24) = "0000929092900000"
bitmap$(25) = "0000929092900000"
bitmap$(26) = "0000929092900000"
bitmap$(27) = "0000929092900000"
bitmap$(28) = "0000929092900000"
bitmap$(29) = "0000929092900000"
bitmap$(30) = "0000333033300000"
bitmap$(31) = "0003330003330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 15
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 96, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "4" THEN COLOR 32: PSET (xd + 96, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 96, yd + 88)
NEXT xd
NEXT yd
REM RYSUNEK OKNA NIEBIESKO-ZIELONEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(4) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(5) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(6) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(7) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(8) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(9) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(10) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(11) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(12) = "AAGKEHEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(13) = "AAGKEHEHEEEGKEHEEEEEGKEEHEEEEGAA"
bitmap$(14) = "AAGKEEHEEEEGKEHEHEEEGKHEHEEHEGAA"
bitmap$(15) = "AAGKEEHEEEEGKEEHEEEEGKEHEEHEEGAA"
bitmap$(16) = "AAGKHEHEEEEGKHEHEHEEGKEEHEHEEGAA"
bitmap$(17) = "AAGKEHEEEHEGKEHEEEHEGKEEEHEEEGAA"
bitmap$(18) = "AAGKEHEEEHEGKEHEEEHEGKEEHEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA NIEBIESKIEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIJJJJGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIJJJJGAA"
bitmap$(4) = "AAGKIIIIIIIGKIIIIIIIGKIIIIJJJGAA"
bitmap$(5) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIJJGAA"
bitmap$(6) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(7) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(8) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(9) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(10) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(11) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(12) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(13) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(14) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(15) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(16) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(17) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(18) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 32, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA ZIELONEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(4) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(5) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(6) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(7) = "AAGKEEHEEEEGKEEHEHEEGKEHEEEEEGAA"
bitmap$(8) = "AAGKEEHEHEEGKEEEHEEHGKEEHEEEEGAA"
bitmap$(9) = "AAGKEEEHEEEGKHEEHEHEGKHEHEEHEGAA"
bitmap$(10) = "AAGKHEEHEEEGKHEHEHEEGKEHEEHEEGAA"
bitmap$(11) = "AAGKEHEHEHEGKEHEEHEHGKEEHEHEEGAA"
bitmap$(12) = "AAGKEEHEEHEGKEHEEEHEGKEEHHEEEGAA"
bitmap$(13) = "AAGKEEHEHEEGKEHEHEHEGKEEHEEEEGAA"
bitmap$(14) = "AAGKEEHHEEEGKEHHEEHEGKEEHEEEEGAA"
bitmap$(15) = "AAGKEEHEEEEGKEHEEEHEGKEEHEEEEGAA"
bitmap$(16) = "AAGKEEHEEEEGKEHEEHHHGKEEHEEEEGAA"
bitmap$(17) = "AAGKEHHHEEEGKHHHEEEEGKEHHHEEEGAA"
bitmap$(18) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 64, yd + 120)
NEXT xd: NEXT yd
REM zapis do pliku
DEF SEG = &HA000
BSAVE "bitmap1.scr", 0, 50000
LOCATE 19, 1
INPUT a$
CLS
BLOAD "bitmap1.scr"
END
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Wto 17:36, 07 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 28
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x + 4 - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 14 14 14": REM framuga zewnetrzna
kolor$(11) = "0B 3F 3F 3F"
kolor$(12) = "0C 3F 3F 3F"
kolor$(13) = "0D 3F 3F 3F"
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM sweter + slonce
kolor$(26) = "1A 16 0F 0F": REM sweter + framuga zew
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM spodnie +slonce
kolor$(42) = "2A 10 14 20": REM spodnie + framuga zew
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLB"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SJ____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#Q...QQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#L..PWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQLLLUU"
plansza$(7) = ".......................__________aH_WI_________##QQQBPPPAA"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________BQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________AAQQQ0QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................____YP_______KQ_________UUQQQBQQQAA"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SF____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WWWWWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = ".......................____YI____SJ_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________AAAAQQPPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SR_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = "......................._______aO_______________UUQQQWQQQBB"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPPU"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = "......................._____________aI_________BBQQQUQQQAA"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________UPPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUU...#"
plansza$(55) = "......................._______MQ_aR____________AAAQQQBPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
serca(8, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
serca(8, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET: PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET: PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET: PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET: PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET: PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET: PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "A" THEN
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET: PUT (64, y16), blok2, PSET:
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "B" THEN
PUT (32, y16), szaretlo4, PSET:
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blok4, PSET:
PUT (288, y16), blok2, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET: PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xserca = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yserca = (ASC(el$) - 65) * 8
GET (xserca, yserca)-(xserca + 15, yserca + 7), tlo
COLOR 5
LINE (xserca, yserca + 1)-(xserca, yserca + 3)
LINE (xserca + 1, yserca)-(xserca + 1, yserca + 4)
LINE (xserca + 2, yserca)-(xserca + 2, yserca + 5)
LINE (xserca + 3, yserca + 1)-(xserca + 3, yserca + 6)
LINE (xserca + 4, yserca)-(xserca + 4, yserca + 5)
LINE (xserca + 5, yserca)-(xserca + 5, yserca + 4)
LINE (xserca + 6, yserca + 1)-(xserca + 6, yserca + 3)
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Śro 15:02, 08 Wrz 2021 Temat postu: |
|
|
REM modul BSAVE do gry "Serca"
SCREEN 13
DIM kolor$(0 TO 255)
DIM cegla(0 TO 32) AS LONG
DIM tlo(0 TO 32) AS LONG
DIM poltlo(0 TO 16) AS LONG
DIM bitmap$(0 TO 31)
DIM blok(0 TO 64) AS LONG
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 0A 0A 0A": REM tlo plyta
kolor$(2) = "02 06 06 06": REM tlo fuga
kolor$(3) = "03 10 10 10": REM tlo krawedz
kolor$(4) = "04 00 2F 00": REM liscie
kolor$(5) = "05 3F 3F 3F"
kolor$(6) = "06 3F 3F 3F"
kolor$(7) = "07 28 0A 00": REM doniczka
kolor$(8) = "08 00 00 3F": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 20 20 20": REM framuga zewnetrzna
kolor$(11) = "0B 18 18 18": REM wentylator obudowa
kolor$(12) = "0C 3F 3F 3F": REM wentylator faza 1
kolor$(13) = "0D 2F 2F 2F": REM wentylator faza 2
kolor$(14) = "0E 1F 1F 1F": REM wentylator faza 3
kolor$(15) = "0F 3F 3F 3F": REM napis startowy
REM bloki przezroczystosci
kolor$(16) = "10 3F 3F 3F"
kolor$(32) = "20 3F 3F 3F"
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
kolor$(31) = "1F 28 00 00": REM sweter
kolor$(47) = "2F 05 12 2F": REM spodnie
kolor$(63) = "3F 17 17 17": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 2C 17": REM skora1
kolor$(127) = "7F 18 00 00": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 30 20 00": REM nos
kolor$(159) = "9F 04 0D 23": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 20 00 00": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 2B 2B": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
REM rysunki ****************************************
REM rysunek cegly
bitmap$(0) = "DDDDDDDEDDDDDDDE"
bitmap$(1) = "DFFFFFFEDFFFFFFE"
bitmap$(2) = "DFFFFFFEDFFFFFFE"
bitmap$(3) = "EEEEEEEEEEEEEEEE"
bitmap$(4) = "DDDEDDDDDDDDDDDD"
bitmap$(5) = "FFFEDFFFFFFFFFFF"
bitmap$(6) = "FFFEDFFFFFFFFFFF"
bitmap$(7) = "EEEEEEEEEEEEEEEE"
REM 250-A 251-B 252-C 253-D 254-E 255-F
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 - 1 + &HF0 + 10
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), cegla
REM komorka tla
REM tlo(0) = &H80040
bitmap$(0) = "0001200000012000"
bitmap$(1) = "1111200000011111"
bitmap$(2) = "2221200000012222"
bitmap$(3) = "0001200000012000"
bitmap$(4) = "0001200000012000"
bitmap$(5) = "0001111111112000"
bitmap$(6) = "0001222222212000"
bitmap$(7) = "0001200000012000"
FOR yd = 0 TO 7
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 48 + 1
: PSET (xd, yd)
NEXT xd: NEXT yd
GET (0, 0)-(15, 7), tlo
REM przygotowanie tablic elementow wierszowych
CLS
FOR x = 0 TO 19
FOR y = 0 TO 10
PUT (x * 16, y * 8), tlo, PSET
NEXT y
NEXT x
REM cegly
FOR i = 0 TO 19
PUT (i * 16, 0), cegla, PSET
NEXT i
FOR i = 0 TO 8
PUT (i * 16, 8), cegla, PSET
PUT (304 - i * 16, 8), cegla, PSET
NEXT i
FOR i = 0 TO 4
PUT (i * 16, 16), cegla, PSET
PUT (304 - i * 16, 16), cegla, PSET
NEXT i
FOR i = 0 TO 2
PUT (i * 16, 24), cegla, PSET
PUT (304 - i * 16, 24), cegla, PSET
NEXT i
FOR i = 0 TO 9
PUT (i * 16 + 80, 24), cegla, PSET
NEXT i
REM poszerzenie przejsc pionowych
GET (8, 64)-(15, 71), poltlo
PUT (136, 8), poltlo, PSET
PUT (40, 24), poltlo, PSET
GET (0, 64)-(7, 71), poltlo
PUT (176, 8), poltlo, PSET
PUT (272, 24), poltlo, PSET
REM wykonczenie cegiel
COLOR 253: REM szczeliny
LINE (135, 8)-(135, 15)
LINE (79, 16)-(79, 23)
LINE (39, 24)-(39, 31)
LINE (239, 24)-(239, 31)
COLOR 252: REM krawedzie
LINE (184, 12)-(184, 14)
LINE (240, 21)-(240, 22)
LINE (80, 28)-(80, 30)
LINE (280, 28)-(280, 30)
REM RYSUNEK kamienia
bitmap$(0) = "JJJJJJJJJJJJJJJJ"
bitmap$(1) = "JJNNNNNNNNNNNNJJ"
bitmap$(2) = "JJNAAAKJPKAAANJJ"
bitmap$(3) = "JJNAKONPNKPKANJJ"
bitmap$(4) = "JJNAPMKLGLMPANJJ"
bitmap$(5) = "JJNKJOJKPJPKMNJJ"
bitmap$(6) = "JJNOLJKJJMKMJNJJ"
bitmap$(7) = "JJNJFMJOHKNIPNJJ"
bitmap$(8) = "JJNJILJLJHIJHNJJ"
bitmap$(9) = "JJNIHJNOHOJJKNJJ"
bitmap$(10) = "JJNAJIIHJOMPANJJ"
bitmap$(11) = "JJNAINNJLJOKANJJ"
bitmap$(12) = "JJNAAAIKJKAAANJJ"
bitmap$(13) = "JJNNNNNNNNNNNNJJ"
bitmap$(14) = "JJJJJJJJJJJJJJJJ"
bitmap$(15) = "JJJJJJJJJJJJJJJJ"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 230
: PSET (xd, yd + 64)
NEXT xd: NEXT yd
REM RYSUNEK DONICZKI
bitmap$(0) = "BBBCDEEBBEECDBBB"
bitmap$(1) = "CCCCEEEEEEEEDCCC"
bitmap$(2) = "DDDEEEEEEEEEEDDD"
bitmap$(3) = "BBBEEEEEEEECEEBB"
bitmap$(4) = "BBEEBEBEEBECEEBB"
bitmap$(5) = "BBECDECEECECDEBB"
bitmap$(6) = "BBECEDDEEDDEDEBB"
bitmap$(7) = "BBECEBBEEBBEDEBB"
bitmap$(8) = "BBBCDBBEEBBCDBBB"
bitmap$(9) = "CCCCDBBEEBBCCCCC"
bitmap$(10) = "DDDCBBBEEBBCDDDD"
bitmap$(11) = "BBBCDHHHHHHCDBBB"
bitmap$(12) = "BBBCDHHHHHHCDBBB"
bitmap$(13) = "BBBCCCHHHHCCDBBB"
bitmap$(14) = "BBBCDDHHHHDCDBBB"
bitmap$(15) = "BBBCDBHHHHBCDBBB"
FOR yd = 0 TO 15
FOR xd = 0 TO 15
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65
: PSET (xd + 16, yd + 64)
NEXT xd: NEXT yd
REM rysunek bloku
bitmap$(0) = "KLKLKLKLKLKLKLKF" + "JJJJJJJJJJJJJJJF" + "KLKLKLKLKLKLKLKF"
bitmap$(1) = "LJJJJJJJJJJJJJJF" + "KHHHHHIHHGHHHHHF" + "LJJJJJJJJJJJJJJF"
bitmap$(2) = "MJKIJIJKJJKJJJJF" + "KHHHIHHHIHHGHHHF" + "MJJKJKJIJKJIJIJF"
bitmap$(3) = "LJJJJJJJJIJIJIJF" + "KHGHHHHIHHHHIHHF" + "LJJJIJJJIJJJJKJF"
bitmap$(4) = "MJJIJKJIJJJJKJJF" + "KHHHIHHHHIHHHHHF" + "MJJJJKJIJJJKJJJF"
bitmap$(5) = "LJKJIJJJKJJIJIJF" + "KHHGHHIHGHHIHGHF" + "LJKJIJJJKJJJIJJF"
bitmap$(6) = "MJJJJJJJJJJJJJJF" + "KHHHHHHHHHHHHHHF" + "MJJJJJJJJJIJJJJF"
bitmap$(7) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
bitmap$(8) = "KLKLKLKFJJJJJJJJ" + "JJJJJJJFJJJJJJJJ" + "JJJJJJJFKLKLKLKF"
bitmap$(9) = "LJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFLJJJJJJF"
bitmap$(10) = "MJJIJJJFKHIHHIHH" + "HIHIHHHFKHHGHGHH" + "HHGHIHHFMJKJIJJF"
bitmap$(11) = "LJJJKJJFKHHGHHHI" + "HHGHHGHFKHIHHHHI" + "HGHHHHHFLJJJKJJF"
bitmap$(12) = "MJJIJIJFKHHHIHHH" + "GHHHIHHFKHHHGHHH" + "HHHHHIHFMJJJJJJF"
bitmap$(13) = "LJKJKJJFKHIHHGHI" + "HHHIHHHFKHGHHIHG" + "HIHGHHHFLJKJIKJF"
bitmap$(14) = "MJJJJJJFKHHHHHHH" + "HHHHHHHFKHHHHHHH" + "HHHHHHHFMJJJJJJF"
bitmap$(15) = "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF" + "FFFFFFFFFFFFFFFF"
FOR yd = 0 TO 15
FOR xd = 0 TO 47
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65 + 224
: PSET (xd + 32, yd + 64)
NEXT xd: NEXT yd
GET (48, 64)-(63, 79), blok
FOR i = 0 TO 19: PUT (i * 16, 32), blok, PSET
NEXT i
COLOR 15: LOCATE 10, 16: PRINT "SERCA 1.0"
REM animacja
REM 7,9 - rejestry przezroczyste
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066663300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866666300000" + "0000036666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111170000" + "0000711111700000"
bitmap$(11) = "0000011111170000" + "0000711111100000"
bitmap$(12) = "0000011111110000" + "0000111111100000"
bitmap$(13) = "0000711111117000" + "0007111111170000"
bitmap$(14) = "0000711111111000" + "0001111111170000"
bitmap$(15) = "0000111111111000" + "0001111111110000"
bitmap$(16) = "0001111333311000" + "0001133331111000"
bitmap$(17) = "0006602222206600" + "0066022222066000"
bitmap$(18) = "0006002222200600" + "0060022222006000"
bitmap$(19) = "0000092222200000" + "0000922222900000"
bitmap$(20) = "0000022222290000" + "0000222222200000"
bitmap$(21) = "0000022222220000" + "0000222222200000"
bitmap$(22) = "0000022202220000" + "0000222022200000"
bitmap$(23) = "0000922202220000" + "0000222022220000"
bitmap$(24) = "0000222202222000" + "0009222022220000"
bitmap$(25) = "0000222009222000" + "0002229002220000"
bitmap$(26) = "0000222000222000" + "0002220002220000"
bitmap$(27) = "0000222000222000" + "0002220002220000"
bitmap$(28) = "0009222000222300" + "0032220009229000"
bitmap$(29) = "0002220000033300" + "0033300000222000"
bitmap$(30) = "0003330000330000" + "0000330000222000"
bitmap$(31) = "0033330000000000" + "0000000000333300"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd, yd + 88)
NEXT xd
NEXT yd
REM ************************************ FAZA 2
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000001111100000" + "0000011111000000"
bitmap$(11) = "0000001111100000" + "0000011111000000"
bitmap$(12) = "0000001111100000" + "0000011111000000"
bitmap$(13) = "0000001111100000" + "0000011111000000"
bitmap$(14) = "0000071111100000" + "0000011111700000"
bitmap$(15) = "0000071111100000" + "0000011111700000"
bitmap$(16) = "0000071111300000" + "0000031111700000"
bitmap$(17) = "0000028118200000" + "0000028118200000"
bitmap$(18) = "0000022662200000" + "0000022662200000"
bitmap$(19) = "0000022662200000" + "0000022662200000"
bitmap$(20) = "0000022222000000" + "0000002222200000"
bitmap$(21) = "0000922222000000" + "0000002222290000"
bitmap$(22) = "0000222222000000" + "0000002222220000"
bitmap$(23) = "0000922222000000" + "0000002222290000"
bitmap$(24) = "0000022222000000" + "0000002222200000"
bitmap$(25) = "0000022222300000" + "0000032222200000"
bitmap$(26) = "0000002222300000" + "0000032222000000"
bitmap$(27) = "0000000222330000" + "0000332220000000"
bitmap$(28) = "0000000222033000" + "0003300222000000"
bitmap$(29) = "0000000222000000" + "0000000222000000"
bitmap$(30) = "0000000222000000" + "0000000222000000"
bitmap$(31) = "0000033330000000" + "0000000033330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 32, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 32, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 32, yd + 88)
NEXT xd
NEXT yd
REM ************************ ruch poziomy FAZA 3
bitmap$(0) = "0000003333000000" + "0000003333000000"
bitmap$(1) = "0000033333300000" + "0000033333300000"
bitmap$(2) = "0000066633300000" + "0000033366600000"
bitmap$(3) = "0000063663300000" + "0000033663600000"
bitmap$(4) = "0000866663300000" + "0000033666680000"
bitmap$(5) = "0000066666300000" + "0000036666600000"
bitmap$(6) = "0000006666000000" + "0000006666000000"
bitmap$(7) = "0000000661000000" + "0000001660000000"
bitmap$(8) = "0000000711700000" + "0000071170000000"
bitmap$(9) = "0000007111100000" + "0000011117000000"
bitmap$(10) = "0000071111100000" + "0000111117000000"
bitmap$(11) = "0000011111170000" + "0000111111700000"
bitmap$(12) = "0000711111110000" + "0000111111170000"
bitmap$(13) = "0000711111110000" + "0000111111170000"
bitmap$(14) = "0000711111110000" + "0000111111170000"
bitmap$(15) = "0000111111110000" + "0000111111110000"
bitmap$(16) = "0000111333310000" + "0000133331110000"
bitmap$(17) = "0000066222260000" + "0000622226600000"
bitmap$(18) = "0000006222260000" + "0000622226000000"
bitmap$(19) = "0000002222200000" + "0000022222000000"
bitmap$(20) = "0000002222200000" + "0000022222000000"
bitmap$(21) = "0000022222200000" + "0000022222200000"
bitmap$(22) = "0000022222200000" + "0000022222200000"
bitmap$(23) = "0000922222200000" + "0000022222290000"
bitmap$(24) = "0000222022200000" + "0000022202220000"
bitmap$(25) = "0000222022200000" + "0000022202220000"
bitmap$(26) = "0000222092290000" + "0000922902220000"
bitmap$(27) = "0000222002220000" + "0000222002220000"
bitmap$(28) = "0000222002220000" + "0000222002220000"
bitmap$(29) = "0003333002220000" + "0000222003333000"
bitmap$(30) = "0000000000222000" + "0002220000000000"
bitmap$(31) = "0000000033330000" + "0000333300000000"
FOR yd = 0 TO 31
FOR xd = 0 TO 31
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 64, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 64, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 64, yd + 88)
NEXT xd
NEXT yd
REM ************************ fazy ruchu pionowego
REM Ludzik idacy w dol lub w gore
bitmap$(0) = "0000003330000000"
bitmap$(1) = "0000033333000000"
bitmap$(2) = "0000336663300000"
bitmap$(3) = "0000363636300000"
bitmap$(4) = "0000366666300000"
bitmap$(5) = "000006C8C6000000"
bitmap$(6) = "0000006860000000"
bitmap$(7) = "0000001610000000"
bitmap$(8) = "0000711111700000"
bitmap$(9) = "0001111111110000"
bitmap$(10) = "0071111111117000"
bitmap$(11) = "0071111111117000"
bitmap$(12) = "0011711111711000"
bitmap$(13) = "0711711111711700"
bitmap$(14) = "0A11711111711A00"
bitmap$(15) = "0117A11111A71100"
bitmap$(16) = "0117111111171100"
bitmap$(17) = "01104BBBBB401100"
bitmap$(18) = "0860922222906800"
bitmap$(19) = "0000922222900000"
bitmap$(20) = "0000929092900000"
bitmap$(21) = "0000929092900000"
bitmap$(22) = "0000929092900000"
bitmap$(23) = "0000929092900000"
bitmap$(24) = "0000929092900000"
bitmap$(25) = "0000929092900000"
bitmap$(26) = "0000929092900000"
bitmap$(27) = "0000929092900000"
bitmap$(28) = "0000929092900000"
bitmap$(29) = "0000929092900000"
bitmap$(30) = "0000333033300000"
bitmap$(31) = "0003330003330000"
FOR yd = 0 TO 31
FOR xd = 0 TO 15
znak$ = MID$(bitmap$(yd), xd + 1, 1)
kolor = VAL("&H" + znak$ + "F")
IF znak$ <> "0" THEN COLOR kolor: PSET (xd + 96, yd + 88)
IF znak$ = "7" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "A" THEN COLOR 16: PSET (xd + 96, yd + 88)
IF znak$ = "4" THEN COLOR 32: PSET (xd + 96, yd + 88)
IF znak$ = "9" THEN COLOR 32: PSET (xd + 96, yd + 88)
NEXT xd
NEXT yd
REM RYSUNEK OKNA NIEBIESKO-ZIELONEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(4) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(5) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(6) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(7) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(8) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(9) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(10) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(11) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(12) = "AAGKEHEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(13) = "AAGKEHEHEEEGKEHEEEEEGKEEHEEEEGAA"
bitmap$(14) = "AAGKEEHEEEEGKEHEHEEEGKHEHEEHEGAA"
bitmap$(15) = "AAGKEEHEEEEGKEEHEEEEGKEHEEHEEGAA"
bitmap$(16) = "AAGKHEHEEEEGKHEHEHEEGKEEHEHEEGAA"
bitmap$(17) = "AAGKEHEEEHEGKEHEEEHEGKEEEHEEEGAA"
bitmap$(18) = "AAGKEHEEEHEGKEHEEEHEGKEEHEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA NIEBIESKIEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIJJJJGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIJJJJGAA"
bitmap$(4) = "AAGKIIIIIIIGKIIIIIIIGKIIIIJJJGAA"
bitmap$(5) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIJJGAA"
bitmap$(6) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(7) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(8) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(9) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(10) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(11) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(12) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(13) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(14) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(15) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(16) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(17) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(18) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 32, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK OKNA ZIELONEGO
bitmap$(0) = "AAGGGGGGGGGGGGGGGGGGGGGGGGGGGGAA"
bitmap$(1) = "AAGKKKKKKKKGKKKKKKKKGKKKKKKKKGAA"
bitmap$(2) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(3) = "AAGKIIIIIIIGKIIIIIIIGKIIIIIIIGAA"
bitmap$(4) = "AAGKIEEEEIIGKIIEEIIIGKEEEIIIIGAA"
bitmap$(5) = "AAGKEEEEEEIGKIEEEEIEGKEEEEIIIGAA"
bitmap$(6) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEIGAA"
bitmap$(7) = "AAGKEEHEEEEGKEEHEHEEGKEHEEEEEGAA"
bitmap$(8) = "AAGKEEHEHEEGKEEEHEEHGKEEHEEEEGAA"
bitmap$(9) = "AAGKEEEHEEEGKHEEHEHEGKHEHEEHEGAA"
bitmap$(10) = "AAGKHEEHEEEGKHEHEHEEGKEHEEHEEGAA"
bitmap$(11) = "AAGKEHEHEHEGKEHEEHEHGKEEHEHEEGAA"
bitmap$(12) = "AAGKEEHEEHEGKEHEEEHEGKEEHHEEEGAA"
bitmap$(13) = "AAGKEEHEHEEGKEHEHEHEGKEEHEEEEGAA"
bitmap$(14) = "AAGKEEHHEEEGKEHHEEHEGKEEHEEEEGAA"
bitmap$(15) = "AAGKEEHEEEEGKEHEEEHEGKEEHEEEEGAA"
bitmap$(16) = "AAGKEEHEEEEGKEHEEHHHGKEEHEEEEGAA"
bitmap$(17) = "AAGKEHHHEEEGKHHHEEEEGKEHHHEEEGAA"
bitmap$(18) = "AAGKEEEEEEEGKEEEEEEEGKEEEEEEEGAA"
bitmap$(19) = "AGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGA"
FOR yd = 0 TO 19
FOR xd = 0 TO 31
color$ = MID$(bitmap$(yd), xd + 1, 1)
COLOR ASC(color$) - 65
PSET (xd + 64, yd + 120)
NEXT xd: NEXT yd
REM RYSUNEK wentylatora
bitmap$(0) = "KKKKKGGGGGKKKKKALLLLLGGGGGLLLLLA"
bitmap$(1) = "KKKGGNNLLLGGKKKALLLGGLLLLLGGLLLA"
bitmap$(2) = "KKGNNNNLLLLLGKKALLGALLLLLLLAGLLA"
bitmap$(3) = "KGMMNNNLLLLMMGKALGAALLLLLLLAAGLA"
bitmap$(4) = "KGMMMNNLLLMMMGKALGAAALLLLLAAAGLA"
bitmap$(5) = "GMMMMMNLLMMMMMGAGAAAALLLLLAAAAGA"
bitmap$(6) = "GMMMMMGGGMMMMNGAGAAAAALLLAAAAAGA"
bitmap$(7) = "GLLLLLGGGNNNNNGAGLLLAAALAAALLLGA"
bitmap$(8) = "GLLLLLGGGNNNNNGAGLLLLLLALLLLLLGA"
bitmap$(9) = "GLLLNNNMLLLNNNGAGLLLLLLALLLLLLGA"
bitmap$(10) = "KGNNNNMMMLLLNGKALGLLLLAAALLLLGLA"
bitmap$(11) = "KGNNNNMMMLLLLGKALGLLLAAAAALLLGLA"
bitmap$(12) = "KKGNNNMMMLLLGKKALLGLLAAAAALLGLLA"
bitmap$(13) = "KKKGGMMMMMGGKKKALLLGGAAAAAGGLLLA"
bitmap$(14) = "KKKKKGGGGGKKKKKALLLLLGGGGGLLLLLA"
bitmap$(15) = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
FOR yd = 0 TO 15
FOR xd = 0 TO 31
COLOR ASC(MID$(bitmap$(yd), xd + 1, 1)) - 65
: PSET (xd, yd + 140)
NEXT xd: NEXT yd
REM zapis do pliku
DEF SEG = &HA000
BSAVE "bitmap1.scr", 0, 50000
COLOR 15: LOCATE 21, 1
INPUT a$
CLS
BLOAD "bitmap1.scr"
END
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Śro 15:02, 08 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
DIM SHARED wentylator(0 TO 64) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 235
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 1000: NEXT delay
REM faza wentylatora
komorka = PEEK(1132) / 1.5
faz = INT(komorka)
IF faz / 3 = INT(faz / 3) THEN faza = 0
IF (faz + 1) / 3 = INT((faz + 1) / 3) THEN faza = 1
IF (faz + 2) / 3 = INT((faz + 2) / 3) THEN faza = 2
IF faza = 0 THEN
FOR i = 0 TO 2: i16 = i * 16
PALETTE 11 + i16, 31 + 31 * 256 + 31 * 65536
PALETTE 12 + i16, 31 + 31 * 256 + 31 * 65536
PALETTE 13 + i16, 0
NEXT i
END IF
IF faza = 1 THEN
FOR i = 0 TO 2: i16 = i * 16
PALETTE 11 + i16, 0
PALETTE 12 + i16, 31 + 31 * 256 + 31 * 65536
PALETTE 13 + i16, 31 + 31 * 256 + 31 * 65536
NEXT i
END IF
IF faza = 2 THEN
FOR i = 0 TO 2: i16 = i * 16
PALETTE 11 + i16, 31 + 31 * 256 + 31 * 65536
PALETTE 12 + i16, 0
PALETTE 13 + i16, 31 + 31 * 256 + 31 * 65536
NEXT i
END IF
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 149 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 146: ys = 146: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x + 4 - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
GET (0, 140)-(15, 155), wentylator
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 14 14 14": REM framuga zewnetrzna
kolor$(11) = "0B 3F 00 00": REM wentylator faza 1
kolor$(12) = "0C 00 3F 00": REM wentylator faza 2
kolor$(13) = "0D 00 00 3F": REM wentylator faza 3
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM sweter + slonce
kolor$(26) = "1A 16 0F 0F": REM sweter + framuga zew
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM spodnie +slonce
kolor$(42) = "2A 10 14 20": REM spodnie + framuga zew
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_nowy11+++++
REM ************ plansze wiersza roomy=1
plansza$(0) = "......................._______YQ_GN_________UI_#LLLQQQLLLB"
plansza$(1) = ".......................____MD__________________#...UUUPPP#"
plansza$(2) = "......................._HE__________ES______UI_#PPPQQQQQQU"
plansza$(3) = ".......................__________SJ____BB1_fB1_##LLLQWWWQ#"
plansza$(4) = "......................._______ZK_______________#Q...QQUQQU"
plansza$(5) = ".......................____MG__________LK5_____#L..PWWQQQU"
plansza$(6) = "......................._LD__________FQ_________#PPPWQLLLUU"
plansza$(7) = ".......................__________aH_WI_________##QQQBPPPAA"
REM ************ plansze wiersza roomy=2
plansza$(8) = ".......................________________________BQQQWLLLQQ#"
plansza$(9) = "......................._______YQ_RN_________WH_#QQQQ...QQ#"
plansza$(10) = ".......................____ML__________KK1__WJ_UUQQQPPPUQU"
plansza$(11) = "......................._____________MS_________#WLLLWQQQQW"
plansza$(12) = "......................._aI__________________UM_UQPPPQQQQQ#"
plansza$(13) = ".......................__________RN_GS_________UQQQ000QQQ#"
plansza$(14) = ".......................____DJ____aM____________UUUUQQQUUUU"
plansza$(15) = ".......................________________________AAQQQ0QQUUU"
REM ************* plansze wiersza roomy=3
plansza$(16) = ".......................__________NG_YS_________#QQQWQWQQQW"
plansza$(17) = "......................._MD_YP____UP____________#QQQWLLLLQW"
plansza$(18) = "......................._WQ_____________DI3_`I3_U0000....0#"
plansza$(19) = "......................._MM__________YQ_________WWWWWPPPPUU"
plansza$(20) = "......................._______NP_SM_________WO_#QQQQMWMQQW"
plansza$(21) = ".......................________________EB1__UJ_#00QQLLL0QU"
plansza$(22) = ".......................____aM____UP____________UQQQWPPP0##"
plansza$(23) = ".......................____YP_______KQ_________UUQQQBQQQAA"
REM ************ plansze wiersza roomy=4
plansza$(24) = ".......................____ZM____SF____________WQQQWLLLLUU"
plansza$(25) = ".......................________________________WWWWWPPPP##"
plansza$(26) = "......................._______LQ_UQ_YS_RU3__#F_#0QLLLQQQQW"
plansza$(27) = "VI.....................____YI____SJ_GS_GB5__WM_UUQPPPQQQQU": REM startowa MaX=dU
plansza$(28) = ".......................__________NG____________#QQQQWQQQQU"
plansza$(29) = "......................._______ZQ_SG____________UUQQQWLLLLU"
plansza$(30) = "......................._____________LS_KK1_____##00UU....U"
plansza$(31) = "......................._______LQ_______________AAAAQQPPPPU"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "......................._DD____aQ_SR_YS_________ULLLWWWLLL#"
plansza$(33) = ".......................________________II4_YI4_#...UUU...#"
plansza$(34) = "......................._______aQ_______GL5_YL5_WPPPQUUPPPU"
plansza$(35) = ".......................____ML_______YS______UJ_UUQQQLLLQQ#"
plansza$(36) = ".......................____YL_______________WJ_UQQQQPPP###"
plansza$(37) = ".......................________________KR1_____UU00U000UUU"
plansza$(38) = ".......................____OG____SR_YS_________UU0QQQWQQQ#"
plansza$(39) = "......................._______aO_______________UUQQQWQQQBB"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "......................._____________KM_________#00ULLLU0UU"
plansza$(41) = ".......................__________SR____MH2_YH2_###UPPPLLL#"
plansza$(42) = "......................._______GQ_______________U0QQQQW...#"
plansza$(43) = "......................._____________YS_________#LLLU00PPPU"
plansza$(44) = ".......................__________MM_________0Q_#PPPWLLLQQ#"
plansza$(45) = ".......................________________KO3_YO3_UUUU0PPPUUU"
plansza$(46) = "......................._DD_______ZF_MS_________#QQQWQQQ00U"
plansza$(47) = "......................._____________aI_________BBQQQUQQQAA"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "......................._EJ__________YM_________UUU0LLL####"
plansza$(49) = ".......................____SJ____ML____________###U...####"
plansza$(50) = "......................._____________KM_________#LLLPPP####"
plansza$(51) = ".......................____PH____ZJ____________UPPP000####"
plansza$(52) = ".......................__________EE____________#LLL0######"
plansza$(53) = "......................._____________GS______0I_UPPPQQQLLL#"
plansza$(54) = "......................._LQ_____________________UUUUUUU...#"
plansza$(55) = "......................._______MQ_aR____________AAAQQQBPPP#"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
serca(8, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
serca(8, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 48, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET: PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET: PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET: PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET: PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET: PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET: PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "A" THEN
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET: PUT (64, y16), blok2, PSET:
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "B" THEN
PUT (32, y16), szaretlo4, PSET:
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blok4, PSET:
PUT (288, y16), blok2, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET: PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xserca = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yserca = (ASC(el$) - 65) * 8
GET (xserca, yserca)-(xserca + 15, yserca + 7), tlo
COLOR 5
LINE (xserca, yserca + 1)-(xserca, yserca + 3)
LINE (xserca + 1, yserca)-(xserca + 1, yserca + 4)
LINE (xserca + 2, yserca)-(xserca + 2, yserca + 5)
LINE (xserca + 3, yserca + 1)-(xserca + 3, yserca + 6)
LINE (xserca + 4, yserca)-(xserca + 4, yserca + 5)
LINE (xserca + 5, yserca)-(xserca + 5, yserca + 4)
LINE (xserca + 6, yserca + 1)-(xserca + 6, yserca + 3)
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO wentyl
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
wentyl:
el$ = MID$(kod$, 1, 1)
IF el$ = "" OR el$ = "." THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 2, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), wentylator, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Nie 18:09, 12 Wrz 2021 Temat postu: |
|
|
DECLARE SUB zabranie ()
REM Gra "Serca" UWAGA wersaj gry wymaga
REM emulatora o predkosci 6075 cyklow
REM wymaga pliku bitmap1.scr utworzonego przez modul bsave.bas
DECLARE SUB dreptanie ()
DECLARE SUB animacja ()
DECLARE SUB rysowanie ()
DECLARE SUB palety ()
DECLARE SUB plansze ()
DECLARE SUB cegly ()
DIM SHARED kolor$(0 TO 255)
DIM pamiec(0 TO 128) AS LONG
DIM poledzialania(0 TO 240) AS LONG
DIM SHARED plansza$(0 TO 55)
DIM SHARED kod$
DIM SHARED serca(1 TO 8, 1 TO 7) AS INTEGER
DIM SHARED roomx AS INTEGER, roomy AS INTEGER
DIM SHARED xserca AS INTEGER, yserca AS INTEGER
REM pamiec tla pod wziatek
DIM SHARED tlo(0 TO 32) AS LONG
REM tlo
DIM SHARED szaretlo(0 TO 64) AS LONG
DIM SHARED szaretlo2(0 TO 128) AS LONG
DIM SHARED szaretlo4(0 TO 256) AS LONG
REM dane elementow planszy
DIM SHARED ceg40(0 TO 640) AS LONG
DIM SHARED ceg17plus17(0 TO 640) AS LONG
DIM SHARED ceg13plus13(0 TO 640) AS LONG
DIM SHARED ceg4plus20plus4(0 TO 640) AS LONG
DIM SHARED palma(0 TO 64) AS LONG
DIM SHARED blokp(0 TO 64) AS LONG
DIM SHARED bloks(0 TO 64) AS LONG
DIM SHARED blokk(0 TO 64) AS LONG
DIM SHARED blok2(0 TO 128) AS LONG
DIM SHARED blok4(0 TO 256) AS LONG
REM ****************** DANE ANIMACJI
DIM SHARED znakp1(0 TO 128) AS LONG
DIM SHARED znakl1(0 TO 128) AS LONG
DIM SHARED znakp2(0 TO 128) AS LONG
DIM SHARED znakl2(0 TO 128) AS LONG
DIM SHARED znakp3(0 TO 128) AS LONG
DIM SHARED znakl3(0 TO 128) AS LONG
DIM SHARED vertd1(0 TO 128) AS LONG
REM matryce okien
DIM SHARED window1(0 TO 160) AS LONG
DIM SHARED window2(0 TO 160) AS LONG
DIM SHARED window3(0 TO 160) AS LONG
DIM SHARED wentylator(0 TO 64) AS LONG
REM ************************* DANE STARTOWE
SCREEN 13
REM PRINT FRE(-2): END
DEF SEG = 0: REM - to dla pomiaru predkosci
x = 100: y = 60: xs = 100: ys = 60: REM wspolrzedne poczatkowe gracza na ekranie
licz = -1: REM wartosc startowa zegara
roomx = 4: roomy = 4: REM plansza startowa
kolwent = 30 + 30 * 256 + 30 * 65536: REM kolor lopat wentylatora
REM ***** SUB palety - ustawienie nowych wartosci barw
palety
REM ***** SUB cegly - zapelnienie pozostalych tablic
cegly
REM SUB plansze - wypelnienie tablicy wygladu plansz
plansze
REM SUB animacja - tablice animacji postaci
REM animacja
REM ************************* WYBOR POMIESZCZENIA
rysuj:
kod$ = plansza$(roomx - 1 + (roomy - 1) * 8)
REM ******************** rysowanie pomieszczenia
t0 = PEEK(1132): REM pomiar czasu rysowania
REM SUB rysowanie - rysowanie planszy
rysowanie
REM pomiar czasu rysowania
t1 = PEEK(1132):
REM menu na dole
COLOR 235
LOCATE 23, 1: FOR i = 1 TO 40: PRINT CHR$(223); : NEXT i
LOCATE 25, 15: PRINT "L-SHIFT ALT P-SHIFT";
LOCATE 24, 2: COLOR 3: PRINT "T:"; t0; "/"; t1; FRE(-2);
PRINT " ROOM:"; roomx; "/"; roomy; "--";
REM **************** zapamietanie pola pod graczem
GET (x, y)-(x + 15, y + 31), pamiec
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM PUT (x, y), vertd1, PSET
liczsercaroom = 0: zrobione = 0
GOTO postaw
REM *************************** PETLA GLOWNA
petla:
dx = 0: dy = 0
IF dzwiekbrania = 1 THEN dzwiekbrania = 0: zabranie
REM ******************* czas gry w sekundach
se$ = MID$(TIME$, 7, 2)
se = VAL(se$)
IF se <> ses THEN licz = licz + 1
ses = se
LOCATE 25, 2: COLOR 15: PRINT "Czas:"; licz;
REM ************************ petla opozniajaca
FOR delay = 1 TO 700: NEXT delay
REM faza wentylatora
komorka = PEEK(1132) / 1.5
faz = INT(komorka)
IF faz / 3 = INT(faz / 3) THEN faza = 0
IF (faz + 1) / 3 = INT((faz + 1) / 3) THEN faza = 1
IF (faz + 2) / 3 = INT((faz + 2) / 3) THEN faza = 2
FOR i = 0 TO 2: i16 = i * 16
IF faza = 0 THEN PALETTE 11 + i16, kolwent: PALETTE 12 + i16, kolwent: PALETTE 13 + i16, 0
IF faza = 1 THEN PALETTE 11 + i16, 0: PALETTE 12 + i16, kolwent: PALETTE 13 + i16, kolwent
IF faza = 2 THEN PALETTE 11 + i16, kolwent: PALETTE 12 + i16, 0: PALETTE 13 + i16, kolwent
NEXT i
REM ************************ sprawdzenie klawiszy
alt = 0: lshift = 0: pshift = 0: skos = 0
k$ = INKEY$
IF k$ = CHR$(27) THEN END
REM klawisz alt - wznoszenie sie
IF (PEEK(1047) AND 8) = 8 THEN alt = 1
IF (PEEK(1047) AND 2) = 2 THEN lshift = 1
IF (PEEK(1047) AND 1) = 1 THEN pshift = 1
REM bezruch = grawitacja
IF lshift = 0 AND pshift = 0 AND alt = 0 THEN dy = 2: vert = 1: obrot = 0: przebiervert = 0: GOTO czy
POKE 1050, PEEK(1052): REM czyszczenie bufora klawiatury
IF lshift = 1 THEN dx = -4: dy = 2: obrot = -1: vert = 0
IF pshift = 1 THEN dx = 4: dy = 2: obrot = 1: vert = 0
IF alt = 1 THEN dy = -4: vert = 1
IF dx <> 0 AND dy <> 0 THEN skos = 1
czy:
REM ************ sprawdzenie czy jest przejscie do innej planszy
IF x + dx > 300 THEN x = 5: xs = 5: roomx = roomx + 1: GOTO rysuj
IF x + dx < 3 THEN x = 300: xs = 300: roomx = roomx - 1: GOTO rysuj
IF y + dy > 145 THEN y = 4: ys = 4: roomy = roomy + 1: GOTO rysuj
IF y + dy < 3 THEN y = 144: ys = 144: roomy = roomy - 1: GOTO rysuj
REM *********** sprawdzenie czy ruch jest mozliwy
REM sprawdzenie przeszkody. Przeszkoda sa kolory > 200
xmozliwy = 0: xniemozliwy = 0
ymozliwy = 0: yniemozliwy = 0
REM sprawdzenie sasiedztwa obok
IF dx > 0 THEN
FOR i = 0 TO 31: IF POINT(x + 19, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dx < 0 THEN
FOR i = 0 TO 31: IF POINT(x - 3, y + i) > 200 THEN xniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF xniemozliwy = 0 THEN xmozliwy = 1
IF xniemozliwy = 1 THEN xmozliwy = 0
REM sprawdzenie sasiedztwa gora dol
IF dy > 0 THEN
FOR i = 0 TO 15:
IF POINT(x + i, y + 32) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y + 33) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF dy < 0 THEN
FOR i = 0 TO 15
IF POINT(x + i, y - 4) > 200 THEN yniemozliwy = 1: EXIT FOR
IF POINT(x + i, y - 5) > 200 THEN yniemozliwy = 1: EXIT FOR
NEXT i
END IF
IF yniemozliwy = 0 THEN ymozliwy = 1
IF yniemozliwy = 1 THEN ymozliwy = 0
REM ruch gdy oba mozliwe x oraz y
IF ymozliwy = 1 AND xmozliwy = 1 THEN IF dx <> 0 OR dy <> 0 THEN GOTO ruch
REM szczegolne przypadki gdy tylko x albo y mozliwy
IF ymozliwy = 0 AND xmozliwy = 1 THEN dy = 0: GOTO czy
IF ymozliwy = 1 AND xmozliwy = 0 THEN dx = 0: GOTO czy
REM ruch niemozliwy powrot petli glownej bez zmian pozostaja x y
x = xs: y = ys
GOTO petla
REM ***************** RUCH
ruch:
x = x + dx: y = y + dy
IF dy = 0 AND przebieranie = 0 AND alt = 0 THEN dreptanie: REM dzwiek chodzenia
REM ******************** czy jest wziatek
deltawx = ABS(x + 4 - xserca)
deltawy = ABS(y + 16 - yserca)
IF deltawx < 10 AND deltawy < 22 THEN GOSUB wziatek
REM ************************************** operacja odswiezania tla
postaw:
REM punkt 1 zapamietanie nowego pola dzialania (brudnego)
REM w oparciu o nowe x,y
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
REM************ 2 odnowienie pola dzialania uwzgledniajac dawne tlo
deltax = x - xs: deltay = y - ys
inversx = -1 * deltax: inversy = -1 * deltay
inver4 = INT(inversx / 4)
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = (yt + inversy) * 6
FOR xt = 0 TO 3
index1 = 1 + (yt6 + 24) + (xt + inver4) + 1
index2 = 1 + yt4 + xt
poledzialania(index1) = pamiec(index2)
NEXT xt: NEXT yt
REM zmazanie serca z pola dzialania
IF liczsercaroom = 1 AND zrobione = 0 THEN
zrobione = 1
PUT (x - 4, y - 4), poledzialania, PSET
PUT (xserca, yserca), tlo, PSET
GET (x - 4, y - 4)-(x + 19, y + 35), poledzialania
END IF
REM nowa mala pamiec
FOR yt = 0 TO 31:
yt4 = yt * 4
yt6 = yt * 6
FOR xt = 0 TO 3:
index1 = 1 + (yt6 + 24) + (xt + 1):
index2 = 1 + yt4 + xt:
pamiec(index2) = poledzialania(index1): NEXT xt: NEXT yt
REM ************* rysowanie nowej postaci WEDLUG FAZY RUCHU
REM aby nie rysowac dwoch postaci w przypadku skosu
IF skos = 1 THEN GOTO bezskosu:
REM ************************** ruch w dol lub gore
IF vert = 1 THEN wkleic = 7: GOTO wklej
bezskosu:
REM ************************** ruch w lewo
IF obrot = -1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 1: GOTO wklej
IF przebieranie = 1 THEN wkleic = 2: GOTO wklej
IF przebieranie = 2 THEN wkleic = 3: GOTO wklej
END IF
REM ****************** ruch w prawo
IF obrot = 1 THEN
IF dy = 0 THEN przebieranie = przebieranie + 1
IF przebieranie = 3 THEN przebieranie = 0
IF przebieranie = 0 THEN wkleic = 4: GOTO wklej
IF przebieranie = 1 THEN wkleic = 5: GOTO wklej
IF przebieranie = 2 THEN wkleic = 6: GOTO wklej
END IF
xs = x: ys = y
GOTO petla
wklej:
IF wkleic = 1 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl1(index2)): NEXT xt: NEXT yt
IF wkleic = 2 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl2(index2)): NEXT xt: NEXT yt
IF wkleic = 3 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakl3(index2)): NEXT xt: NEXT yt
IF wkleic = 4 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp1(index2)): NEXT xt: NEXT yt
IF wkleic = 5 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp2(index2)): NEXT xt: NEXT yt
IF wkleic = 6 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR znakp3(index2)): NEXT xt: NEXT yt
IF wkleic = 7 THEN FOR yt = 0 TO 31: yt4 = yt * 4: yt6 = yt * 6: FOR xt = 0 TO 3: index1 = 1 + yt6 + xt + 1 + 24: index2 = 1 + yt4 + xt: poledzialania(index1) = (poledzialania(index1) OR vertd1(index2)): NEXT xt: NEXT yt
REM wklejenie wyniku operacji na tablicy:
PUT (x - 4, y - 4), poledzialania, PSET
xs = x: ys = y
GOTO petla
REM GOSUB-RETURN****************************** obsluga wziatku
wziatek:
IF serca(roomx, roomy) = 0 THEN GOTO niemawziatku
IF liczsercaroom = 1 THEN GOTO niemawziatku
serca(roomx, roomy) = 0
liczserca = liczserca + 1
PUT (xserca, yserca), tlo, PSET
liczsercaroom = 1
dzwiekbrania = 1
LOCATE 1, 1: COLOR 6: PRINT liczserca;
niemawziatku:
RETURN
SUB animacja
REM ************************ znaczek - glowny bohater
REM ****************** DANE ANIMACJI
REM ten SUB jest do skasowania
END SUB
SUB cegly
BLOAD "bitmap1.scr"
REM INPUT a$
REM pobranie z ekranu tablic elementow
GET (0, 0)-(319, 7), ceg40
GET (0, 8)-(319, 15), ceg17plus17
GET (0, 16)-(319, 23), ceg13plus13
GET (0, 24)-(319, 31), ceg4plus20plus4
GET (0, 48)-(15, 63), szaretlo
GET (0, 48)-(31, 63), szaretlo2
GET (0, 48)-(63, 63), szaretlo4
GET (16, 64)-(31, 79), palma
GET (32, 64)-(47, 79), blokp
GET (48, 64)-(63, 79), bloks
GET (64, 64)-(79, 79), blokk
GET (0, 32)-(31, 47), blok2
GET (0, 32)-(63, 47), blok4
GET (0, 88)-(15, 119), znakl1
GET (16, 88)-(31, 119), znakp1
GET (32, 88)-(47, 119), znakl2
GET (48, 88)-(63, 119), znakp2
GET (64, 88)-(79, 119), znakl3
GET (80, 88)-(95, 119), znakp3
GET (96, 88)-(111, 119), vertd1
GET (0, 120)-(31, 139), window1
GET (32, 120)-(63, 139), window2
GET (64, 120)-(95, 139), window3
GET (0, 140)-(15, 155), wentylator
END SUB
SUB dreptanie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
REM ewentualnie:
REM OUT 66, 30: OUT 66, 0
REM OUT 66, 164: OUT 66, 2
REM OUT 66, 130: OUT 66, 1
REM OUT 66, 74: OUT 66, 0
REM OUT 66, 220: OUT 66, 1
FOR i = 1 TO 10
OUT 66, 30: OUT 66, 0
OUT 66, 84: OUT 66, 2
OUT 66, 30: OUT 66, 0
OUT 66, 94: OUT 66, 2
OUT 66, 10: OUT 66, 0
OUT 66, 40: OUT 66, 2
OUT 66, 84: OUT 66, 0
OUT 66, 10: OUT 66, 2
NEXT i
REM FOR i = 1 TO 150: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
SUB palety
REM palety kolorow *********************************
REM max koloru=3F
FOR i = 0 TO 255: kolor$(i) = "00 00 00 00": NEXT i
REM kolory za ludzikiem
kolor$(0) = "00 00 00 00": REM rejestr zero- wolny
kolor$(1) = "01 05 05 06": REM tlo plyta
kolor$(2) = "02 02 03 02": REM tlo fuga
kolor$(3) = "03 07 06 06": REM tlo krawedz
kolor$(4) = "04 00 22 00": REM liscie
kolor$(5) = "05 3F 08 00": REM serce
kolor$(6) = "06 30 30 30": REM framuga okna
kolor$(7) = "07 28 0A 00": REM doniczka drzewa
kolor$(8) = "08 00 21 39": REM niebo
kolor$(9) = "09 3F 3F 00": REM slonce
kolor$(10) = "0A 14 14 14": REM framuga zewnetrzna
kolor$(11) = "0B 00 00 00": REM wentylator faza 1
kolor$(12) = "0C 00 00 00": REM wentylator faza 2
kolor$(13) = "0D 00 00 00": REM wentylator faza 3
kolor$(14) = "0E 3F 3F 3F"
kolor$(15) = "0F 3F 3F 3F": REM napis startowy / zastrzezony dla gracza
REM rejestry przezroczyste gracza
kolor$(16) = "10 18 02 02": REM sweter + zero
kolor$(17) = "11 18 02 02": REM
kolor$(18) = "12 18 02 02": REM
kolor$(19) = "13 18 02 02": REM
kolor$(20) = "14 22 12 00": REM sweter + liscie
kolor$(21) = "15 3F 00 00": REM
kolor$(22) = "16 2F 09 09": REM sweter + framuga okna
kolor$(23) = "17 2B 08 00": REM sweter + doniczka drzewa
kolor$(24) = "18 25 16 24": REM sweter + niebo
kolor$(25) = "19 3F 3F 3F": REM sweter + slonce
kolor$(26) = "1A 16 0F 0F": REM sweter + framuga zew
kolor$(27) = "1B 3F 3F 3F": REM
kolor$(28) = "1C 3F 3F 3F": REM
kolor$(29) = "1D 3F 3F 3F": REM
kolor$(30) = "1E 3F 3F 3F": REM
REM kolor 31 1F zastrzezony dla gracza
kolor$(32) = "20 0A 13 29": REM spodnie + zero
kolor$(33) = "21 0A 13 29": REM
kolor$(34) = "22 0A 13 29": REM
kolor$(35) = "23 0A 13 29": REM
kolor$(36) = "24 05 1D 24": REM spodnie+ liscie
kolor$(37) = "25 3F 3F 3F": REM
kolor$(38) = "26 1B 1B 32": REM spodnie + framuga okna
kolor$(39) = "27 1A 10 3F": REM spodnie + doniczka
kolor$(40) = "28 00 1A 3F": REM spodnie + niebo
kolor$(41) = "29 3F 3F 3F": REM spodnie +slonce
kolor$(42) = "2A 10 14 20": REM spodnie + framuga zew
kolor$(43) = "2B 3F 3F 3F": REM
kolor$(44) = "2C 3F 3F 3F": REM
kolor$(45) = "2D 3F 3F 3F": REM
kolor$(46) = "2E 3F 3F 3F": REM
REM rejestr 47 2F zastrzezony dla gracza
REM ******* ludzik - uwaga rejestry sa rozrzucone nF (1F-FF)
REM rejestry nieprzezroczyste
kolor$(31) = "1F 2F 09 09": REM sweter
kolor$(47) = "2F 0D 1A 37": REM spodnie
kolor$(63) = "3F 1A 1A 1A": REM wlosy i buty
kolor$(79) = "4F 10 10 10": REM pasek2
kolor$(95) = "5F 3F 2F 0F":
kolor$(111) = "6F 3F 30 20": REM skora1
kolor$(127) = "7F 1A 02 02": REM sweter 2 przeniesiony do przezroczystych
kolor$(143) = "8F 32 22 02": REM nos
kolor$(159) = "9F 0A 13 29": REM spodnie2 przeniesiony do przezroczystych
kolor$(175) = "AF 22 02 02": REM sweter3
kolor$(191) = "BF 20 20 20": REM pasek
kolor$(207) = "CF 37 27 06": REM usta
REM bloczek
kolor$(224) = "E0 00 00 00": REM
kolor$(225) = "E1 04 04 04": REM
kolor$(226) = "E2 08 08 08": REM
kolor$(227) = "E3 0B 0B 0B": REM
kolor$(228) = "E4 10 10 10": REM
kolor$(229) = "E5 14 14 14": REM
kolor$(230) = "E6 18 18 18": REM
kolor$(231) = "E7 1B 1B 1B": REM
kolor$(232) = "E8 20 20 20": REM
kolor$(233) = "E9 24 24 24": REM
kolor$(234) = "EA 28 28 28": REM
kolor$(235) = "EB 2B 2B 2B": REM
kolor$(236) = "EC 30 30 30": REM
kolor$(237) = "ED 34 34 34": REM
kolor$(238) = "EE 38 38 38": REM
kolor$(239) = "EF 3F 3F 3F": REM zarezerwowany dla ludzika
REM cegly male
kolor$(252) = "FC 30 27 27": REM krawedz
kolor$(253) = "FD 14 0E 0E": REM fuga
kolor$(254) = "FE 1F 17 17": REM cegla
kolor$(255) = "FF 3F 3F 3F": REM zarezerwowany dla ludzika
FOR i = 0 TO 255: rej$ = "&H" + MID$(kolor$(i), 1, 2)
red$ = "&H" + MID$(kolor$(i), 4, 2)
gre$ = "&H" + MID$(kolor$(i), 7, 2)
blu$ = "&H" + MID$(kolor$(i), 10, 2)
REM PRINT rej$; " "; red$; " "; gre$; " "; blu$
rej = VAL(rej$)
red = VAL(red$)
gre = VAL(gre$)
blu = VAL(blu$)
REM PRINT rej; " "; red; " "; gre; " "; blu
PALETTE rej, red + gre * 256 + blu * 65536
NEXT i
END SUB
SUB plansze
REM ************************** DANE pomieszczen
REM ***************** obliczane od roomx=1,roomy=1
REM ***************** (roomy-1)*8+(roomx-1)
REM kodowanie _+++++++++++++++++++++++_okna++++_se_kw_se1_se2_
REM ************ plansze wiersza roomy=1
plansza$(0) = "#LLLQQQLLLB............_______YQ_GN_________UI_"
plansza$(1) = "#...UUUPPP#............____MD__________________"
plansza$(2) = "#PPPQQQQQQU............_HE__________ES______UI_"
plansza$(3) = "##LLLQWWWQ#............__________SJ____BB1_fB1_"
plansza$(4) = "#Q...QQUQQU............_______ZK_______________"
plansza$(5) = "#L..PWWQQQU............____MG__________LK5_____"
plansza$(6) = "#PPPWQLLLUU............_LD__________FQ_________"
plansza$(7) = "##QQQBPPPAA............__________aH_WI_________"
REM ************ plansze wiersza roomy=2
plansza$(8) = "BQQQWLLLQQ#..........FN________________________"
plansza$(9) = "#QQQQ...QQ#............_______YQ_RN_________WH_"
plansza$(10) = "UUQQQPPPUQU............____ML__________KK1__WJ_"
plansza$(11) = "#WLLLWQQQQW............_____________MS_________"
plansza$(12) = "UQPPPQQQQQ#..........aO_aI__________________UM_"
plansza$(13) = "UQQQ000QQQ#............__________RN_GS_________"
plansza$(14) = "UUUUQQQUUUU............____DJ____aM____________"
plansza$(15) = "AAQQQ0QQUUU............________________________"
REM ************* plansze wiersza roomy=3
plansza$(16) = "#QQQWQWQQQW............__________NG_YS_________"
plansza$(17) = "#QQQWLLLLQW............_MD_YP____UP____________"
plansza$(18) = "U0000....0#..........VI_WQ_____________DI3_`I3_"
plansza$(19) = "WWWWWPPPPUU............_MM__________YQ_________"
plansza$(20) = "#QQQQMWMQQW............_______NP_SM_________WO_"
plansza$(21) = "#00QQLLL0QU..........GL________________EB1__UJ_"
plansza$(22) = "UQQQWPPP0##............____aM____UP____________"
plansza$(23) = "UUQQQBQQQAA............____YP_______KQ_________"
REM ************ plansze wiersza roomy=4
plansza$(24) = "WQQQWLLLLUU..........ZD____ZM____SF____________"
plansza$(25) = "WWWWWPPPP##............________________________"
plansza$(26) = "#0QLLLQQQQW............_______LQ_UQ_YS_RU3__#F_"
plansza$(27) = "UUQPPPQQQQU..........VI____YI____SJ_GS_GB5__WM_": REM startowa MaX=dU
plansza$(28) = "#QQQQWQQQQU............__________NG____________"
plansza$(29) = "UUQQQWLLLLU............_______ZQ_SG____________"
plansza$(30) = "##00UU....U............_____________LS_KK1_____"
plansza$(31) = "AAAAQQPPPPU..........VJ_______LQ_______________"
REM ****************** plansze wiersza roomy=5
plansza$(32) = "ULLLWWWLLL#............_DD____aQ_SR_YS_________"
plansza$(33) = "#...UUU...#............________________II4_YI4_"
plansza$(34) = "WPPPQUUPPPU..........KP_______aQ_______GL5_YL5_"
plansza$(35) = "UUQQQLLLQQ#............____ML_______YS______UJ_"
plansza$(36) = "UQQQQPPP###............____YL_______________WJ_"
plansza$(37) = "UU00U000UUU..........VI________________KR1_____"
plansza$(38) = "UU0QQQWQQQ#............____OG____SR_YS_________"
plansza$(39) = "UUQQQWQQQBB............_______aO_______________"
REM ******************* plansze wiersza roomy=6
plansza$(40) = "#00ULLLU0UU..........VI_____________KM_________"
plansza$(41) = "###UPPPLLL#............__________SR____MH2_YH2_"
plansza$(42) = "U0QQQQW...#............_______GQ_______________"
plansza$(43) = "#LLLU00PPPU............_____________YS_________"
plansza$(44) = "#PPPWLLLQQ#..........EE__________MM_________0Q_"
plansza$(45) = "UUUU0PPPUUU............________________KO3_YO3_"
plansza$(46) = "#QQQWQQQ00U............_DD_______ZF_MS_________"
plansza$(47) = "BBQQQUQQQAA..........VI_____________aI_________"
REM ******************* plansze wiersza roomy=7
plansza$(48) = "UUU0LLL####............_EJ__________YM_________"
plansza$(49) = "###U...####............____SJ____ML____________"
plansza$(50) = "#LLLPPP####............_____________KM_________"
plansza$(51) = "UPPP000####............____PH____ZJ____________"
plansza$(52) = "#LLL0######............__________EE____________"
plansza$(53) = "UPPPQQQLLL#............_____________GS______0I_"
plansza$(54) = "UUUUUUU...#............_LQ_____________________"
plansza$(55) = "AAAQQQBPPP#............_______MQ_aR____________"
REM lokalizacja serc
REM serca wiersza 1
serca(1, 1) = 1
serca(4, 1) = 1
serca(8, 1) = 1
REM serca wiersza 2
serca(2, 2) = 1
serca(6, 2) = 1
serca(7, 2) = 1
REM serca wiersza 3
serca(1, 3) = 1
serca(2, 3) = 1
serca(5, 3) = 1
serca(7, 3) = 1
REM serca wiersza 4
serca(1, 4) = 1
serca(3, 4) = 1
serca(4, 4) = 1
serca(5, 4) = 1
serca(6, 4) = 1
REM serca wiersza 5
serca(1, 5) = 1
serca(7, 5) = 1
REM serca wiersza 6
serca(2, 6) = 1
serca(5, 6) = 1
serca(7, 6) = 1
REM serca wiersza 7
serca(2, 7) = 1
serca(4, 7) = 1
serca(5, 7) = 1
serca(8, 7) = 1
END SUB
SUB rysowanie
FOR yw = 0 TO 10
el$ = MID$(kod$, yw + 1, 1)
y16 = yw * 16
IF el$ = "U" THEN
PUT (128, y16), szaretlo4, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blok2, PSET: PUT (96, y16), bloks, PSET
PUT (112, y16), blokk, PSET: PUT (192, y16), blokp, PSET
PUT (208, y16), blok4, PSET: PUT (272, y16), blok2, PSET
PUT (304, y16), bloks, PSET
END IF
IF el$ = "L" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (0, y16), blokk, PSET
END IF
IF el$ = "P" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
PUT (304, y16), blokp, PSET
END IF
IF el$ = "." THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), szaretlo4, PSET: NEXT xw
END IF
IF el$ = "#" THEN
FOR xw = 0 TO 4: PUT (xw * 64, y16), blok4, PSET: NEXT xw
END IF
IF el$ = "0" THEN
PUT (80, y16), szaretlo4, PSET: PUT (144, y16), szaretlo4, PSET
PUT (208, y16), szaretlo2, PSET: PUT (0, y16), blok4, PSET
PUT (64, y16), blokk, PSET: PUT (240, y16), blokp, PSET
PUT (256, y16), blok4, PSET
END IF
IF el$ = "W" THEN
PUT (32, y16), szaretlo4, PSET: PUT (224, y16), szaretlo4, PSET
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "A" THEN
PUT (224, y16), szaretlo4, PSET
PUT (0, y16), blok4, PSET: PUT (64, y16), blok2, PSET:
PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blokk, PSET
PUT (288, y16), blokp, PSET: PUT (304, y16), bloks, PSET
END IF
IF el$ = "B" THEN
PUT (32, y16), szaretlo4, PSET:
PUT (0, y16), bloks, PSET: PUT (16, y16), blokk, PSET
PUT (80, y16), blokp, PSET: PUT (96, y16), blok4, PSET
PUT (160, y16), blok4, PSET: PUT (224, y16), blok4, PSET:
PUT (288, y16), blok2, PSET
END IF
IF el$ = "Q" THEN
FOR xw = 0 TO 3: PUT (xw * 64 + 16, y16), szaretlo4, PSET: NEXT xw
PUT (272, y16), szaretlo2, PSET: PUT (0, y16), blokk, PSET
PUT (304, y16), blokp, PSET
END IF
NEXT yw
REM rysowanie podestow
el$ = MID$(kod$, 45, 1)
IF el$ = "" OR el$ = "_" THEN GOTO okna
el2$ = MID$(kod$, 46, 1)
yokna = (ASC(el2$) - 65) * 8
IF el$ = "#" THEN PUT (0, yokna), ceg40, PSET
IF el$ = "W" THEN PUT (0, yokna), ceg4plus20plus4, PSET
IF el$ = "U" THEN PUT (0, yokna), ceg17plus17, PSET
IF el$ = "0" THEN PUT (0, yokna), ceg13plus13, PSET
okna:
REM rysowanie okien
el$ = MID$(kod$, 25, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknonz
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 26, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window2, PSET
oknonz:
REM okno niebiesko-zielone
el$ = MID$(kod$, 28, 1)
IF el$ = "" OR el$ = "_" THEN GOTO oknoziel
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 29, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window1, PSET
oknoziel:
REM okno zielone
el$ = MID$(kod$, 31, 1)
IF el$ = "" OR el$ = "_" THEN GOTO serce
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 32, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), window3, PSET
serce:
REM serce
xserca = -20
yokna = -20
IF serca(roomx, roomy) = 0 THEN GOTO donica
el$ = MID$(kod$, 34, 1)
IF el$ = "" OR el$ = "_" THEN GOTO donica
xserca = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 35, 1)
yserca = (ASC(el$) - 65) * 8
GET (xserca, yserca)-(xserca + 15, yserca + 7), tlo
COLOR 5
LINE (xserca, yserca + 1)-(xserca, yserca + 3)
LINE (xserca + 1, yserca)-(xserca + 1, yserca + 4)
LINE (xserca + 2, yserca)-(xserca + 2, yserca + 5)
LINE (xserca + 3, yserca + 1)-(xserca + 3, yserca + 6)
LINE (xserca + 4, yserca)-(xserca + 4, yserca + 5)
LINE (xserca + 5, yserca)-(xserca + 5, yserca + 4)
LINE (xserca + 6, yserca + 1)-(xserca + 6, yserca + 3)
donica:
el$ = MID$(kod$, 37, 1)
IF el$ = "" OR el$ = "_" THEN GOTO wentyl
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 38, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), palma, PSET
wentyl:
el$ = MID$(kod$, 22, 1)
IF el$ = "" OR el$ = "." THEN GOTO koniecrysowania
xokna = (ASC(el$) - 65) * 8
el$ = MID$(kod$, 23, 1)
yokna = (ASC(el$) - 65) * 8
PUT (xokna, yokna), wentylator, PSET
koniecrysowania:
LOCATE 24, 2: COLOR 15: PRINT "Czas:"; licz;
END SUB
SUB zabranie
DEF SEG = 0
REM wlaczene zegara
OUT 67, 182
REM odczytanie wartosci portu 97
stary.port = INP(97)
REM ustawienie wartosci "1" dla bitow 1 i 0
nowy.port = (stary.port OR 3)
REM wlaczenie glosnika
OUT 97, nowy.port
REM najpierw mlodszy potem starszy bajt
t0 = PEEK(1132)
OUT 66, 32: OUT 66, 3
FOR i = 1 TO 6000: NEXT i
OUT 66, 204: OUT 66, 4
FOR i = 1 TO 6000: NEXT i
t1 = PEEK(1132)
REM wylaczenie glosnika
OUT 97, stary.port
END SUB
|
|
Powrót do góry |
|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Piotr-246
Gość
|
Wysłany: Pon 21:39, 13 Wrz 2021 Temat postu: |
|
|
Nie wiem kiedy wrócę do dalszego kodowania.
Aby wprowadzić więcej plansz, potrzeba wprowadzić normę, że blok ma wysokość 18 px, a nie 16 px
Chodzi o to, aby układ planszy był kodowany przez 10 liter, a nie 11
Wtedy gracz może zmieścić się nawet na 3 poziomach: 1+2+1+2+1+2+1=10
Choć będą to ciasne przejścia 36px wysokosci przy 32 px gracza, to w grze nie muszą być normą.
Uwaga: Nie może być 20 px jako wysokość bloku, bo plansza zajmie wtedy cały ekran (tryb 13 ma 320x200 px), a na dole muszą być napisy.
|
|
Powrót do góry |
|
|
|
|
Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|