Megcsináltam, látszólag működik mindegyik irányban:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
Jelentősen egyszerűsítettem a programon. A joy figyelésénél csak meghatározza a változók értékét, hogy milyen irányba, mit hogyan mennyit. Majd a joy figyelést követően ezeknek a változóknak az értéke alapján arrébb is löki, amit kell.
Iderakom a programrészletet. Ilyenre gondoltatok, vagy még ennél is egyszerűbbre? Még talán az a DISPLAY is elég lenne egyetlen egyszer a végén, nem többször ott belül.
A K1 azt jelöli, hogy ha van út az adott irányba, abba menjen annyit.
K2: az egyik irányba nézi az arrébb lévő kaput
K3: a másik irányba nézi az arrébb lévő kaput
P0: ennyit görgesse a képernyőt, ha van út az adott irányban
P1: ennyit görgesse a gépernyőt, ha az arrébb lévő irányban van út.
P2: ennyit görgesse a gépernyőt, ha a másik arrébb lévő irányban van út.
500 SELECT CASE JOY(ST)
510 CASE 1
520 SOUND SOURCE 3,ENVELOPE 10,INTERRUPT,STYLE 8,LEFT 127,RIGHT 64
530 SOUND PITCH RND(12)+49,INTERRUPT,ENVELOPE 4,SOURCE 1,STYLE 16,LEFT 64,RIGHT 127
540 CALL CHAR_DEF(112,96,116,228,192,128,192,224,112,96) !JOBBRA
550 LET K1=1:LET K2=35:LET K3=-33:LET P0=0:LET P1=1:LET P2=-1
689 CASE 2
690 SOUND PITCH RND(12)+49,INTERRUPT,ENVELOPE 4,SOURCE 1,STYLE 16,RIGHT 64,LEFT 127
700 SOUND SOURCE 3,ENVELOPE 9,INTERRUPT,STYLE 12,LEFT 64,RIGHT 127
720 CALL CHAR_DEF(112,96,226,114,48,16,48,112,224,96) !BALRA
730 LET K1=-1:LET K2=33:LET K3=-35:LET P0=0:LET P1=1:LET P2=-1
850 CASE 4
860 SOUND PITCH 56+RND(12),ENVELOPE 4,SOURCE 1,INTERRUPT,RIGHT 64,LEFT 127,STYLE 32
870 SOUND SOURCE 3,ENVELOPE 4,INTERRUPT,STYLE 16,LEFT 64,RIGHT 127
890 CALL CHAR_DEF(112,0,96,240,240,248,248,144,144,144)
900 LET K1=34:LET K2=33:LET K3=35:LET P0=1:LET P1=1:LET P2=1
1030 CASE 8
1040 SOUND PITCH 44+RND(12),ENVELOPE 4,SOURCE 1,INTERRUPT,LEFT 64,RIGHT 127,STYLE 48
1050 SOUND SOURCE 3,ENVELOPE 4,INTERRUPT,STYLE 16,LEFT 127,RIGHT 64
1070 CALL CHAR_DEF(112,144,144,144,144,248,248,240,96,0)
1080 LET K1=-34:LET K2=-33:LET K3=-35:LET P0=-1:LET P1=-1:LET P2=-1
1090 CASE 16
1100 GOTO 1660
1212 CASE ELSE
1213 LET WWW=60:GOTO 1270
1214 END SELECT
! tényleges mozgatás
1215 LET K=SPEEK(255,MAN+K1)
1216 SELECT CASE K
1217 CASE 32
1218 SPOKE 255,MAN,32:LET MAN=MAN+K1:LET WWW=37:LET POSI=POSI+P0:DISPLAY #102:AT 3 FROM POSI-9 TO POSI+10
1219 CASE 120
1220 SPOKE 255,MAN,32:LET MAN=MAN+K1:LET WWW=37:LET POSI=POSI+P0:CALL BONUSPILL
1222 CASE 42
1223 SPOKE 255,MAN,32:LET MAN=MAN+K1:LET WWW=20:LET POSI=POSI+P0:CALL NYAMM
1224 CASE 37
1225 GOTO 1660
1226 CASE ELSE
1227 SP=SPEEK(255,MAN+K2)
1228 SELECT CASE SP
1229 CASE 32
1230 LET WWW=30:LET POSI=POSI+P1:SPOKE 255,MAN,32:LET MAN=MAN+K2:DISPLAY #102:AT 3 FROM POSI-9 TO POSI+10:GOTO 1251
1231 CASE 120
1232 LET WWW=30:LET POSI=POSI+P1:SPOKE 255,MAN,32:LET MAN=MAN+K2:CALL BONUSPILL:GOTO 1251
1233 CASE 42
1234 LET WWW=30:LET POSI=POSI+P1:SPOKE 255,MAN,32:LET MAN=MAN+K2:CALL NYAMM:GOTO 1251
1235 CASE 37
1236 GOTO 1660
1237 CASE ELSE
1238 END SELECT
1239 SP=SPEEK(255,MAN+K3)
1240 SELECT CASE SP
1241 CASE 32
1242 LET WWW=30:LET POSI=POSI+P2:SPOKE 255,MAN,32:LET MAN=MAN+K3:DISPLAY #102:AT 3 FROM POSI-9 TO POSI+10
1243 CASE 120
1244 LET WWW=30:LET POSI=POSI+P2:SPOKE 255,MAN,32:LET MAN=MAN+K3:CALL BONUSPILL
1245 CASE 42
1246 LET WWW=30:LET POSI=POSI+P2:SPOKE 255,MAN,32:LET MAN=MAN+K3:CALL NYAMM
1247 CASE 37
1248 GOTO 1660
1249 CASE ELSE
1250 END SELECT
1251 END SELECT
1252 SPOKE 255,MAN,112