{{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 |}}]]