Aiuto - Cerca - Utenti - Calendario
Versione completa: Traduzione di "MANOR" in BASIC (MANIERO)
OldGamesItalia > Traduzioni > Traduzioni in corso
Pagine: 1, 2
TheRuler
******************
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? ;-)
Alpobemp
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
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
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
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
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
Che gioco è? Con Manor ho trovato troppi risultati diversi
TheRuler
E' un gioco manageriale testuale. Questo.
TheRuler
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.
chipko
Non sto capendo assolutamente niente ma è evidente che sei molto bravo. n5.gif
Quando hai finito magari faccio un giro di prova.


TheRuler
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
Clicca per vedere l'allegato


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
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
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
Al momento ho stampato tutte le variabili coinvolte nella routine sulla destra. In caso di crash sapremo dunque quale variabile lo ha causato.
Clicca per vedere l'allegato

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.
Clicca per vedere l'allegato Clicca per vedere l'allegato
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.
Clicca per vedere l'allegato
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
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):
Clicca per vedere l'allegato
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
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
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
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
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
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
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
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
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
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
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
TheRuler
CITAZIONE
Esatto, tipo scrivi uno spazio da colonna 20 a colonna 35, una roba tipo FOR I da ColonnaInizio a ColonnaInizio+lunghezza


Fatto. Mi sto dedicando alla pulizia del codice. Mi sono accorto che a forza di aggiungere feature sto esaurendo lo spazio. Max 60300 Bytes, spazio per variabili e array compreso. Il Qbasic non era così limitato:
CITAZIONE
6012 Y=2:DA=69:GOSUB 8080
...
8080 FOR X=DA TO 80:LOCATE Y,X:PRINT " ";:NEXT:RETURN



Però ovviamente ho un'altra domandona ;-):
Devo convertire una variabile numerica definita in un array all'interno di un ciclo FOR-NEXT, in una stringa.
Ovviamente mi da' Type mismatch:

CITAZIONE
8021 FOR A=1 TO 5:GOSUB 2770:SPA=INT(RND*1+.5):IF SPA=0 THEN SPYA(A)=INT(WL(A)*(RND*.2+.9)) ELSE SPYA(A)="****"
8022 NEXT


sono costretto ad usare numeri:
SPYA(A)=9999 così funziona ma stampa 9999 mentre a me serve un carattere generico tipo xxxx o **** che indichi una "mancanza di dato".

Posso convertire con CVI o MKS$ ma il fatto è che il ciclo FOR non mi prende SPYA(A), che fa parte di un array, come stringa.
So che si può fare ma non trovo la via giusta.
Devo convertire una variabile numerica in testo. Oppure trovare un carattere speciale accettato come numero.

Magari se usassi una variabile temporanea e la convertissi FUORI dal ciclo for?
DK
Ma gli array di stringhe, in basic, non hanno sempre il $ famoso?
SPYA -> array di interi
SPYA$ -> array di stringhe

P.S. Ormai lo puoi riscrivere in QBasic o in Pascal, fai prima blush.gif
TheRuler
Sì è così. Mi serve che una variabile in un array di interi venga trasformata all'occorrenza in una stringa.

CITAZIONE
8011 IF SPY=0 THEN FOR A=1 TO 5:SPYA(A)=9999:SPYF$(A)="********":SPYP(A)=999:NEXT
8012 IF SPY=1 THEN 8021
8013 IF SPY=2 THEN FOR A=1 TO 5:SPYA(A)=INT(WL(A)*(RND*.2+.9)):SPYF$(A)=L$(INT(FF(A)/10)):SPYP(A)=INT(PP(A)*(RND*.2+.9)):NEXT
8014 RETURN
8021 FOR A=1 TO 5:GOSUB 2770:SPA=INT(RND*1+.5):IF SPA=0 THEN SPYA(A)=INT(WL(A)*(RND*.2+.9)) ELSE SPYA(A)=9999
8022 NEXT
8023 FOR A=1 TO 5:GOSUB 2770:SPF=INT(RND*1+.5):IF SPF=0 THEN SPYF$(A)=L$(INT(FF(A)/10)) ELSE SPYF$(A)="********"
8024 NEXT
8025 FOR A=1 TO 5:GOSUB 2770:SPP=INT(RND*1+.5):IF SPP=0 THEN SPYP(A)=INT(PP(A)*(RND*.2+.9)) ELSE SPYP(A)=999
8026 NEXT
8027 RETURN


*(RND*.2+.9) Questo serve a rendere il dato approssimativo, +-10%
a seconda si utilizzino 0, 1 o 2 spie il rapporto cambia. Con 0 è così:

CODICE
1 ░░ Duca Cinturanera       9999 acri (********),  999 abitanti                
2 ▒▒ Barone Tispiezzoindue  9999 acri (********),  999 abitanti                
3 ▓▓ Marchese Grandegrosso  9999 acri (********),  999 abitanti                
4 ☼☼ Conte Vattelapesca     9999 acri (********),  999 abitanti                
5 ◘◘ Visconte Comesichiama  9999 acri (********),  999 abitanti


al posto dei 9 mi piacerebbe usare gli ** o XX come ho potuto fare con SPYF$(A) che è già un array di stringhe.

con 1 invece ogni campo ha una probabilità di essere popolato del 50%, e mi piacerebbe che fosse così:
CODICE
Il rapporto delle nostre spie, Signore:                                        
                                                                                
1 ░░ Duca Cinturanera       **** acri (********),  294 abitanti                
2 ▒▒ Barone Tispiezzoindue  **** acri (a maggese), 139 abitanti                
3 ▓▓ Marchese Grandegrosso  1692 acri (********),  *** abitanti                
4 ☼☼ Conte Vattelapesca     **** acri (a maggese), *** abitanti                
5 ◘◘ Visconte Comesichiama  1214 acri (********),  *** abitanti                
                                                                                
Chi desidera invadere, Eccellenza (1-5)?

Più leggibile.
DK
Non ho capito bene, ma basta crearsi una serie di convenzioni. Es. mi pare che il 9999 non ha senso di esser stampato (o usa un numero che sicuramente non può esserci, tipo -1, non so), e in fase di stampa fai i controlli; se la variabile è uguale a 9999 allora stampi gli * altrimenti stampi il valore contenuto nella variabile.
TheRuler
Alla fine ho deciso per il cambio in fase di print. Non elegantissimo e forse un po' macchinoso ma funziona.

CITAZIONE
2351 CLS:PRINT:PRINT "Il rapporto delle nostre spie, Signore:":PRINT:FOR A=1 TO 5:COLOR CL(A):PRINT A;STRING$(2,SE(A));" "D$(A);:IF SPYA(A)=9999 AND D$(A)<>"provincia" THEN PRINT TAB(32)"#### ";
2352 IF SPYA(A)<>9999 AND D$(A)<>"provincia" THEN PRINT TAB(31)SPYA(A);
2353 IF D$(A)<>"provincia" THEN PRINT "acri ("SPYF$(A)")"TAB(54)"e";
2354 IF SPYP(A)=999 AND D$(A)<>"provincia" THEN PRINT TAB(56)"###";:
2355 IF SPYP(A)<>999 AND D$(A)<>"provincia" THEN PRINT TAB(55)SPYP(A);:
2356 IF D$(A)<>"provincia" THEN PRINT TAB(60)"abitanti" ELSE PRINT
2357 NEXT
...
8010 REM ****** ROUTINE RAPPORTO SPIE RICHIAMATA DA 740 VISUALIZZATA POI DA 2351 ******
8011 IF SPY=0 THEN FOR A=1 TO 5:SPYA(A)=9999:SPYF$(A)="#########":SPYP(A)=999:NEXT
8012 IF SPY=1 THEN 8021
8013 IF SPY=2 THEN FOR A=1 TO 5:SPYA(A)=INT(WL(A)*(RND*.2+.9)):SPYF$(A)=L$(INT(FF(A)/10)):SPYP(A)=INT(PP(A)*(RND*.2+.9)):NEXT
8014 RETURN
8021 FOR A=1 TO 5:GOSUB 2770:SPA=INT(RND*1+.5):IF SPA=0 THEN SPYA(A)=INT(WL(A)*(RND*.2+.9)) ELSE SPYA(A)=9999
8022 NEXT
8023 FOR A=1 TO 5:GOSUB 2770:SPF=INT(RND*1+.5):IF SPF=0 THEN SPYF$(A)=L$(INT(FF(A)/10)) ELSE SPYF$(A)="#########"
8024 NEXT
8025 FOR A=1 TO 5:GOSUB 2770:SPP=INT(RND*1+.5):IF SPP=0 THEN SPYP(A)=INT(PP(A)*(RND*.2+.9)) ELSE SPYP(A)=999
8026 NEXT
8027 RETURN


Output tipico, se un maniero avversario è stato conquistato tolgo tutti i dati (che sarebbero comunque a 0) lasciando solo "provincia"
CODICE
Il rapporto delle nostre spie, Signore:                                        
                                                                                
1 ░░ provincia                                                                
2 ▒▒ Barone Tispiezzoindue    #### acri (#########) e ### abitanti            
3 ▓▓ provincia                                                                
4 ☼☼ Conte Vattelapesca       #### acri (#########) e ### abitanti            
5 ◘◘ Visconte Comesichiama    #### acri (#########) e ### abitanti            
                                                                                
Chi desidera invadere, Eccellenza (1-5, invio per annullare)?
TheRuler
La potenza è nulla senza il controllo (TOTALE)! MUHAHAHAHAHAHA!
Vlad123
Interessante io però ho problemi a giocarci non so proprio come farlo partire su Windows 10! :(
TheRuler
Ciao Vlad! devi usare un interprete. PC-BASIC, funziona più o meno come dosbox.

Una volta avviato:

load "maniero2" [invio]
run [invio]


hai PM
Vlad123
Allora se provo a caricare istruzioni dice che non le trova.
Quindi non so come salvare! biggrin2a.gif
Alla terza partita ho deciso di fare una guerra e ho vibto prendendo un sacco di terra a tispezzo in due.
Sfortunatamente il gioco si blocca dicendo "PC-Basic ha smesso di funzionare" ma che... Nelle partite successive spesso mi dice: sei molto popolare tra i nobili/contadini/servi poi una linea dopo dice sono Inc... Neri e ti attaccano (ma che...) Poi non capisco come funzionano le guerre dopo quell'unica guerra vinta le ho perse tutte! :(
TheRuler
Se non trova le istruzioni non hai copiato tutti e due i file nella dir di PC-BASIC, maniero2.bas e maniero2.int.
Senza leggere le istruzioni in effetti non è facile comprendere a fondo Maniero.

Le variabili in questo gioco sono (contate) 189. I calcoli sono relativamente complessi e quello che succede dipende principalmente dalle scelte che uno fa ma anche da una piccola percentuale di casualità. Tutti i rapporti sono "indicativi", le informazioni giunte all'orecchio del feudatario erano anche create per non scontentarlo... ;-)
E' comunque normale che non si riesca ad accontentare tutti i nobili, uno scontento potrebbe esserci, ed uno socntento che tenta di ucciderti, anche. Gli algoritmi ne tengono conto.

Le guerre si basano su un indice (la variabile ARMY, nel codice). Questo indice è influenzato dal numero di persone in buona salute per ogni casta (contadini, servi, nobili), sono questi che combattono, e dal loro morale. Più i numeri sono alti più si alza l'indice. Inoltre puoi aumentarlo assoldando mercenari.
Il calcolo viene fatto tra l'indicatore avversario e il tuo, più una certa percentuale di casualità.
Considera che gli avversari hanno forze diverse date dal loro popolo e dalle dimensioni del loro castello. in senso orario, dal 5 (debole) al 1 (fortissimo).
Vlad123
Io credevo fosse il 2 il più debole. No li ho messi tutti e due però non me le dà.
TheRuler
Che errore esatto ti esce?
Vlad123
File not found 238
TheRuler
Non esiste la riga 238. Sicuro sia quello l'errore?
Hai messo come ti ho scritto sopra, i due file nella cartella di pc-basic?
Vlad123
Si le ho messe giuro! Appena ho tempo provo il nuovo file!
TheRuler
Cosiglio.

La forza della tua armata e di quelle avversarie sono condensate in un indice (ARMY per te, W(A) per gli altri). Tutti i calcoli eseguiti per la guerra hanno quell'indice come riferimento.
Ho introdotto "le spie" che scoprono (con un margine sul dato del +-10%) il numero di acri, la fertitlità del terreno e il numero di abitanti.
Solo il numero di abitanti è (indicativamente) utile per valutare la probabilità di vittoria in uno scontro (più alto è meglio è) e comunque l'esito di uno scontro ha una bella componente random.
Ad ogni modo più è altro questo indice più è "facile" che si vinca.

Perché la battaglia non sia allo sbaraglio come ora avrei pensato di visualizzare questo indice tra i dati delle spie dei vari manieri in concomitanza con il tuo.

Il problema è che non ho ancora trovato un termine adeguato al contesto storico. Non posso chiamarlo semplicemente "ARMATA" o "FORZA ESERCITO" visto che FORZA: 92 non significherebbe nulla in un "contesto medievale reale". Devo anche capire se è davvero meglio metterlo o meno, d'altra parte il tuo consigliere, prima di suonare il corno della battaglia, ti racconta più o meno lo stato d'animo del popolo e le sue sensazioni...

Una cosa del genere:
CODICE
Il rapporto delle nostre spie, Signore:                                        
                                                                                
1 ░░ provincia                                                                
2 ▒▒ Barone Tispiezzoindue    #### acri (#########) e ### abitanti (125)     <=== l'indice di forza    
3 ▓▓ provincia                                                                
4 ☼☼ Conte Vattelapesca       #### acri (#########) e ### abitanti  (***)     <===  se non scoperto dalle spie
5 ◘◘ Visconte Comesichiama    #### acri (#########) e ### abitanti  FORZA: 75         <=== oppure così        
                                                                                
Chi desidera invadere, Eccellenza (1-5, invio per annullare)?  Tua forza:92
Gwenelan
Siamo felicissimi di annunciare che la traduzione di Maniero è stata completata blush.gif!
TheRuler
Aggiornato alla versione 2.03.
Migliorie cosmetiche varie d'obbbligo e risolto un raro bug originale segnalatomi dall'autore che non avevo gestito.
Era capitato in effetti una sola volta a Boselli:
CITAZIONE
- Poteva capitare che un Nobile già sconfitto (provincia) fosse interessato alla tua terra

Inoltre un bug coperto da spoiler. ;-)

Funfact: L'autore Leon Baradat mi ha chiesto di tradurre in inglese la mia versione per il suo sito. ;-)

CITAZIONE
I was never satisfied with the game's scoring system, so I'm glad you've made some improvements on it. I'll have a look, but I doubt I'll find much wrong with the changes you've made there.

Fixing taxes is probably a good thing; I don't recall how I did that, but it does seem all over the place; I've often wondered about that, but not enough to look into it. I think I must have done a straight random number with it--in which case, it sounds like your plan makes a lot more sense.

I see you've made quite a few improvements to the game. It may take some getting used to, but I think what you've done so far is very good.
selven
Grande rullo vai con la retro ri-traduzione credo che sia un primato anche per ogi ;P
frank_one
Se pure l'autore del gioco approva le tue modifiche e ti chiede di ritradurlo vuol dire che hai fatta davvero un buon lavoro. Complimenti!
selven
rullo la 2.03 mi da errore nella riga 247 se provo ad aprire le istruzioni
CITAZIONE
IF A$="I" OR A$="i" THEN CHAIN "MANIERO2.INT",, ALL
TheRuler
Grazie, ragazzi!

Selven, i due file, MANIERO2.BAS e MANIERO2.INT devono essere nella stessa cartella.
selven
si ho letto, sono in c:\manor tutti e due più il leggimi per lanciare il gioco apro maniero2.bas con pcbasic
TheRuler
Ah, ho capito, lo hai associato a PC-BASIC e lo apri con doppio click, giusto?
Allora devi metterli nella cartella di PC-BASIC.
A quel punto puoi aprirlo con doppio click oppure da dentro PC-BASIC con il comando: LOAD "MANIERO2"

Ho aggiornato il readme
selven
anche mettendolo nella cartella di pcbasic (c:\programmix86\pc-basic-1.2) fa uguale cmq windows 10 non me lo associa faccio tasto destri apri con
Questa è la versione 'lo-fi' del forum. Per visualizzare la versione completa con molte più informazioni, formattazione ed immagini, per favore clicca qui.
Invision Power Board © 2001-2020 Invision Power Services, Inc.