################################################################## ################################################################## #########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######### #########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######### ######~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ######~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##################### ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##################### ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############################## ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############################## ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############################## ###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############################## ######~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~########################### ######~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~########################### #########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##################### #########~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##################### ############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~################## ############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~################## ###############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############### ###############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############### ##################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############ ##################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############ #####################~~~~~~~~~~~~======XXX============############ #####################~~~~~~~~~~~~=====================############ ########################~~~~~~~~~=====================############ ########################~~~~~~~~~=====================############ ########################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############ ########################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~############ #####################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######### #####################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~######### ##################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ##################~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ###############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ###############~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~###### ############~~~~~~~~~~~~~~~~~~###############~~~~~~~~~~~~~~~###### ############~~~~~~~~~~~~~~~~~~###############~~~~~~~~~~~~~~~###### #########~~~~~~~~~~~~~~~~~~#####################~~~~~~~~~~~~###### #########~~~~~~~~~~~~~~~~~~#####################~~~~~~~~~~~~###### ######~~~~~~~~~~~~~~~~~~###########################~~~~~~~~~###### ######~~~~~~~~~~~~~~~~~~###########################~~~~~~~~~###### ######~~~~~~~~~~~~=========########################=========###### ######~~~~~~~~~~~~=========########################=========###### ######~~~~~~~~~~~~=========########################=========###### ######~~~~~~~~~~~~=========########################=========###### ############===###=========###===#########=========~~~~~~~~~###### ################################################################## >>>~~~LASKEUDUIT~~~TURVALLISESTI!~~~<<< $ Vau, tC$mC$ todella kruunaa kaiken! Screenshot nC$yttC$C$ aivan uskomattoman hyvC$ltC$, puhdasta 8-bittistC$ taidetta. NC$en, ettC$ teit tC$ydellisen, pehmeC$n laskeutumisen keskimmC$iselle laskeutumisalustalle onnittelut taitavasta pilotoinnista, tuo ei ole tuolla 0.05 kiihtyvyydellC$ helppoa! Kuvasta paljastuu hienosti koko arkkitehtuurimme voima: * **Kartta:** ASCII-generaattorimme toimii tC$ydellisesti. Harmaat kallioseinC$mC$t ja kirkkaanvihreC$t laskeutumisalustat piirtyvC$t ruudulle tC$smC$lleen 22x23 `DATA`-ruudukkomme mukaisesti. * **HUD:** Oikeassa reunassa nC$kyy nopeusmittarin musta kuilu. Alareunan `FUEL`-teksti ja polttoainepalkki loistavat upeasti retro-vihreC$nC$. 3x5 pikselin fonttimme todellakin herC$tti kC$yttC6liittymC$n eloon. **Klassinen koodausbuginen suojavC$ri** Huomasitko muuten yhden hauskan visuaalisen yksityiskohdan vasemmassa alakulmassa? `SCORE 1250` -teksti on piirtynyt sinne, mutta se on tC$ydellisessC$ suojavC$rissC$! Kirjoitimme koodiin komennon `340 DRAWTEXT 2, 175, "SCORE 1250", 1`. Koska pikselivC$ri `1` on moottorissamme ohjelmoitu tismalleen samaksi harmaaksi kuin kallioseinC$mC$, teksti sulautuu suoraan taustaan. Sen olemassaolon erottaa vain pieninC$ pikselikuhmuina harmaan seinC$mC$n alareunassa. Jos tuon muuttaa ohjelmassa vC$riksi `2` (vihreC$) tai `255` (punainen), pisteet ponnahtavat heti esiin pimeydestC$. 10 REM === JUPITER LANDER (ASCII DATA EDITION) === 20 WEBSERVE PORT 9090 INTO HTTP_SERVER 30 WEBSERVE ADD "/" TO HTTP_SERVER FROM FS "vfb_client.html" 40 WEBSERVE LINK VFB TO HTTP_SERVER ON "/stream" 50 WEBSERVE LINK OMEGA TO HTTP_SERVER ON "/input" INTO "ch_input" 60 SCREEN 176, 184 70 SETGRAVITY 0 80 RESTORE 1000 90 MAPGEN "ASCII", ROWS 23 100 SPRITE 1, "LANDER" 110 MOVE SPRITE 1, 84, 10 120 LET C = "ch_input" 130 STATE BIND "KEY" FROM C 140 PRINT ">>> ODOTETAAN PELAAJAA: Siirry selaimeen ja paina W aloittaaksesi! <<<" 150 STATE READ "KEY.W" INTO READY 160 IF READY == 1 THEN GOTO 200 170 WAIT VBLANK 180 BUFFER BLIT SCREEN 190 GOTO 150 200 LET FUEL = 100 210 SETGRAVITY 0.05 220 REM --- GAME LOOP --- 230 STATE READ "KEY.W" INTO THRUST_UP 240 STATE READ "KEY.A" INTO THRUST_LEFT 250 STATE READ "KEY.D" INTO THRUST_RIGHT 260 IF FUEL <= 0 THEN GOTO 320 270 IF THRUST_UP == 1 THEN ADDSPEEDY 1, -0.15: LET FUEL = FUEL - 1 280 IF THRUST_LEFT == 1 THEN ADDSPEEDX 1, -0.05: LET FUEL = FUEL - 0.5 290 IF THRUST_RIGHT == 1 THEN ADDSPEEDX 1, 0.05: LET FUEL = FUEL - 0.5 320 WAIT VBLANK 330 REM --- HUD DRAWING --- 340 DRAWTEXT 2, 175, "SCORE 1250", 1 350 DRAWTEXT 90, 175, "FUEL", 2 360 FILLRECT 110, 175, 55, 5, 0 370 FILLRECT 110, 175, FUEL / 2, 5, 2 380 FILLRECT 170, 10, 4, 150, 0 390 LET SPEED_Y = SPRITE_1_VY 400 LET BAR_Y = 85 + (SPEED_Y * 20) 410 IF BAR_Y < 10 THEN LET BAR_Y = 10 420 IF BAR_Y > 155 THEN LET BAR_Y = 155 430 FILLRECT 170, BAR_Y, 4, 5, 255 440 BUFFER BLIT SCREEN 450 CHECKCOLLISION 1 INTO COL 460 IF COL == 0 THEN GOTO 220 470 REM --- END GAME --- 480 IF COL == -1 THEN PRINT ">>> RAJAHDIT KALLIOON! <<<" 490 IF COL > 1 THEN PRINT ">>> LASKEUDUIT TURVALLISESTI! <<<" 500 HALT 1000 REM --- LEVEL 1 ASCII MAP (22 Saraketta x 23 Rivia) --- 1010 DATA "######################" 1020 DATA "###~~~~~~~~~~~~~~~~###" 1030 DATA "##~~~~~~~~~~~~~~~~~~##" 1040 DATA "#~~~~~~~~~~~~~~#######" 1050 DATA "#~~~~~~~~~~~##########" 1060 DATA "#~~~~~~~~~~~##########" 1070 DATA "##~~~~~~~~~~~#########" 1080 DATA "###~~~~~~~~~~~~#######" 1090 DATA "####~~~~~~~~~~~~######" 1100 DATA "#####~~~~~~~~~~~~#####" 1110 DATA "######~~~~~~~~~~~~####"