Ready64 Forum

Commodore 64 => Aiuto & Domande => Topic aperto da: Giovanni Casati - 25 Agosto 2017, 14:11:30

Titolo: Help adventure testuale
Inserito da: Giovanni Casati - 25 Agosto 2017, 14:11:30
Ciao a tutti,
sto scrivendo un adventure testuale basato sul libro di Mike Grace Adventure e C64 (che ho scaricato dal vs sito...grazie). Il gioco è su una mappa di 10 x 10 e ho scritto circa un migliaio di righe arrivando a una sessantina di stanze (me ne restano una ventina da fare).
Ora però ottengo spesso un messaggio di errore OUT OF MEMORY ERROR nel blocco di istruzioni che controlla e verifica la stringa di comando inserita dal giocatore.
Non credo sia un problema di eccessive variabili ma forse di GOSUB non appropriati.
Qualcuno sa darmi qualche idea per un debug efficace?

Grazie

Giovanni
Titolo: Re:Help adventure testuale
Inserito da: Raffox - 25 Agosto 2017, 21:58:15
Forse il problema potrebbe risiedere proprio in troppi salti annidati... ma così su due piedi è difficile potersi esprimere con certezza. Occorrerebbe dare uno sguardo al listato.
Titolo: Re:Help adventure testuale
Inserito da: Giovanni Casati - 25 Agosto 2017, 22:18:22
Grazie del suggerimento: adesso mi metto a controllare tutti i GOSUB uno per uno.
Nel caso dovessi essere ancora nelle pesti, ti giro il listato.
Sicuramente uno sguardo "nuovo" aiuta.

Buona notte
Titolo: Re:Help adventure testuale
Inserito da: eregil - 25 Agosto 2017, 23:02:33
L'out of memory dovuto allo stack è un classico. Dovresti capire che si tratta di problemi di stack se la linea in cui dà errore contiene un GOSUB o un FOR. L'errore può essere dovuto tanto all'eccesso di GOSUB senza RETURN (o con uscita dalle subroutine con GOTO saltando il RETURN), quanto all'eccesso di FOR annidati o (di nuovo) da cui non si esce correttamente. Attenzione però: lo stack è condiviso fra le strutture, perciò se l'out of memory avviene su un GOSUB, potrebbe essere colpevole la mancata uscita da un FOR, o viceversa.

Il debug in questi casi è facilitato da accorgimenti che si sarebbero dovuti prendere dall'inizio della stesura di un programma: ad esempio, stabilendo una politica coerente per i numeri di linea delle subroutine, un GOTO fuori posto può saltare maggiormente all'occhio (se ogni subroutine occupa numeri di linea da xyz00 a xyz99 è evidente che non dovrebbero esserci GOTO fuori da questo intervallo). Il programma di esempio (quello grande) del libro di Mike Grace era sufficientemente ben strutturato da questo punto di vista, ma non ricordo se il testo insistesse a sufficienza su questi concetti.

Aggiungo a titolo di curiosità che su CCC (n. 39, pagg. 72-82) comparve un ottimo articolo di Claudio Baiocchi (http://ready64.org/ccc/pagina.php?ccc=39&pag=072.jpg) sulle particolarità dello stack in BASIC. La lettura può risultare un po' ostica per i principianti, ma dall'articolo si evincono perfettamente i "meccanismi" con cui sono gestiti cicli e subroutine. Un listato dimostrativo accluso mostra i limiti reali dello stack sui vari modelli (C64, C16, ecc.).

Infine: non credo che sia il caso dato che realizzi un'adventure, ma anche la definizione di funzioni "troppo lunghe" con DEF FN può dare luogo a problemi di out of memory nel momento in cui la funzione viene richiamata.
Titolo: Re:Help adventure testuale
Inserito da: Raffox - 26 Agosto 2017, 18:52:58
Se volessimo ottimizzare al meglio sarebbe utile tokenizzare sia il parser che le descrizioni delle varie locazioni. Probabilmente si rallenterebbe l'immediatezza della visualizzazione del testo ma almeno si eviterebbe ancora di più il rischio di un "?out of memory error".
Titolo: Re:Help adventure testuale
Inserito da: Giovanni Casati - 09 Settembre 2017, 21:13:10
Eccomi di nuovo...
Ho controllato i GOSUB e sostituito una gran parte con i GOTO visto che era possibile. Adesso il programma gira in maniera solida.
Appena però aggiungo delle nuove variabili all'inizio del programma che servono per le nuove stanze che voglio aggiungere, mi ritorna il malefico OUT OF MEMORY ERROR che non esce su linee con GOSUB o FOR ma esce su linee con istruzione DIM (linee che si trovano all'inizio del listato e che dimensionano le variabili).
Che ne pensate?
Titolo: Re:Help adventure testuale
Inserito da: Raffox - 09 Settembre 2017, 22:31:30
Forse potrebbe esserti d'aiuto una letta a questo libro (http://ready64.org/libri/scheda_libro.php?id_libro=3). Magari trovi qualche utile consiglio tecnico su come inizializzare nel modo migliore un adventure programmato in BASIC.
Titolo: Re:Help adventure testuale
Inserito da: Giovanni Casati - 10 Settembre 2017, 20:59:08
Si in effetti questo è il libro che ho letto prima di cominciare la scrittura del mio adventure.
Rileggendolo il buon Mike Grace consiglia di eliminare ove possibile le istruzione REM.
Facendolo in effetti sono riuscito a inserire le nuove variabili e il programma per ora gira senza problemi: misteri del BASIC...
Titolo: Re:Help adventure testuale
Inserito da: Giovanni Casati - 23 Agosto 2018, 18:30:55
Alla fine, grazie a vari aiuti dal forum, sono riuscito a finire la scrittura dell'adventure su cui mi ero incartato (era la ragione della richiesta di aiuto del post originale).

E' solo parzialmente debuggato quindi chi si volesse cimentare e trovare errori sarebbe il benvenuto.

Allego file prg

Ciao

Giovanni