Benvenuto Visitatore(Log In|Registrati)

4 Pagine V   1 2 3 > »   
Reply to this topicStart new topic
> Traduzione di "MANOR" in BASIC (MANIERO), Ultimo della serie "the sumer game": SFIDA ACCETTATA!
TheRuler
messaggio10 Aug 2018, 17:11
Messaggio #1



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




******************
Traduzione pubblicata!
******************



Salve ragazzi, ho finalmente messo le mani su quasto mio vecchio progetto nel cassetto ed ho cominciato a tradurlo.
Procedendo col codice ho trovato utile inserire alcune cose pre rendere più piacevole l'esperienza come stringhe colorate in base al tipo di informazione data dal gioco (ad esempio, Le descrizioni in verde, i suggerimenti del consigliere in giallo, le statistiche in bianco ecc...) inoltre ho introdotto il tempo trascorso, per avere al termine di gioco la statistica degli anni passati che non guasta.
Ad ogni pagina ho indicato i valori delle cose che servono maggiormente per prendere decisioni (acri di terra, moggi di grano e fiorini) e ad ogni anno un riepilogativo più completo.


Avendo aggiunto quello che ho in magazzino ogni volta mi sono accorto di un bug. Il calcolo delle tasse era sbagliato e sto cercando di risolverlo ma ho un piccolo problema con una routine che mi sta facendo uscire pazzo.



questa è la porzione incriminata:
CODICE
1270 GOSUB 2770:TP=RND*.5+.1:CLS:PRINT:COLOR 7,0:PRINT "Disponi di"LE"acri nel tuo latifondo,"G"moggi di grano e"P"Fiorini.":PRINT:COLOR 6,0:PRINT "Lo sceriffo del Re e' arrivato al tuo maniero per la riscossione.":PRINT
1280 KT=1:IF G+P*5>800 THEN KT=KT+(G+P*5-800)/500:IF KT=>2 THEN PRINT "Le tasse sono alte quest'anno, mio Signore.":PRINT
1290 PRINT "Tasse gravanti sul tuo maniero:":TL=ABS(INT(LE*.15*TP*KT/5)):TL1=ABS(INT(LE*.15-TL*5+.5)):PRINT " Tasse per la tua terra:",TL"fiorini,"TL1"moggi di grano"
1300 TH=HE1*.15*KT:TH1=ABS(INT(TH*TP/5+.5)):PRINT " Tasse per il tuo raccolto:",TH1"fiorini,"ABS(INT(TH-TH1*5))"moggi di grano"
1310 GOSUB 2770:MT=INT(RND*40+KT/2+PTF/2):MT1=INT(MT*TP/5):PRINT " Tasse varie ed eventuali:",MT1"fiorini,"INT(MT-MT1*5)"moggi di grano"
1320 TTL=INT(TL+TH1+TI1):TTT=INT(TL1+(TH-TH1*5)+(TI-TI1*10)+.5):PRINT " Totale tasse:",TTL+MT1"fiorini,"TTT+INT(MT-MT1*5)"moggi di grano.":P=P-TTL:G=G-TTT
1330 IF MT>0 THEN CT=0:PRINT:COLOR 14,0:PRINT "Signore, desidera occultare i"MT1"fiorini e i"MT-MT1*5"moggi":INPUT "riservati per le Varie ed eventuali (s/n)";X$:IF LEFT$(X$,1)<>"N" AND LEFT$(X$,1)<>"n" THEN GOTO 1350 ELSE GOTO 1340
1340 P=P-MT1:G=G-MT-MT1*5:CT=MT:PRINT:COLOR 2,0:PRINT "Lo sceriffo non riscontra alcuna anomalia e prende commiato."
1350 IF CT>1 THEN 1370 ELSE GOSUB 2770:IF RND*1>.65 THEN PRINT:PRINT "Lo Sceriffo non ci ha scoperto, sua Eccellenza!":PRINT:PRINT:GOTO 1370
1360 GOSUB 2770:PTF=INT(RND*CT+1)*2:COLOR 6,0:PRINT " Lo sceriffo durante l'ispezione trova"PTF/2"moggi occultati.":PRINT " La lealta' verso il tuo Re vacilla, tasse raddoppiate per l'anno prossimo.":PRINT:PRINT:PFF=PFF+PTF/2
1370 IF P<0 THEN G=G+P*6:COLOR 6,0:PRINT " Hai dovuto pagare"INT(-P*5.9+.5)"moggi di grano":PRINT " non avendo i"INT(-P+.5)"fiorini, al cambio in perdita.":PRINT:P=0:GOTO 1390
1380 IF G<0 THEN P=P+G/4:COLOR 6,0:PRINT " Hai dovuto pagare"INT(-G/4.1+.5)"fiorini":PRINT " non avendo i"INT(-G+.5)"moggi, al cambio in perdita.":PRINT:G=0
1390 IF G>0 THEN COLOR 2,0:PRINT "Sono presenti"G"moggi di grano nei tuoi magazzini.":IF P>0 THEN PRINT "Disponi di"P"fiorini nella tua tesoreria."
1400 IF G<1 AND P>0 THEN COLOR 6,0:PRINT "Nella tesoreria sono presenti solamente"INT(P)"fiorini, Sua Eccellenza."
1410 IF G<1 AND P<1 THEN COLOR 14,0:PRINT "Siamo in debito con il Re, Sua Eccellenza!"


e questo l'output:
CODICE
Disponi di 75 acri nel tuo latifondo, 936 moggi di grano e 22 Fiorini.          
                                                                                
Lo sceriffo del Re e' arrivato al tuo maniero per la riscossione.              
                                                                                
Tasse gravanti sul tuo maniero:                                                
Tasse per la tua terra:     0 fiorini, 11 moggi di grano                      
Tasse per il tuo raccolto:  4 fiorini, 96 moggi di grano                      
Tasse varie ed eventuali:   0 fiorini, 24 moggi di grano                      
Totale tasse:               4 fiorini, 132 moggi di grano.                    
                                                                                
Signore, desidera occultare i 0 fiorini e i 24 moggi                            
riservati per le Varie ed eventuali (s/n)? n                                    
                                                                                
Lo sceriffo non riscontra alcuna anomalia e prende commiato.                    
Sono presenti 804 moggi di grano nei tuoi magazzini.                            
Disponi di 18 fiorini nella tua tesoreria.                                      
                                                                                
Desidera dichiarare guerra a qualcuno (s/n)?


in pratica puoi decidere di nascondere allo sceriffo le "varie ed eventuali" che hai raccolto dal tuo popolo nell'anno.
Ma il calcolo va bene solo il primo anno, dal successivo aggiunge la multa che dovrebbe essere applicata solo quando fai il furbo. Come l'ho messa io CT>1 va bene ma quando scegli no e vieni beccato dallo sceriffo, egli trova sempre e solo 1 moggio, ma dovrebbe essere un numero casuale tra 1 e x. Con X dipendente dalla variabile MT.



questo il codice originale:
CODICE
1270 PRINT:CLS:GOSUB 2770:TP=RND*.5+.1:COLOR 6,0:PRINT:PRINT "The King's Sheriff has arrived at the manor.":PRINT
1280 KT=1:IF G+P*5>800 THEN KT=KT+(G+P*5-800)/500:IF KT=>2 THEN PRINT "Taxes are high this year, my lord.":PRINT
1290 PRINT "Taxes to your estates:":TL=ABS(INT(LE*.15*TP*KT/5)):TL1=ABS(INT(LE*.15-TL*5+.5)):PRINT " Tax on your land:",TL"pounds,"TL1"bushels of grain"
1300 TH=HE1*.15*KT:TH1=ABS(INT(TH*TP/5+.5)):PRINT " Tax on your harvest:",TH1"pounds,"ABS(INT(TH-TH1*5))"bushels of grain"
1310 GOSUB 2770:MT=INT(RND*40+KT/2+PTF/2):MT1=INT(MT*TP/5):PRINT " Miscellaneous:",MT1"pounds,"INT(MT-MT1*5)"bushels of grain"
1320 TTL=INT(TL+TH1+TI1):TTT=INT(TL1+(TH-TH1*5)+(TI-TI1*10)+.5):PRINT "  Total Taxes:",TTL+MT1"pounds,"TTT+INT(MT-MT1*5)"bushels of grain.":P=P-TTL:G=G-TTT
1330 IF MT>0 THEN CT=0:PRINT "Shall I cover up the"MT1"pounds and"MT-MT1*5"bushels":INPUT " in miscellaneous taxes";X$:IF LEFT$(X$,1)<>"N" AND LEFT$(X$,1)<>"n" THEN PRINT:GOTO 1350
1340 P=P-MT1:G=G-MT-MT1*5:CT=MT:PRINT
1350 IF CT<1 THEN 1370 ELSE GOSUB 2770:IF RND*1>.65 THEN PRINT " He didn't catch us, your excellency.":PRINT:PRINT:GOTO 1370
1360 GOSUB 2770:PTF=INT(RND*CT+1)*2:PRINT " He found"PTF/2"bushels missing.":PRINT:PRINT:PFF=PFF+PTF/2
1370 IF P<0 THEN G=G+P*6:PRINT "You've had to spend"INT(-P*5.9+.5)"bushels of grain":PRINT "in place of"INT(-P+.5)"pounds, at a loss.":PRINT:P=0:GOTO 1390
1380 IF G<0 THEN P=P+G/4:PRINT "You've had to spend"INT(-G/4.1+.5)"pounds sterling":PRINT "in place of"INT(-G+.5)"bushels, at a loss.":PRINT:G=0
1390 IF G>0 THEN PRINT "You have"G"bushels of grain in your storehouses":IF P>0 THEN PRINT " and"P"pounds sterling left in your treasury"
1400 IF G<1 AND P>0 THEN PRINT "We have only"INT(P)"pounds remaining, your excellency."
1410 IF G<1 AND P<1 THEN PRINT "We are in debt, your excellency!"


La riga 2770 è un generatore casuale

2770 RANDOMIZE(VAL(RIGHT$(TIME$,2))):RETURN

Oltre tutto c'è la questione del raddoppio delle tasse l'anno successivo se vieni beccato immagazzinata nella variabile PTF che modifica PFF, utile solo a fine partita.
CODICE
3560 CLS:PRINT"  THE KING'S TAXES"
3561 PRINT"The King's sheriff arrives in town and figures out your taxes."
3570 PRINT"They consist of a tax on your land, your harvest, your income"
3580 PRINT"(taxes to your population etc.), and on all miscellaneous"
3590 PRINT"factors.  You might be able to get away with covering up the"
3600 PRINT"miscellaneous tax, but if you are caught the king doubles it"
3610 PRINT"next year.  This also decreases his confidence in you as a"
3620 PRINT"loyal subject."


Qualcuno in grado di darmi una mano che mastichi BASIC e MATEMATICA? ;-)
Files allegati
File Allegato  MANOR_ITA.txt ( 41.15k ) Numero di download: 1
File Allegato  MANOR_ORIGINAL.txt ( 29.2k ) Numero di download: 4
 


--------------------
 
Alpobemp
messaggio10 Aug 2018, 22:07
Messaggio #2



Gruppo icone

Gruppo: IAGTG Member
Messaggi: 2.518
Iscritto il: 1 June 05
Da: Roma
Utente Nr.: 1.733
BGE Princess Maker 2
Playing Sci Studio 3+
Conquests of Camelot
Armikrogoebiuseffect Chapters

SO Windows7

OGI Supporter


Spolveratore (2)


Ti ho seguito fino ad un certo punto , ma la faccenda della traduzione mi ha fuorviato.

Mi spiego.

Il medesimo - chiamiamolo bug - bug ce l'hai nella versione inglese originale o no?

Ciao,
Alberto


--------------------
 
TheRuler
messaggio10 Aug 2018, 22:18
Messaggio #3



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Sì Alpo, è presente nella versione originale.
Per rendertene conto però devi aggiungere una stringa che ti faccia vedere nella stessa schermata lo stato delle tue finanze in modo da poter verificare.

Dove vuoi ma dopo CLS nella riga 1270

PRINT LE"acres,"G"Bushels,"P"Pounds."


--------------------
 
DK
messaggio11 Aug 2018, 12:23
Messaggio #4



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




Il problema è questo.
CODE
1350 IF CT>1 THEN 1370 ELSE GOSUB 2770:IF RND*1>.65 THEN PRINT:PRINT "Lo Sceriffo non ci ha scoperto, sua Eccellenza!":PRINT:PRINT:GOTO 1370
1360 GOSUB 2770:PTF=INT(RND*CT+1)*2:COLOR 6,0:PRINT " Lo sceriffo durante l'ispezione trova"PTF/2"moggi occultati.":PRINT " La lealta' verso il tuo Re vacilla, tasse raddoppiate per l'anno prossimo.":PRINT:PRINT:PFF=PFF+PTF/2
1370 IF P<0 THEN G=G+P*6:COLOR 6,0:PRINT " Hai dovuto pagare"INT(-P*5.9+.5)"moggi di grano":PRINT " non avendo i"INT(-P+.5)"fiorini, al cambio in perdita.":PRINT:P=0:GOTO 1390

Nella tua versione, se CT è maggiore di 1, va diretto alla riga 1370.
Altrimenti (quindi CT è minore o uguale ad 1) prosegue.

Ovvio che il numero più grande che si ritrova in questo punto sarà 1, per cui, se arrivi alla riga che lo sceriffo ti becca, il calcolo dei PTF sarà:
RND (numero a caso tra 0,1 e 1 se non ricordo male), quindi la probabilità che esca 1 è ridottissima
moltiplicato per CT (che se va bene è 1, oppure potrebbe essere 0,x) darà un numero intero 1 o 2 (raro)
moltiplicato per 2 darà 2 o 4 (raro)
quindi, nella successiva divisione per 2, al massimo avremo 1 o 2 come valori di moggi occultati (molto probabilmente quasi sempre 1).

Per cui, la condizione che c'è nel codice originale è corretta, se CT è maggiore o uguale ad 1 (quindi 1 o più) allora fa tutti quei calcoli e sicuramente possono uscire valori che vanno da almeno 1 in su come moggi occultati.
Però, se te dici che esce sempre uno, allora è il calcolo di CT (che poi è MT) che ha qualcosa che non va.

P.S. La riga 2770 è l'inizializzazione del generatore casuale, dandogli come base l'ora attuale (in realtà il secondo), in modo che poi il generatore (RND) dia valori abbastanza casuali.
 
TheRuler
messaggio12 Aug 2018, 12:00
Messaggio #5



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Grazie per averci guardato DK, ero arrivato alla stessa conclusione ma non capivo perché prima dei calcoli mettesse CT=0 e dopo CT=MT.
Perché CT è nel calcolo del PTF (la lealta' verso il Re) che IF MT>0 THEN CT=0 e così facendo l'anno successivo applica o meno il raddoppio delle tasse VARIE con PTF=INT(RND*CT+1)*2 PTF usato per calcolare solo le tasse VARIE non prima del giro (anno) successivo in 1310

1310 GOSUB 2770:MT=INT(RND*40+KT/2+PTF/2):MT1=INT(MT*TP/5):PRINT " Tasse varie ed eventuali:",MT1"fiorini,"INT(MT-MT1*5)"moggi di grano"
Ho fatto qualche modifica inserendo una seconda volta la stringa di dichiarazione
P=P-MT1:G=G-MT-MT1*5
perché in uno dei due casi veniva saltata e quindi non aggiornava il totale dei moggi in magazzino.

Ora aggiorna bene ma purtroppo ha una componente random che va da 0 a 30. Ho capito dov'è quella componente (serve per calcolare quante Tasse VArie pagare) ma non capisco perché venga inserita anche se decidi di NON ocultare e pagare tutto.


EDIT: Credo di aver risolto! Il problema stava nel fatto che per le Tasse Varie il programmatore avesse scelto di non dichiarare la quantità di moggi da pagare come una variabile ma con il calcolo INT(MT-MT1*5) ripetuto più volte anche nelle dichiarazioni delle costanti.
E' bastato dichiarare MT2 una volta e dare in pasto alle dichiarazioni sempre e solo MT2.

P=P-MT1:G=G-MT2

e una è fatta, ora la routine se decidi di occultare... ;-)

EDIT: fatto. Ora così dovrebbe funzionare tutto. Ho dovuto aggiungere due variabili per il controllo e l'applicazione della sovrattassa (OK e KT1)

Il PRINT "CT"CT"MT"MT"KT"KT"KT1"KT1"GG"GG"GG1"GG1"PTC"PTC"NTC"NTC"P3"P3"PTF"PTF"PFF"PFF"TH"TH"TH1"TH1"TL"TL"TL1"TL1"OK"OK
mi è servito per monitorare le variabili (in versione final, rimuoverò):

CODICE
1270 GOSUB 2770:TP=RND*.5+.1:CLS:PRINT:COLOR 7,0:PRINT "Disponi di"LE"acri nel tuo latifondo,"G"moggi di grano e"P"Fiorini.":PRINT:COLOR 6,0:PRINT "Lo sceriffo del Re e' arrivato nel tuo maniero per la riscossione.":PRINT
1280 KT=1:IF G+P*5>800 THEN KT=KT+(G+RA-GG-PTC-NTC+(P-GG1-P3)*5-500)/500:KT1=ABS(KT+(GG-RA+PTC+NTC+(GG1+P3)*5-500)/500):IF KT1=>2 THEN COLOR 14,0:PRINT "Le tasse saranno alte quest'anno, mio Signore.":COLOR 6,0:PRINT
1290 PRINT "Tasse gravanti sul tuo castello:":TL=ABS(INT(LE*.15*TP*KT/5)):TL1=ABS(INT(LE*.15-TL*5+.5)):PRINT " Tasse per la tua terra:",TL"fiorini,"TL1"moggi di grano"
1300 TH=HE1*.15*KT:TH1=ABS(INT(TH*TP/5+.5)):TH2=ABS(INT(TH-TH1*5)):PRINT " Tasse per il tuo raccolto:",TH1"fiorini,"TH2"moggi di grano"
1310 GOSUB 2770:MT=INT(RND*40+KT1+PTF/2):MT1=INT(MT*TP/5):MT2=ABS(INT(MT+PTF+MT1*5)):PRINT " Tasse per i tuoi guadagni:",MT1"fiorini,"MT2"moggi di grano"
1320 TTL=INT(TL+TH1+TI1):TTT=INT(TL1+TH2+(TI-TI1*10)+.5):PRINT " Totale tasse:",TTL+MT1"fiorini,"TTT+MT2"moggi di grano.":P=P-TTL:G=G-TTT
1330 OK=0:IF MT>0 THEN CT=0:COLOR 14,0:PRINT:PRINT "Signore, desidera occultare i"MT1"fiorini e i"MT2"moggi di grano":INPUT "delle tasse per i Suoi guadagni di quest'anno (s/n)";X$:IF LEFT$(X$,1)<>"S" AND LEFT$(X$,1)<>"s" THEN PRINT:GOTO 1350
1340 CT=MT:PRINT:PRINT "CT"CT"MT"MT"KT"KT"KT1"KT1"GG"GG"GG1"GG1"PTC"PTC"NTC"NTC"P3"P3"PTF"PTF"PFF"PFF"TH"TH"TH1"TH1"TL"TL"TL1"TL1"OK"OK
1350 OK=1:PTF=0:IF CT<1 THEN 1361 ELSE GOSUB 2770:IF RND*1>.65 THEN COLOR 14,0:PRINT "Lo Sceriffo non ci ha scoperto, sua Eccellenza!":PRINT:GOTO 1370
1360 GOSUB 2770:PTF=INT(RND*CT+1)*2:COLOR 6,0:PRINT " Lo sceriffo durante l'ispezione trova"PTF/2"moggi occultati.":OK=0:PFF=PFF+PTF/2:PRINT" La tua lealta' vacilla, come multa ti verranno raddoppiate le tasse l'anno      prossimo."
1361 P=P-MT1:G=G-MT2
1370 IF OK=1 THEN COLOR 6,0:PRINT " Lo sceriffo durante l'ispezione non riscontra alcuna anomalia, si congeda       congratulandosi per la tua lealta' e ti saluta all'anno prossimo."
1371 PRINT "CT"CT"MT"MT"KT"KT"KT1"KT1"GG"GG"GG1"GG1"PTC"PTC"NTC"NTC"P3"P3"PTF"PTF"PFF"PFF"TH"TH"TH1"TH1"TL"TL"TL1"TL1"OK"OK
1375 IF P<0 THEN G=G+P*6:COLOR 6,0:PRINT " Hai dovuto pagare"INT(-P*5.9+.5)"moggi di grano ad un tasso di cambio sconveniente,":PRINT " per coprire il debito di"INT(-P+.5)"fiorini che avevi col Re.":P=0:GOTO 1390
1380 IF G<0 THEN P=P+G/4:COLOR 6,0:PRINT " Hai dovuto pagare"INT(-G/4.1+.5)"fiorini ad un tasso di cambio sconveniente,":PRINT " per coprire il debito di"INT(-G+.5)"moggi di grano che avevi col Re.":G=0
1390 IF G>0 THEN COLOR 2,0:PRINT:PRINT "Sono presenti"G"moggi di grano nei tuoi magazzini.":IF P>0 THEN PRINT "Disponi di"P"fiorini nella tua tesoreria."
1400 IF G<1 AND P>0 THEN COLOR 14,0:PRINT:PRINT "Non abbiamo grano, disponiamo solo di"INT(P)"fiorini, Sua Eccellenza."
1410 IF G<1 AND P<1 THEN COLOR 14,0:PRINT:PRINT "Siamo in debito con il Re, Sua Eccellenza!":PRINT"Se non dovessimo ripagare il debito entro la prossima riscossione, Le ricordo,  che il Re ci applichera' gli interessi."


--------------------
 
TheRuler
messaggio18 Aug 2018, 10:10
Messaggio #6



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Sul sito dell'autore è presente il file INTRO.BAS con le istruzioni, le ho aggiunte direttamente al gioco (adattandole alle modifiche che ho fatto):
Se vi andasse di dargli una letta e indicarmi errori o frasi poco chiare ve ne sarei grato. ;-)

3000 CLS:KEY OFF:COLOR 7,0:PRINT" *** MANIERO ***":PRINT:PRINT " Copyright © Leon Baradat 1986"
3010 PRINT:PRINT
3020 PRINT" Tu sei il conte Vorreimanonposso del medioevo italiano."
3030 PRINT" Il tuo maniero e' uno dei tanti nell'area ed e' circondato"
3040 PRINT" da cinque altri manieri guidati da nobili di vario potere "
3050 PRINT" in senso orario dal piu' debole (5) al piu' forte (1)."
3060 PRINT:PRINT" Cominci con 1385 acri di terra, 60 contadini, 75 servi,"
3070 PRINT" e 15 nobili, per una popolazione totale di 150."
3080 PRINT" 60 di loro sono in buona salute. Questa e' la tua forza"
3090 PRINT" di combattimento. Disponi inoltre di 15 fiorini e una"
3100 PRINT" piccola quantita' di grano rimasto dal raccolto dell'anno"
3110 PRINT" passato (150 moggi, l'unita' di misura corrente)."
3120 PRINT:PRINT" Una volta mostrate a schermo tutte queste informazioni"
3130 PRINT" il computer comincera' il corso degli eventi e delle deci-"
3140 PRINT" sioni che dovrai prendere durante l'anno:"
3150 PLAY "MB T100 O3 L16D L8D L8E L4F L4D L8D L8C L3D L8D L8D L8E L4F L4D L8D L8C L4D L8D L8G L8G L8A L4B L4G L8G L4F L8G L4G L16D L8D L8E L4F L4D L8D L8C L4D L8A L8D L8D L8E L4F L4D L8D L8C L2D"
3160 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 10
3170 CLS:PRINT:PRINT" TASSE"
3180 COLOR 7,0:PRINT:PRINT" Sei tu a decidere quanto tassare i tuoi contadini e nobili,"
3190 PRINT" ma non i tuoi servi, loro coltivano gia' la tua terra come"
3200 PRINT" forma di pagamento. Una tassa del 10% e' considerata giusta"
3210 PRINT" e 30% e' il limite massimo consigliato. A nessuno piace"
3220 PRINT" pagare le tasse e piu' alte sono piu' fame ci sara' in caso"
3230 PRINT" di una cattiva stagione del raccolto e di conseguenza meno"
3231 PRINT" probabilita' di nascite e piu' decessi."
3240 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3000
3250 CLS:PRINT:PRINT" TERRE DA COLTIVARE"
3260 COLOR 7,0:PRINT:PRINT" Dovrai decidere quanti acri del tuo latifondo personale far"
3270 PRINT" coltivare dai servi. Non puoi decidere quanto il tuo popolo"
3280 PRINT" debba coltivare delle proprie terre, lo faranno da soli."
3290 PRINT" Il grano raccolto nei tuoi acri, piu' le tasse, formano il"
3300 PRINT" volume del tuo reddito. Ricorda che una terra coltivata di"
3310 PRINT" continuo esaurira' la propria fertilita', e' dunque buona"
3320 PRINT" norma ruotare le colture. Lasciare incolta meta' delle tue"
3330 PRINT" terre ogni anno sara' sufficiente a mantenerle fertili."
3340 PRINT:PRINT" NOTA: Per coltivare la terra e' necessario spendere un mog-"
3350 PRINT" gio di grano per ogni acro. Dovrai dunque possedere"
3360 PRINT" il giusto ammontare prima della semina."
3370 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3170
3380 CLS:PRINT:PRINT" PROMOZIONE DEI CONTADINI"
3390 COLOR 7,0:PRINT:PRINT" Questo e' un modo per incrementare la forza militare del tuo"
3400 PRINT" maniero, promuovendo a nobili, dunque a cavalieri, i tuoi"
3410 PRINT" contadini in buona salute e assegnando loro 5 acri delle tue"
3420 PRINT" terre, 5 fiorini e 15 moggi di grano. Cio' riduce il numero"
3430 PRINT" di contadini in salute e puo' essere un modo costoso di"
3440 PRINT" rinforzare il tuo esercito. Ad ogni modo e' un metodo efficace"
3450 PRINT" e particolarmente utile in caso si voglia tentare di prendere"
3460 PRINT" la terra di un altro nobile con la forza o difendersi da un"
3470 PRINT" attacco."
3480 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3250
3490 CLS:PRINT:PRINT" COMPRAVENDITA TERRENI"
3500 COLOR 7,0:PRINT:PRINT" Occasionalmente un nobile vicino potrebbe voler desiderare di"
3510 PRINT" vendere parte della sua terra in modo da incrementare tempora-"
3520 PRINT" neamente le sue entrate, oppure voler semplicemente aumentare"
3530 PRINT" la superficie del suo maniero durante la stagione buona."
3540 PRINT" Questa non e' pratica comune visto che la terra, essendo la"
3550 PRINT" principale fonte per le entrate, e' molto costosa."
3560 PRINT" Prima di acquistare della terra ricorda che le tasse del Re"
3570 PRINT" arrivano verso meta' anno, e' dunque saggio tenere dei fiorini"
3580 PRINT" da parte, inoltre un'eventuale guerra puo' costare molto caro."
3581 PRINT:PRINT" La terra acquisita a seguito di guerre andra' a far parte dei"
3582 PRINT" tuoi possedimenti e quindi verra' tassata dal Re. Sara' dunque"
3583 PRINT" opportuno mostrarsi generosi verso il popolo ridistribuendo le"
3584 PRINT" terre prima dell'anno successivo per non incorrere in elevati"
3585 PRINT" balzelli."
3590 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3380
3600 CLS:PRINT:PRINT" DISTRIBUZIONE DELLE TERRE"
3610 COLOR 7,0:PRINT:PRINT" I tuoi servi ti presenteranno una mappa dell'area che hanno"
3620 PRINT" compilato per te. Ricorda che le mappe medievali erano grezze"
3630 PRINT" e raramente accurate e questa certo non fa eccezione."
3640 PRINT" Ne verra' mostrato un esempio piu' avanti."
3650 PRINT" La mappa mostra la distribuzione delle terre del tuo maniero"
3660 PRINT" Ad un certo punto potresti (o forse dovresti) aver bisogno di"
3670 PRINT" ridistribuire le terre. La quantita' tipica per ogni servo o"
3680 PRINT" contadino e' di 8.3 acri, 12.3 per ogni nobile e 75 per te"
3690 PRINT" stesso. Questa e' anche la distribuzione iniziale capace di"
3700 PRINT" garantire un giusto raccolto e una buona prosperita'."
3710 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3490
3720 CLS:PRINT:PRINT" LE TASSE DEL RE"
3730 COLOR 7,0:PRINT:PRINT" Lo sceriffo del Re arriva al tuo castello per calcolare le tue"
3740 PRINT" gabelle. Consistono in tasse sulla tua terra, il tuo raccolto,"
3750 PRINT" sui tuoi guadagni (tasse alla popolazione) e altri fattori."
3760 PRINT" Potresti provare a occultare i guadagni derivanti dalle tasse"
3770 PRINT" raccolte durante l'anno dal popolo e riuscire a farla franca"
3780 PRINT" nel caso l'ispezione rilevasse anomalie lo sceriffo, per volere"
3790 PRINT" del Re, sarebbe costretto a raddoppiare le tue tasse per l'anno"
3800 PRINT" successivo. Inoltre diminuirebbe la fiducia che il Re ripone in"
3810 PRINT" te come suddito leale."
3811 PRINT" Se non fossi in grado di pagare le tasse lo sceriffo ti propor-"
3812 PRINT" rebbe ad un tasso di cambio 'conveniente' di saldare con moggi"
3813 PRINT" o fiorini, a seconda del debito contratto. Offerta che potresti"
3814 PRINT" comunque rifiutare, decidendo di accollarti il debito in grano"
3815 PRINT" o denaro."
3816 PRINT" Nel caso tu non possieda ne' abbastanza fiorini ne' abbastanza"
3817 PRINT" moggi, il debito sara' subito applicato dallo sceriffo:"
3818 PRINT:PRINT" 1 fiorino ogni 4 moggi di grano mancanti"
3819 PRINT" 6 moggi di grano ogni fiorino mancante"
3820 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3600
3830 CLS:PRINT:PRINT" GUERRA!"
3840 COLOR 7,0:PRINT:PRINT" Un nobile puo' attaccarne un altro (normalmente un vicino piu'"
3850 PRINT" piccolo e debole) e rubare o perdere terre. Qualcuno potrebbe volerti"
3860 PRINT" attaccare, nel caso verresti allertato immediatamente. Puoi tentare"
3870 PRINT" di assoldare mercenari per accrescere la tua forza militare e potres-"
3880 PRINT" ti anche ritirarti nel tuo castello. Ad ogni modo i mercenari sono"
3890 PRINT" costosi e mediocri combattenti perche' non amano correre dei rischi."
3900 PRINT" Ritirarsi nel proprio castello aumenta le possibilita' di vittoria"
3910 PRINT" ma il bottino sara' minore se vinci. Il tuo esercito inoltre"
3920 PRINT" consumera' una grande quantita' di grano durante l'assedio e"
3930 PRINT" potresti morire di fame nel castello se non dovessi avere abbastanza"
3940 PRINT" cibo nelle riserve di grano. Ti sara' presto chiesto se vuoi entrare"
3950 PRINT" in guerra o meno. Se la tua risposta e' si', dovrai decidere chi"
3960 PRINT" attaccare e se assoldare mercenari. Il tuo esercito verra' radunato"
3970 PRINT" e dopo aver ascoltato le impressioni dei tuoi nobili e del popolo"
3980 PRINT" ti verra' data la possibilita' di ripensarci ed eventualmente"
3990 PRINT" rinunciare all'attacco all'ultimo minuto, altrimenti suoneranno"
4000 PRINT" la carica e invaderanno... quando attacchi qualcuno, si presuppone"
4010 PRINT" che questi si ritiri nel proprio castello, con tutti gli effetti"
4020 PRINT" precedentemente descritti."
4030 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3720
4040 CLS:PRINT:PRINT" EVENTI CASUALI"
4050 COLOR 7,0:PRINT:PRINT" Circa a metà anno potrebbero accadere alcuni eventi che ridurranno"
4060 PRINT" le tue scorte di grano. Incendi, furti e altre calamita' naturali."
4070 PRINT" All'inizio dell'anno verra' proposta l'assunzione di un guardiano"
4080 PRINT" dei magazzini che vigilera' tutto l'anno affinche' le tue preziose"
4090 PRINT" riserve di grano stiano al sicuro. Ovviamente un esborso maggiore"
4100 PRINT" garantira' una presenza piu' attenta e costante del guardiano"
4110 PRINT" sull'area ma mai la certezza che non accada qualcosa."
4120 PRINT" Queste sono le opzioni (tra parentesi il compenso annuo richiesto"
4130 PRINT" e la probabilita' di presenza attenta nell'area):"
4140 PRINT" - Protezione dei tuoi servi","(0 fiorini - 20%)"
4150 PRINT" hanno gia' il loro lavoro, non gli si puo' chiedere molto."
4160 PRINT" - Gavino Dietisalvi",,"(1 fiorino - 35%)"
4170 PRINT" ama di sicuro piu' il tepore delle taverne che il lavoro."
4180 PRINT" - Guido Buonagiunta",,"(2 fiorini - 50%)"
4190 PRINT" sveglio un giorno, addormentato l'altro."
4200 PRINT" - Aldobrandino Bonensegna",,"(3 fiorini - 65%)"
4210 PRINT" valente lavoratore con grande spirito d'iniziativa."
4220 PRINT" - Ugolino Benecasa",,"(4 fiorini - 80%)"
4230 PRINT" gli affideresti le chiavi di una cintura di castita'."
4240 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 3830
4250 CLS:PRINT:PRINT" RIVOLTE, COSPIRAZIONI E PESTE"
4260 COLOR 7,0:PRINT:PRINT" Possono accadere tante altre cose al tuo maniero. Se i tuoi contadini"
4270 PRINT" fossero abbastanza arrabbiati potrebbero rivoltarsi, i tuoi nobili di"
4280 PRINT" norma dovrebbero essere in grado di gestirli. Se fossero invece loro"
4290 PRINT" non gradire il modo con cui gestisci il maniero, avrebbero di sicuro"
4300 PRINT" i loro modi per fartelo capire ed eventualmente toglierti di mezzo."
4305 PRINT" Una sera potresti trovarti la cena avvelenata (anche se non tutte le"
4310 PRINT" volte potrebbe trattarsi di un veleno letale)."
4320 PRINT" Inoltre, c'e' sempre una piccola probabilita' che scoppi la peste."
4330 PRINT" Puo' colpire il tuo maniero o quelli vicini o magari risparmiare"
4340 PRINT" l'intera area. Nulla e' scontato e i rapporti delle terre vicine non"
4350 PRINT" sono piu' che voci e dunque non devono sempre essere ascoltate."
4360 PRINT" Ricorda che se il tuo maniero venisse colpito dalla peste la probabi-"
4370 PRINT" lita' accada lo stesso anche a te e' alta..."
4380 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 4040
4390 CLS:PRINT:PRINT" LA MAPPA"
4400 COLOR 7,0:PRINT:PRINT" Nella prossima schermata verra' disegnata la mappa tipica che"
4410 PRINT" potrai consultare durante tutta la partita. Verra' presentata"
4420 PRINT" ogni anno almeno una volta a meno che non cambino i confini a"
4430 PRINT" seguito di guerre o compravendite pacifiche di terreno."
4440 PRINT" Bastera' spostare il cursore con le frecce direzionali,"
4450 PRINT" spostarsi sul riquadro che si desidera acquistare o vendere e"
4460 PRINT" premere invio o spazio."
4470 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 4250
4480 FOR A=1 TO 10:FOR B=1 TO 23:T(A,B)=176:NEXT:NEXT:FOR A=17 TO 22:FOR B=1 TO 40:T(A,B)=178:NEXT:NEXT
4490 FOR A=1 TO 5:FOR B=24 TO 40:T(A,B)=8:NEXT:NEXT:FOR A=9 TO 18:FOR B=30 TO 40:T(A,B)=15:NEXT:NEXT
4500 FOR A=9 TO 16:FOR B=16 TO 29:T(A,B)=219:NEXT:NEXT:FOR A=11 TO 18:FOR B=1 TO 15:T(A,B)=177:NEXT:NEXT:FOR A=10 TO 12:T(A,15)=219:NEXT:FOR A=1 TO 10:T(11,A)=176:NEXT
4510 FOR A=12 TO 15:T(18,A)=178:NEXT:FOR A=7 TO 8:FOR B=24 TO 31:T(A,B)=8:NEXT:NEXT:FOR A=38 TO 40:T(8,A)=15:NEXT:FOR A=24 TO 40:T(6,A)=8:NEXT:FOR A=16 TO 27:T(17,A)=219:NEXT
4520 FOR A=7 TO 8:FOR B=32 TO 40:T(A,B)=15:NEXT:NEXT:FOR A=32 TO 40:T(19,A)=15:NEXT:T(7,32)=8:T(17,28)=15:T(17,29)=15:FOR A=36 TO 40:T(20,A)=15:NEXT:FOR A=38 TO 40:T(21,A)=15:NEXT
4530 CLS:FOR A=1 TO 22:FOR B=1 TO 40:PRINT CHR$(T(A,B));:NEXT:PRINT:NEXT
4540 LOCATE 3,10:PRINT "Duca":LOCATE 4,11:PRINT "di":LOCATE 5,7:PRINT "Cinturanera"
4550 LOCATE 3,27:PRINT "Visconte di":LOCATE 4,27:PRINT "Comesichiama"
4560 LOCATE 14,4:PRINT "Barone di":LOCATE 15,4:PRINT "Tispiezzo-":LOCATE 16,6:PRINT"indue"
4570 LOCATE 12,19:PRINT "Conte di":LOCATE 13,19:PRINT "Vorreima-":LOCATE 14,19:PRINT "nonposso":LOCATE 15,21:PRINT "(tu)"
4580 LOCATE 11,33:PRINT "Conte":LOCATE 12,35:PRINT "di":LOCATE 13,32:PRINT "Cretin-":LOCATE 14,33:PRINT "burgo"
4590 LOCATE 21,6:PRINT "Marchese di Grandegrosso"
4600 LOCATE 12,42:PRINT "Ogni riquadro equivale a circa 12 acri."
4610 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 4390
4620 CLS:PRINT:PRINT" LEGENDA DEI COLORI"
4630 COLOR 7,0:PRINT:PRINT" Il testo apparira' in colori diversi per meglio identificare"
4640 COLOR 7,0:PRINT" le varie sezioni e risposte da parte del gioco:"
4650 COLOR 2,0:PRINT:PRINT" Le INDICAZIONI ed EVENTI POSITIVI saranno di colore VERDE."
4660 COLOR 7,0:PRINT" Le STATISTICHE saranno di colore BIANCO."
4670 COLOR 14,0:PRINT" Il tuo CONSIGLIERE parlera' in GIALLO."
4680 COLOR 4,0:PRINT" Gli EVENTI NEGATIVI saranno in ROSSO."
4690 COLOR 6,0:PRINT" Le sezioni della GUERRA e delle TASSE saranno in MARRONE."
4700 COLOR 3,0:PRINT" La GESTIONE DELLE TERRE sara' in AZZURRO."
4710 LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 4480
4720 CLS:COLOR 7,0:PRINT:PRINT" NOTE FINALI"
4730 PRINT" In risposta ad una domanda che prevede un si' o un no, non hai"
4740 PRINT" bisogno di digitare tutta la parola, bastera' la lettera 'S' o"
4750 PRINT" 's'. Ogni altra lettera verra' presa come un no, sebbene il"
4760 PRINT" programma sia in grado di prendere come risposta affermativa"
4770 PRINT" anche le seguenti possibili risposte:"
4780 PRINT" 'Si', spazziamoli via dalla faccia della terra!!!'"
4790 PRINT" 'si, voglio aumentare le dannate tasse al 70%!"
4800 PRINT:PRINT" Quando il gioco iniziera' ti verranno forniti:"
4810 PRINT" 150 uomini di cui 60 in salute"
4820 PRINT" 60 contadini"
4830 PRINT" 75 servi"
4840 PRINT" 15 nobili"
4850 PRINT" 150 moggi di grano"
4860 PRINT" 15 fiorini"
4870 PRINT" 1585 Acri di terreno, abbastanza per mantenere te e il popolo"
4880 PRINT" 1 castello per aiutarti a difenderti"
4890 PRINT:PRINT" Sei pronto per l'avventura che ti attende alla sola pressione"
4900 PRINT" di un tasto?":LOCATE 23,35:COLOR 15,0:PRINT"Premi un tasto per continuare o (i)ndietro":X$=INPUT$(1):IF X$="i" THEN 4620 ELSE 65


--------------------
 
chipko
messaggio18 Aug 2018, 16:49
Messaggio #7





Gruppo: Gamer
Messaggi: 607
Iscritto il: 22 September 05
Utente Nr.: 1.831
BGE Monkey Island
SO WinVista




Che gioco è? Con Manor ho trovato troppi risultati diversi
 
TheRuler
messaggio18 Aug 2018, 19:35
Messaggio #8



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




E' un gioco manageriale testuale. Questo.


--------------------
 
TheRuler
messaggio22 Aug 2018, 19:19
Messaggio #9



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Diario di bordo.
Per i registri, il diagramma di flusso aggiustato del calcolo delle tasse in MANOR.
in basso a dx i tre tipi di tassa espressa in fiorini e moggi, per il terreno, il raccolto e i tuoi guadagni personali.

Files allegati
File Allegato  IMG_20180820_094046.jpg ( 475.51k ) Numero di download: 7
 


--------------------
 
chipko
messaggio23 Aug 2018, 06:39
Messaggio #10





Gruppo: Gamer
Messaggi: 607
Iscritto il: 22 September 05
Utente Nr.: 1.831
BGE Monkey Island
SO WinVista




Non sto capendo assolutamente niente ma è evidente che sei molto bravo. n5.gif
Quando hai finito magari faccio un giro di prova.


 
TheRuler
messaggio23 Aug 2018, 12:32
Messaggio #11



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Esagerato, ma grazie. Ho riportato a diagramma per avere meglio chiaro il flusso delle variabili e capire quali e come influenzano le formule.


Piccolo bug che capita rarissimamente, ma capita. Anche nel gioco originale.
Subscript out of range in 2070.


Ad un certo punto del gioco il programma disegna la mappa e posiziona il cursore in riga 13 e colonna 22
File Allegato  2070.jpg ( 338.64k ) Numero di download: 4



CODICE
60 DIM T(22,40)
...
1250 PRINT CHR$(T(A,B));:NEXT:PRINT:NEXT:IF RT=1 THEN 2070
...
2070 RT=0:COLOR CL(B1):LOCATE 12,42:PRINT "Choose which will be transacted":LOCATE 13,44:PRINT "with the "D$(B1)":":LOCATE 15,56:PRINT STRING$(2,SE(B1)):A=13:B=22
2090 A$=INKEY$:IF A$="" THEN 2090
2100 IF LEN(A$)=1 THEN 2150 ELSE A$=RIGHT$(A$,1)
2110 IF A$="K" THEN A$="4" ELSE IF A$="M" THEN A$="6"
2120 IF A$="H" THEN A$="8" ELSE IF A$="P" THEN A$="2"
2130 IF A$="G" THEN A$="7" ELSE IF A$="I" THEN A$="9"
2140 IF A$="O" THEN A$="1" ELSE IF A$="Q" THEN A$="3"
2150 IF A$="1" OR A$="2" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A+1
2160 IF A$="7" OR A$="8" OR A$="9" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A-1
2170 IF A$="9" OR A$="6" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B+1
2180 IF A$="7" OR A$="4" OR A$="1" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B-1
2190 IF VAL(A$)=0 THEN 2210
2200 GOTO 2080


non dovrebbe essere un problema del cursore visto che viene posizionato all'interno dell'array e difatti ho provato a dividere la riga in due così:

CODICE
2070 RT=0:COLOR CL(B1):LOCATE 12,42:PRINT "Choose which will be transacted":LOCATE 13,44:PRINT "with the "D$(B1)":"
2071 LOCATE 15,56:PRINT STRING$(2,SE(B1)):A=13:B=22


e l'errore di subscript è sempre in 2070 e avviene sempre DOPO aver disegnato correttamente la mappa e prima di disegnare il cursore.
La variabile CL è legata al nobile con cui fare la transazione (B1) e ne definisce il colore. Se il nobile è il numero 5 allora CL è bianco ( COLOR 7) ecc...

Ho provato ad aumentare le dimensioni dell'array a 24,80 ma l'errore compare lo stesso.

help?


--------------------
 
DK
messaggio23 Aug 2018, 13:57
Messaggio #12



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




L'errore indica che stai usando un indice al di fuori della dimensione valida. Es. hai un array da 1 a 10 e provi a chiedere l'elemento 12.
Ad occhio, in quella riga, mi pare i colpevoli possano essere COLOR CL(B1) e D$(B1), magari stampa da qualche parte il valore di B1 per vedere se assume valori al di fuori dell'intervallo consentito. Considera che anche valori negativi non vanno bene.
 
TheRuler
messaggio23 Aug 2018, 17:46
Messaggio #13



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Giusto! grande DK.
In effetti va in crash DOPO aver disegnato la mappa e PRIMA di scrivere a destra "Choose..."
Basta che stampi B1 prima di quel COLOR. E poi un po' di betatest.


--------------------
 
TheRuler
messaggio25 Aug 2018, 00:25
Messaggio #14



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Al momento ho stampato tutte le variabili coinvolte nella routine sulla destra. In caso di crash sapremo dunque quale variabile lo ha causato.
File Allegato  maniero_debug.jpg ( 361.05k ) Numero di download: 4


Ho colto l'occasione per risolvere anche una eccezione non gestita dal programma originale.
Quando vuoi vendere o comperare terra il gioco ti fa spostare con i tasti freccia un cursore per selezonare gli acri.
Nella versione originale se esci da uno dei bordi della mappa il gioco va in crash. Sbagliando lo impari così eviti di avvicinarsi ai bordi, ma non mi pareva una scelta elegante quella di lasciare le cose come stavano.
File Allegato  2150.jpg ( 319.14k ) Numero di download: 0
File Allegato  2080.jpg ( 336.23k ) Numero di download: 1

Ho inserito quattro condizioni per cui se il cursore esce dalle coordinate 0-40 orizzontali e 0-23 verticali, le coordinate sono riportate allo stato precedente lo spostamento.

Inoltre lo spostamento del cursore creava un artefatto. La freccina lasciava una traccia verde lungo tutto il percorso. Bug carino ma anche no.
File Allegato  trail.jpg ( 326.48k ) Numero di download: 2

E' bastato intercettare il print del cursore e cambiargli il colore in accordo con la porzione di mappa sottostante.
Ora oltre a non lasciare più traccia, il cursore emette un bip a frequenza bassa se colpisce un bordo mappa.


Per i registri il codice originale:
CITAZIONE
2070 RT=0:COLOR CL(B1):LOCATE 12,42:PRINT "Choose which will be transacted":LOCATE 13,44:PRINT "with the "D$(B1)":":LOCATE 15,56:PRINT STRING$(2,SE(B1)):A=13:B=22
2080 COLOR 2:LOCATE A,B:PRINT CHR$(26)
2090 A$=INKEY$:IF A$="" THEN 2090
2100 IF LEN(A$)=1 THEN 2150 ELSE A$=RIGHT$(A$,1)
2110 IF A$="K" THEN A$="4" ELSE IF A$="M" THEN A$="6"
2120 IF A$="H" THEN A$="8" ELSE IF A$="P" THEN A$="2"
2130 IF A$="G" THEN A$="7" ELSE IF A$="I" THEN A$="9"
2140 IF A$="O" THEN A$="1" ELSE IF A$="Q" THEN A$="3"
2150 IF A$="1" OR A$="2" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A+1
2160 IF A$="7" OR A$="8" OR A$="9" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A-1
2170 IF A$="9" OR A$="6" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B+1
2180 IF A$="7" OR A$="4" OR A$="1" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B-1
2190 IF VAL(A$)=0 THEN 2210
2200 GOTO 2080
2210 IF T(A,B)=SE THEN T(A,B)=SE1:SE2=SE2-1:LOCATE A,B:PRINT CHR$(T(A,B))
2220 IF SE2=>.5 THEN 2080 ELSE CLS:RETURN


e quello modificato (in giallo le modifiche per il cursore, in rosso l'aggiunta delle variabili per il debug):
CITAZIONE
2070 RT=0:A=13:B=22:LO=2:LOCATE 1,52:PRINT "DEBUG":LOCATE 2,52:PRINT "B1:"B1" CL:"CL" CL(BL)"CL(B1)
2071 LOCATE 3,52:PRINT "A:"A" B:"B:LOCATE 4,52:PRINT "T(A,B):"T(A,B):LOCATE 5,52:PRINT "SE1:"SE1:LOCATE 6,52:PRINT "SE2:"SE2:LOCATE 7,52
2072 PRINT "SE:"SE:LOCATE 8,52:PRINT "VAL(A$):"VAL(A$):LOCATE 9,52:PRINT "LT:"LT" LT1:"LT1:LOCATE 10,52:PRINT "AB:"AB" AB1:"AB1

2079 LOCATE 12,50:COLOR CL(B1):PRINT "Seleziona il terreno":LOCATE 13,46:PRINT "per il "D$(B1)":":LOCATE 15,59:PRINT STRING$(2,SE(B1))
2080 IF A<1 THEN SOUND 37,1:A=A+1
2081 IF A>22 THEN SOUND 37,1:A=A-1
2082 IF B<1 THEN SOUND 37,1:B=B+1
2083 IF B>40 THEN SOUND 37,1:B=B-1

2084 COLOR LO:LOCATE A,B:PRINT CHR$(26)
2090 A$=INKEY$:IF A$="" THEN 2090
2100 IF LEN(A$)=1 THEN 2150 ELSE A$=RIGHT$(A$,1)
2110 IF A$="K" THEN A$="4" ELSE IF A$="M" THEN A$="6"
2120 IF A$="H" THEN A$="8" ELSE IF A$="P" THEN A$="2"
2130 IF A$="G" THEN A$="7" ELSE IF A$="I" THEN A$="9"
2140 IF A$="O" THEN A$="1" ELSE IF A$="Q" THEN A$="3"
2150 IF A$="1" OR A$="2" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A+1
2160 IF A$="7" OR A$="8" OR A$="9" THEN LOCATE A,B:PRINT CHR$(T(A,B)):A=A-1
2170 IF A$="9" OR A$="6" OR A$="3" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B+1
2180 IF A$="7" OR A$="4" OR A$="1" THEN LOCATE A,B:PRINT CHR$(T(A,B)):B=B-1
2181 IF T(A,B)=219 THEN LO=2 ELSE IF T(A,B)=176 THEN LO=13 ELSE IF T(A,B)=177 THEN LO=11 ELSE IF T(A,B)=178 THEN LO=14 ELSE IF T(A,B)=15 THEN LO=12 ELSE IF T(A,B)=8 THEN LO=15
2189 LOCATE 3,52:PRINT "A:"A" B:"B:LOCATE 4,52:PRINT "T(A,B):"T(A,B):LOCATE 5,52:PRINT "SE1:"SE1:LOCATE 6,52:PRINT "SE2:"SE2:LOCATE 7,52
2190 PRINT "SE:"SE:LOCATE 8,52:PRINT "VAL(A$):"VAL(A$):LOCATE 9,52:PRINT "LT:"LT" LT1:"LT1:LOCATE 10,52:PRINT "AB:"AB" AB1:"AB1

2191 IF VAL(A$)=0 THEN 2210
2200 GOTO 2080
2210 IF T(A,B)=SE THEN T(A,B)=SE1:SE2=SE2-1:LOCATE A,B:PRINT CHR$(T(A,B))
2220 IF SE2=>.5 THEN 2080 ELSE CLS:RETURN


--------------------
 
TheRuler
messaggio27 Aug 2018, 22:02
Messaggio #15



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Trovato bug anche nel gioco originale. Non so ancora se dipenda dal programma o dall'emulatore.
Mi è capitato diverse volte che andasse in crash dopo una battaglia.

Ho messo dei print in tutte le righe coinvolte nel loop di calcoli (1900-2030).
CITAZIONE
1890 PRINT "Il nemico ha subito"WC"perdite."
1900 PRINT"1";:AB=0:TM=VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60:IF WL(I)=0 THEN ABA=0 ELSE ABA=INT(WL/12)
1910 PRINT"2";:AB1=0:GOSUB 2770:A=INT(RND*21+1):B=INT(RND*40+1):IF T(A,B)<>LT1 THEN 1910 ELSE FOR A1=A-1 TO A+1 STEP 2:FOR B1=B-1 TO B+1 STEP 2:IF A1>22 THEN A1=20
1920 PRINT"3";:IF B1>40 THEN B1=38
1930 PRINT"4";:IF T(A1,B1)=LT THEN T(A,B)=LT:AB1=1
1940 PRINT"5";:IF AB1=0 THEN 1990 ELSE FOR A1=A-1 TO A+1:FOR B1=B-1 TO B+1:IF A1>22 THEN A1=20
1950 PRINT"6";:IF B1>40 THEN B1=38
1960 PRINT"7";:IF T(A1,B1)=LT1 THEN T(A1,B1)=LT:AB1=AB1+1
1970 PRINT"8";:IF AB+AB1=>ABA THEN 2040
1980 NEXT:NEXT
1990 NEXT:NEXT:IF AB1>0 THEN AB=AB+AB1:NS(I)=NS(I)-AB1:IF NS(I)<1 THEN AB=ABA
2000 PRINT"9";:IF (VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60)-TM>.3 THEN AB=ABA:GOTO 1970
2010 PRINT"A";:IF AB<ABA THEN 1910
2020 PRINT"B";:IF J<5 THEN 1440
2030 PRINT"C";:IF GS=1 THEN GS=0:GOTO 1850
2040 GOTO 2340

Un output tipico post battaglia (con i print):
File Allegato  Immagine.jpg ( 413.18k ) Numero di download: 3

Le due volte che mi è ricapitato si è fermato (PC-BASIC IN CRASH) al "9".
2000 PRINT"9";:IF (VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60)-TM>.3 THEN AB=ABA:GOTO 1970
TM è dichiarata una sola volta in 1900:
TM=VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60

Nella routine sopra, che ridisegna i confini e assegna gli acri di terra, l'autore ha messo in mezzo il tempo...
Ho provato con questo programmino per vedere la condizione e,non vorrei dire una corbelleria, credo lo abbia inserito per dare un tempo massimo dopo di che fa uscire il loop.

CITAZIONE
10 CLS:TM=VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60:A1=TIMER
20 A2=TIMER:LOCATE 1,1:PRINT "Attendere..."A2
25 IF (VAL(TIME$)*60+VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))/60)-TM>.3 THEN 30 ELSE 20
30 PRINT "sono passati"A2-A1"secondi"


il tempo massimo è sempre di circa 17 secondi
Credo si possa usare la semplice variabile TIMER come ho fatto nel programmino per calcolare i secondi passati.
Assegno ad A1 il valore di TIMER in quel momento e poi incremento A2. Quando la differenza è 17 mi fermo.

CITAZIONE
10 CLS:A1=TIMER
20 A2=TIMER:LOCATE 1,1:PRINT "Attendere..."A2
25 IF A2-A1>17 THEN 30 ELSE 20
30 PRINT "sono passati"A2-A1"secondi"


Che dite? Il calcolo, per quanto astruso, non mi sembra sopra le possibilità di GW Basic, è probabile che sia un problema di PC-BASIC (anche se il programmino che ho creato non va mai in crash, ma forse è dovuto al fatto che c'è solo quello e non tutto MANIERO dietro)
Testo e se non ci sono anomalie procedo alla semplificazione del calcolo di TM, visto che principalmente per giocare si userà l'emulatore e non l'ambiente GW Basic DOS. Principalmente.


--------------------
 
TheRuler
messaggio29 Aug 2018, 20:57
Messaggio #16



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Non riesco a capire come impostare una condizione. Chiedo aiuto.

Ho bisogno che la variabile PT che rappresenta la percentuale di tasse alla popolazione soddisfi determinate condizioni:
non sia minore di zero, non sia maggiore di 100, se maggiore di 30 chiede conferma ecc... tutte condizioni che possono coesistere, ma se metto in mezzo questa non riesco a trovare la soluzione: se batto invio senza scrivere nulla PT deve mantenere il valore precedente.

Ecco come l'ho buttata giù:
CODICE
720 PRINT "Tasse (scorso anno"STR$(PT)"%) ";:INPUT PT1:IF PT1>0 AND PT1<=30 THEN PT=PT1 ELSE IF PT1=null THEN 721 ELSE IF PT1>100 THEN 720 ELSE IF PT1>30 THEN INPUT " Sicuro (s/n)";A$:IF A$<>"S" AND A$<>"s" THEN 720 ELSE PT=PT1
721 PRINT PT PT1:GOTO 720

Funziona, ma ovviamente non gestisce il valore 0 (minimo 1%) e io devo poter mettere le tasse a zero.
Il fatto è che l'invio genera un valore null, che in fase condizionale è gestito come 0 e questo crea un duplicato.
Idee?


--------------------
 
TheRuler
messaggio31 Aug 2018, 20:31
Messaggio #17



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




l'autore parla del bug in cui mi sono imbatttuto del possibile crash durante l'aggiornamento della mappa (manco fosse apple maps).

CITAZIONE
One issue you're likely to run into if you play for a while is that the game seems to hang sometimes right after a war. It probably hasn't, in fact. Following a war, the game updates the map to reflect the change in land ownership (X conquered N acres from Y). It uses, I think, a fairly inefficient method--selecting a square at random, checking to see if that square is on the border between the two manors, and if so, changing its ownership. This was a simple way to ensure that it would work anywhere on the map, even if the borders got pretty distorted, and it avoided making changes starting from the top right or some other recognizable pattern. The trouble is that it can sometimes take a while to find a square that's along the border. It also happens in rare cases that two formerly neighboring manors have lost their common border, so it won't be able to find qualifying squares in any case. Similarly, there's a rare bug that I never did track down, where one manor will attack another that it never has bordered: the Baron (on the left) attacking the Earl (on the right), for instance. To make sure the game does move on at some point, I added a timer that will eventually make it stop looking for squares and proceed with the game; it times out after a minute or two, I think. (Unfortunately I think there are also some rare instances where this part of the game really does hang, but I've never been able to verify it.)

per ora il mio "workaround" funziona, test hanno dato esito positivo.


--------------------
 
DK
messaggio1 Sep 2018, 09:23
Messaggio #18



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




QUOTE
Funziona, ma ovviamente non gestisce il valore 0 (minimo 1%) e io devo poter mettere le tasse a zero.
Il fatto è che l'invio genera un valore null, che in fase condizionale è gestito come 0 e questo crea un duplicato.
Idee?

Non programmo col gwbasic/basic da oltre 20 anni, quindi la memoria è quella che è blush.gif però, che io ricordi, il null non l'ho mai sentito, sicuro esista?
Comunque, secondo me INPUT restituisce una stringa, quindi se scrivi 0 è diverso da "vuoto", per cui il test lo farei con
IF PT1="" <- qui dovrebbe aver premuto invio senza aver scritto nulla e quindi puoi assegnare il valore dello scorso anno
IF PT1="0" se ha scritto il valore 0
 
TheRuler
messaggio1 Sep 2018, 11:25
Messaggio #19



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Grazie DK, anche per me sono più di 25 anni!;-) Ho provato per curiosità, magari è una funzione di pcbasic ma scrivere PT1=0 o PT1=null funziona uguale.
Per poter assegnare un valore "" o "0" ad una variabile questa deve essere una stringa (PT1$) e comunque viene considerata come testo, non come numero, per poter usare > e < PT1 deve essere una varibile numerica.
Da quello che ho capito e ricordo PT1$ accetta solo =(uguale) o <>(diverso), mentre PT1 accetterebbe anche < o >.
Se provo a mischiare le cose:

INPUT PT1$:IF PT1$="" THEN 730 ELSE IF PT1$<"0" OR PT1$>"70" THEN ...

l'invio me lo prende ed esce dalla condizione, ma se batto qualunque altra cosa da' TYPE MISMATCH.
La cosa che non capisco è perché se metto PT1$<20 me lo accetta senza dare errori ma non fa una mazza.

per usare PT1 come stringa dovrei creare una condizione tipo:
IF PT1$="" THEN 730 ELSE IF PT1$="0" AND PT1$="1" AND PT1$="2" AND PT1$="3" ... AND PT1$="70" THEN
ma verrebbe una riga mostruosa o anche 10 righe, e comunque non gestirebbe i valori DIVERSI da questi (condizione per cui ho un altro output), sono sicuro ci sia un metodo diverso.


Al momento l'ho messa così:

CITAZIONE
720 COLOR 6,0:PRINT "Tasse per i contadini ("STR$(PT)"% lo scorso anno )";:INPUT PT1:IF PT1<0 OR PT1>70 THEN COLOR 14:PRINT "Signore, i suoi contadini non potrebbero sostenere una tale balzello!":GOTO 720
721 IF PT1>30 THEN COLOR 14:INPUT " Ne e' sicuro, Signore (s/n)";A$:IF LEFT$(A$,1)<>"S" AND LEFT$(A$,1)<>"s" THEN 720
730 COLOR 6,0:PRINT "Tasse per i nobili ("STR$(NT)"% lo scorso anno )";:INPUT NT1:IF NT1<0 OR NT1>70 THEN COLOR 14:PRINT "Signore, i suoi nobili non ottempererebbero mai ad una tale gabella!":GOTO 730
731 IF NT1>30 THEN COLOR 14:INPUT " Ne e' sicuro, Signore (s/n)";A$:IF LEFT$(A$,1)<>"S" AND LEFT$(A$,1)<>"s" THEN 730
735 PT=PT1:NT=NT1

non puoi mettere un valore minore di zero o maggiore di 70 e se è maggiore di 30 chiede conferma. Invio e basta mette a zero.



--------------------
 
DK
messaggio1 Sep 2018, 22:08
Messaggio #20



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




Sì, giusto, il $ è per le stringhe.
Allora fai così: l'INPUT lo prendi come stringa in modo da differenziare "0" e "", dopodiché (dopo aver verificato e smistato quelle condizioni), converti il valore da stringa a intero (con VAL) e usi quest'ultima variabile per i confronti di < e >, che altrimenti, con le stringhe, forse non funzionano bene perché credo verificano il codice ascii della lettera e non il numero.
 
TheRuler
messaggio2 Sep 2018, 01:21
Messaggio #21



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




L'uovo di Colombo. Grazie Andrea, mitico.

CODICE
720 LOCATE 22,1:COLOR 6,0:PRINT "Tasse per i contadini ("PT"% lo scorso anno )";:INPUT PT1$:IF PT1$="" THEN 730
721 IF VAL(PT1$)<0 OR VAL(PT1$)>70 THEN COLOR 14:PRINT "Signore, i suoi contadini non potrebbero sostenere una tale balzello!";:LOCATE 22,40:PRINT "                    ";:GOTO 720
722 GOTO 725
723 IF VAL(PT1$)>30 THEN LOCATE 22,54:COLOR 14:INPUT "Sicuro, Signore (s/n)";A$:IF LEFT$(A$,1)<>"S" AND LEFT$(A$,1)<>"s" THEN LOCATE 22,45:PRINT "                                  ":GOTO 720
724 GOTO 726
725 LOCATE 23,1:PRINT "                                                                               ";:GOTO 723
726 LOCATE 22,54:PRINT "                        "
727 PT=VAL(PT1$)
730 LOCATE 23,1:COLOR 6,0:PRINT "Tasse per i nobili ("NT"% lo scorso anno )";:INPUT NT1$:IF NT1$="" THEN 740
731 IF VAL(NT1$)<0 OR VAL(NT1$)>70 THEN COLOR 14:PRINT "Signore, i suoi nobili non ottempererebbero mai ad una tale gabella!";:LOCATE 23,40:PRINT "                    ";:GOTO 730
732 GOTO 735
733 IF VAL(NT1$)>30 THEN LOCATE 23,54:COLOR 14:INPUT "Sicuro, Signore (s/n)";A$:IF LEFT$(A$,1)<>"S" AND LEFT$(A$,1)<>"s" THEN LOCATE 23,42:PRINT "                                    ":GOTO 730
734 GOTO 736
735 LOCATE 24,1:PRINT "                                                                               ";:GOTO 733
736 LOCATE 23,54:PRINT "                        "
737 NT=VAL(NT1$)

I print con gli spazi servono a cancellare da schermo quello che non serve più. Non so se esiste ma sarebbe comodo un LOCATE Y:DELETE LINE




--------------------
 
DK
messaggio2 Sep 2018, 08:14
Messaggio #22



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




Non ricordo per cancellare una riga, forse con un peek direttamente nella memoria video, però, volendo puoi creare una stringa di 80 spazi (anche con un ciclo FOR) e usare quella variabile nelle PRINT, così il codice dovrebbe essere un po' più leggibile.
 
TheRuler
messaggio3 Sep 2018, 10:17
Messaggio #23



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




a volte cancello solo porzioni di 10 caratteri; per come ho posizionato il testo mi serve che sparisca solo quella parte e non tutta la riga, solo 2 volte la riga intera. Potrei fare con la variabile, in effetti non sarebbe male. Devo vedere di standardizzare la porzione da coprire.
Non saprei però come fare con il FOR. Cosa intendi? per ogni carattere che manca fino a fine riga sposto in avanti il cursore e cancello?

Ho una nuova cosina da fare.
Ho creato la tabella degli highscore in un file separato (maniero.hi) così composto:

CODICE
Punti, Nobile, Anno, Eta', Turni, Pop, Acri, Fiorini, Moggi, Morte
619,theruler, 1331, 34, 12, 471, 4393, 670, 19967,avvelenato
78,theruler, 1323, 28, 4, 155, 1155, 27, 1202,avvelenato
41,theruler, 1321, 23, 2, 156, 1165, 29, 930,impiccato
...


CITAZIONE
5309 REM ****** ROUTINE SALVATAGGIO HIGHSCORE RICHIAMATA DA 2980 ******
5310 PRINT:PRINT:COLOR 7,0:INPUT"Immetti il tuo nome (massimo 8 caratteri): ",NO$
5312 OPEN "A",1,"MANIERO2.HI"
5313 PRINT#1,STR$(PUN)","NO$","STR$(AN)","STR$(Y)","STR$(TU)","STR$(150+NAT)","STR$(L)","STR$(FI)","STR$(GT)","MOT$
5322 CLOSE#1:PRINT"Punteggi salvati.":RETURN
2323 REM ****** ROUTINE LETTURA HIGHSCORE RICHIAMATA DA 2980 ******
5324 OPEN "I",1,"MANIERO2.HI"
5325 WHILE NOT EOF(1):INPUT#1,A$,B$,C$,D$,E$,F$,G$,H$,I$,J$
5326 PRINT A$ TAB(7);B$ TAB(17);C$ TAB(23);D$ TAB(29);E$ TAB(36);F$ TAB(41);G$ TAB(47);H$ TAB(56);I$ TAB(63);J$:WEND
5327 CLOSE#1:RETURN


Il comando appende alla fine del file le variabili convertendo le numeriche in testo così evito gli spazi.
In fase di rilettura ristampo tutte le righe in sequenza.
Non ho però ancora trovato il modo di ordinare le righe per punteggio.
Poi non so se conviene farlo fare ad una routine a parte, durante la scrittura o durante la lettura dei dati, cioè lasciare su file i dati a caso e ordinare a video che so, solo i primi 20.


--------------------
 
DK
messaggio3 Sep 2018, 16:23
Messaggio #24



Gruppo icone

Gruppo: Admin
Messaggi: 2.497
Iscritto il: 27 August 04
Utente Nr.: 1.509
BGE Indy and The Last Crusade
SO Windows7

OGI Supporter




QUOTE
Non saprei però come fare con il FOR. Cosa intendi? per ogni carattere che manca fino a fine riga sposto in avanti il cursore e cancello?

Esatto, tipo scrivi uno spazio da colonna 20 a colonna 35, una roba tipo FOR I da ColonnaInizio a ColonnaInizio+lunghezza

QUOTE
Non ho però ancora trovato il modo di ordinare le righe per punteggio.
Poi non so se conviene farlo fare ad una routine a parte, durante la scrittura o durante la lettura dei dati, cioè lasciare su file i dati a caso e ordinare a video che so, solo i primi 20.

Un quick sort per punteggio ovviamente.
Conviene farlo durante la scrittura o la lettura? Con i pc di oggi, non ha importanza, ma, prestazionalmente, conviene farlo nella procedura che viene usata meno. Cioè, se son più le letture che le scritture, conviene che il processo di sort sia fatto in fase di scrittura così quando legge non deve far nulla.
 
TheRuler
messaggio4 Sep 2018, 09:48
Messaggio #25



Gruppo icone

Gruppo: SMod
Messaggi: 11.112
Iscritto il: 20 January 06
Da: Bologna
Utente Nr.: 2.653
Entropologo part-time

BGE AG: Indy3
Arcade: Silpheed
Free Roaming: Shadow of the Colossus
RTS: Praetorians

Playing Magari...
SO Windows7

OGI Supporter




Potrei in fase di lettura fare un check sulla riga X del file, se la variabile PUN è maggiore del primo valore della riga allora manda un RETURN e scrivi la stringona dei punteggi, altrimenti vai alla riga X+1 WHILE EOF(1).

Tutto molto facile... a parole!

CODICE
5310 PRINT:PRINT:COLOR 7,0:INPUT"Immetti il tuo nome (massimo 8 caratteri): ",NO$
5312 OPEN "A",1,"MANIERO2.HI"
5313 PRINT#1,STR$(PUN)","NO$","STR$(AN)","STR$(Y)","STR$(TU)","STR$(150+NAT)","STR$(L)","STR$(FI)","STR$(GT)","MOT$
5322 CLOSE#1:PRINT"Punteggi salvati.":RETURN


--------------------
 

4 Pagine V   1 2 3 > » 
Reply to this topicStart new topic
1 utenti stanno leggendo questa discussione (1 visitatori e 0 utenti anonimi)
0 utenti:

 

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


Versione Lo-Fi Oggi è il: 13th December 2018 - 02:56