Download Game! Currently 76 players and visitors. Last logged in:ArchilSearcAhvensurmaWicksius

Blitzer's Blog >> 71602

Back to blogs index
Posted: 31 Jul 2026 10:24 [ permalink ]
10 REM === OMEGA V2: REACTIVE EVENT DEMO ===
20 PRINT ">>> 1. Alustetaan Noden HTTP-palvelin ja VFB..."
30 WEBSERVE PORT 9091 INTO HTTP_SERVER
40 WEBSERVE ADD "/" TO HTTP_SERVER FROM FS "/mnt/mesh_root/src/x-mesh-basic/vfb
_client.html"
50 WEBSERVE LINK VFB TO HTTP_SERVER ON "/stream"
60 WEBSERVE LINK OMEGA TO HTTP_SERVER ON "/input" INTO "ch_input"

70 PRINT ">>> 2. Alustetaan Noden Event Traps (Keskeytykset)..."
80 OMEGA SUBSCRIBE "KEY" WITH GOSUB 1000
90 OMEGA SUBSCRIBE "TICK" WITH GOSUB 2000

100 PRINT ">>> 3. Alustetaan JS-Laatikkomoottori ja pelitila..."
110 SCREEN 176, 184
120 DIM BOXES AS ARRAY
130 LET SELECTED_INDEX = -1

140 PRINT ">>> 4. Kaynnistetaan Noden tausta-ajastin (TICK)..."
150 LET JS_TIMER$ = "function(ms) { setInterval(() => { if (global.MBUS_STATE
&& global.MBUS_STATE.rx_queue) { global.MBUS_STATE.rx_queue.push({ channel:
'ch_timer', data: { type: 'TICK' } }); if (global.MBUS_STATE.resume_fn) { let
cb = global.MBUS_STATE.resume_fn; global.MBUS_STATE.resume_fn = null;
global.MBUS_STATE.is_suspended = false; setImmediate(cb); } } }, ms); }"
160 JS DEFINE "start_timer" JS_TIMER$
170 JS CALL "start_timer" WITH 1000 INTO DUMMY

180 PRINT ">>> VALMIS! Avaa http://localhost:9091 ja kokeile (B, N, W/A/S/D,
R, P) <<<"

200 REM --- PAAOHJELMA: DETACHED EVENT LOOP ---
210 REM Taalla piirretaan ruutu ja vaivutaan uneen!
220 FILLRECT 0, 0, 176, 184, 0
230 LET I = 0
240 FOREACH B IN BOXES
250   LET COLOR = 2
260   IF I == SELECTED_INDEX THEN LET COLOR = 3
270   FILLRECT B["x"], B["y"], 10, 10, COLOR
280   LET I = I + 1
290 NEXT B
300 BUFFER BLIT SCREEN

310 REM Irrotetaan Node.js Event Loop! (CPU -> 0%)
320 SUSPEND
330 GOTO 200


1000 REM ==========================================
1001 REM EVENT HANDLER: NCPPCIMISTC / OMEGA (KEY)
1002 REM ==========================================
1010 OMEGA READ INTO PKT
1020 IF PKT == "" THEN RETURN
1030 JSON GET "data" FROM PKT INTO DATA
1040 JSON GET "action" FROM DATA INTO ACT
1050 IF ACT != "DOWN" THEN RETURN
1060 JSON GET "code" FROM DATA INTO KEY

1070 IF KEY == "B" THEN
1080   JSON INIT "DICT" NEW_BOX
1090   JSON SET "x" IN NEW_BOX TO 83
1100   JSON SET "y" IN NEW_BOX TO 87
1110   JSON SET "mode" IN NEW_BOX TO "idle"
1120   JSON PUSH NEW_BOX INTO BOXES
1130   LET SELECTED_INDEX = BOXES["length"] - 1
1140   PRINT "Uusi laatikko luotu. Index: " + SELECTED_INDEX
1150 END IF

1160 IF BOXES["length"] == 0 THEN RETURN

1170 IF KEY == "N" THEN
1180   LET SELECTED_INDEX = SELECTED_INDEX + 1
1190   IF SELECTED_INDEX >= BOXES["length"] THEN LET SELECTED_INDEX = 0
1200   PRINT "Valinta siirtyi indexiin: " + SELECTED_INDEX
1210 END IF

1220 LET CUR_BOX = BOXES[SELECTED_INDEX]
1230 IF KEY == "W" THEN LET CUR_BOX["y"] = CUR_BOX["y"] - 10
1240 IF KEY == "S" THEN LET CUR_BOX["y"] = CUR_BOX["y"] + 10
1250 IF KEY == "A" THEN LET CUR_BOX["x"] = CUR_BOX["x"] - 10
1260 IF KEY == "D" THEN LET CUR_BOX["x"] = CUR_BOX["x"] + 10

1270 IF KEY == "R" THEN 
1280   LET CUR_BOX["mode"] = "random"
1290   PRINT "Laatikko " + SELECTED_INDEX + " asetettu random-tilaan."
1300 END IF
1310 IF KEY == "P" THEN 
1320   LET CUR_BOX["mode"] = "idle"
1330   PRINT "Laatikko " + SELECTED_INDEX + " pysaytetty."
1340 END IF

1350 RETURN


2000 REM ==========================================
2001 REM EVENT HANDLER: TICK (Joka sekunti)
2002 REM ==========================================
2010 OMEGA READ INTO PKT
2020 IF PKT == "" THEN RETURN
2030 JS DEFINE "math_random" "function() { return Math.random(); }"
2040 JS DEFINE "math_floor" "function(v) { return Math.floor(v); }"
2050 FOREACH B IN BOXES
2060   IF B["mode"] == "random" THEN
2070     JS CALL "math_random" INTO R
2080     IF R < 0.25 THEN LET B["y"] = B["y"] - 10
2090     IF R >= 0.25 AND R < 0.5 THEN LET B["y"] = B["y"] + 10
2100     IF R >= 0.5 AND R < 0.75 THEN LET B["x"] = B["x"] - 10
2110     IF R >= 0.75 THEN LET B["x"] = B["x"] + 10
2120   END IF
2130 NEXT B
2140 RETURN