{{htmlmetatags>metatag-robots=() metatag-title=(VARI ALTRI CONTRIBUTI GENERATORE DI LABIRINTI | ugBASIC User Manual) metatag-keywords=(ugBASIC,Commodore 64,Commodore PLUS/4,ZX Spectrum) metatag-description=(An isomorphic language for retrocomputers) metatag-media-og:image=(:ugbasic:logo-ugbasic-fb.png) metatag-og:title=(VARI ALTRI CONTRIBUTI GENERATORE DI LABIRINTI | ugBASIC User Manual) metatag-og:description=(An isomorphic language for retrocomputers) }} ====== ugBASIC Manuale Utente ====== ===== VARI ALTRI CONTRIBUTI GENERATORE DI LABIRINTI ===== ==== SCOPO ==== Generazione di labirinti casuali tramite backtracking. Questo programma ? un porting dall'esempio scritto in XC=BASIC 3.1 da parte di JJ Flash, con l'aggiunta di un "topolino" che si muove all'interno del labirinto in cerca del "formaggio". ==== SORGENTE ==== DEFINE DEFAULT TYPE SIGNED WORD VAR finalScrPosition AS WORD CONST wall = 95 : CONST space = 32 : CONST mouse = 81 VAR nextDirection AS BYTE: VAR firstnextDirection AS BYTE DIM dirArray(4) = #{ 2, -80, -2, 80 } PRINT "press a key (i need randomness)" WAIT KEY CLS BLACK INK WHITE RANDOMIZE TIMER restart: FOR i = 0 TO 999: POKE Txa+i, wall: NEXT FOR i = 0 TO 39: POKE Txa+i, space: NEXT FOR i = 0 TO 39: POKE Txa+984+i,space: NEXT screenPosition = Txa+79 FOR i = 1 TO 23 POKE screenPosition, space screenPosition = screenPosition + 40 NEXT steps = 0 : maxSteps = 0 screenPosition = Txa + 81 + (80 * RND(9)) + 2 * RND(9) POKE screenPosition, 4 : ' "D" digAnotherLocation: nextDirection = RND(3) : firstnextDirection = nextDirection IF steps > maxSteps THEN : maxSteps = steps: finalScrPosition = newScreenPosition : ENDIF tryDiggingAgain: newScreenPosition = screenPosition + dirArray(nextDirection) IF PEEK(newScreenPosition) = wall THEN POKE newScreenPosition, nextDirection POKE screenPosition + ( dirArray(nextDirection)\2 ), space screenPosition = newScreenPosition steps = steps + 1 GOTO digAnotherLocation ENDIF nextDirection = (nextDirection + 1) AND 3 IF nextDirection <> firstnextDirection THEN : GOTO tryDiggingAgain : ENDIF nextDirection = PEEK(screenPosition) : POKE screenPosition, space steps = steps - 1 IF nextDirection < 4 THEN screenPosition = screenPosition - dirArray(nextDirection) GOTO digAnotherLocation ENDIF POKE screenPosition, 1 : POKE finalScrPosition, 2 HOME : PRINT "max steps: " ; maxSteps ; " - final loc: " ; finalScrPosition POKE screenPosition, mouse : nextDirection = 2 mouseLabel: WAIT VBL newScreenPosition = screenPosition + (dirArray(nextDirection)\2) IF newScreenPosition = finalScrPosition THEN : GOTO restart : ENDIF IF PEEK(newScreenPosition) = space THEN POKE newScreenPosition, mouse : POKE screenPosition, space screenPosition = newScreenPosition nextDirection = (nextDirection - 2) AND 3 ENDIF nextDirection = (nextDirection - 1) AND 3 GOTO mouseLabel ==== FILE ==== * ''[[https://github.com/spotlessmind1975/ugbasic/tree/main/examples/contrib_mazegen.bas|contrib_mazegen.bas]]'' ==== COME ESEGUIRLO ==== === Atari 400/800 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore Altirra, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.atari contrib_mazegen.bas -o example.xex altirra example.xex # Windows ugbc.atari.exe contrib_mazegen.bas -o example.xex altirra example.xex === Atari 600XL/800XL/1200XL/XG(SE) === Per poter eseguire l'esempio, è necessario disporre dell'emulatore Altirra, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.atarixl contrib_mazegen.bas -o example.xex altirra example.xex # Windows ugbc.atarixl.exe contrib_mazegen.bas -o example.xex altirra example.xex === Commodore 64 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.c64 contrib_mazegen.bas -o example.prg x64sc example.prg # Windows ugbc.c64.exe contrib_mazegen.bas -o example.prg x64sc example.prg === Commodore 64+REU === Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.c64reu contrib_mazegen.bas -o example.prg x64sc -reu example.prg # Windows ugbc.c64reu.exe contrib_mazegen.bas -o example.prg x64sc -reu example.prg === Commodore PLUS/4 === == Usando YAPE == Per poter eseguire l'esempio, è necessario disporre dell'emulatore YAPE, e in particolare che l'eseguibile ''yape'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.plus4 contrib_mazegen.bas -o example.prg yape example.prg # Windows ugbc.plus4.exe contrib_mazegen.bas -o example.prg yape example.prg == Usando VICE == Per poter eseguire l'esempio, è necessario disporre dell'emulatore VICE, e in particolare che l'eseguibile ''xplus4'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.plus4 contrib_mazegen.bas -o example.prg xplus4 example.prg # Windows ugbc.plus4.exe contrib_mazegen.bas -o example.prg xplus4 example.prg === Dragon 32 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore XROAR, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.d32 contrib_mazegen.bas -o example.bin xroar -rompath (percorso ROM) example.bin # Windows ugbc.d32.exe contrib_mazegen.bas -o example.bin xroar.exe -rompath (percorso ROM) example.bin === Dragon 64 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore XROAR, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.d64 contrib_mazegen.bas -o example.bin xroar -rompath (percorso ROM) example.bin # Windows ugbc.d64.exe contrib_mazegen.bas -o example.bin xroar.exe -rompath (percorso ROM) example.bin === PC128 Olivetti Prodest === Per poter eseguire l'esempio, è necessario disporre dell'emulatore DCMOTO, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi i seguenti comandi: # Linux ugbc.pc128op contrib_mazegen.bas -o example.bin dcmoto example.bin (scegliere example.bin) (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC # Windows ugbc.pc128op.exe contrib_mazegen.bas -o example.bin dcmoto example.bin (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC === Thomson MO5 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore DCMOTO, e in particolare che l'eseguibile ''x64sc'' sia accessibile. Digitare quindi i seguenti comandi: # Linux ugbc.mo5 contrib_mazegen.bas -o example.bin dcmoto example.bin (scegliere example.bin) (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC # Windows ugbc.mo5.exe contrib_mazegen.bas -o example.bin dcmoto example.bin (scegliere BASIC 128) CLEAR,&H2FFF: LOADM"CASS:",R: EXEC === Commodore VIC-20 === Per poter eseguire l'esempio, è necessario disporre dell'emulatore XEMU, e in particolare che l'eseguibile ''xmega65'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.vic20 contrib_mazegen.bas -o example.prg xvic --memory 24k example.prg # Windows ugbc.vic20.exe contrib_mazegen.bas -o example.prg xvic --memory 24k example.prg === ZX Spectrum === Per poter eseguire l'esempio, è necessario disporre dell'emulatore Speccy, e in particolare che l'eseguibile ''speccy'' sia accessibile. Digitare quindi il seguente comando: # Linux ugbc.zx contrib_mazegen.bas -o example.tap Speccy example.tap # Windows ugbc.zx.exe contrib_mazegen.bas -o example.tap Speccy example.tap === ColecoVision === Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore openMsx oppure il BlueMSX, e in particolare che il suo eseguibile sia accessibile. Dopo di che, digita questo comando sulla linea di comando: == openMSX == # Linux ugbc.coleco contrib_mazegen.bas -o example.rom openmsx -machine \"COL - ColecoVision\" -cart example.rom # Windows ugbc.coleco.exe contrib_mazegen.bas -o example.rom bluemsx -machine \"COL - ColecoVision\" example.rom == blueMSX == # Linux ugbc.coleco contrib_mazegen.bas -o example.rom bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom # Windows ugbc.coleco.exe contrib_mazegen.bas -o example.rom bluemsx /machine \"COL - ColecoVision\" /rom1 example.rom === SEGA SC-3000 === Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore BlueMSX, e in particolare che il suo eseguibile sia accessibile. Dopo di che, digita questo comando sulla linea di comando: # Linux ugbc.sc3000 contrib_mazegen.bas -o example.rom bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom # Windows ugbc.sc3000.exe contrib_mazegen.bas -o example.rom bluemsx /machine \"SEGA - SC-3000\" /rom1 example.rom === SEGA SG-1000 === Per compilare e mandare in esecuzione l'esempio, hai bisogno di avere l'emulatore BlueMSX, e in particolare che il suo eseguibile sia accessibile. Dopo di che, digita questo comando sulla linea di comando: # Linux ugbc.sg1000 contrib_mazegen.bas -o example.rom bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom # Windows ugbc.sg1000.exe contrib_mazegen.bas -o example.rom bluemsx /machine \"SEGA - SG-1000\" /rom1 example.rom ==== PROBLEMI? ==== Se hai trovato un problema nel cercare di eseguire questo esempio, se pensi che ci sia un bug o, più semplicemente, vorresti che fosse migliorato, [[https://github.com/spotlessmind1975/ugbasic/issues/new?title=MIGLIORARE VARI ALTRI CONTRIBUTI GENERATORE DI LABIRINTI|apri una segnalazione]] su GitHub per questo specifico esempio. Grazie!===== POWERED BY ===== [[:it:ugbasic:user:examples|{{ :ugbasic:user:logo-ugbasic.png?nolink&600 |}}]]