Benvenuto Visitatore(Log In|Registrati)

 
Reply to this topicStart new topic
> Traduzione di "MANOR" in BASIC, Ultimo della serie "the sumer game": SFIDA!
TheRuler
messaggio10 Aug 2018, 17:11
Messaggio #1



Gruppo icone

Gruppo: SMod
Messaggi: 10.996
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




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: 0
File Allegato  MANOR_ORIGINAL.txt ( 29.2k ) Numero di download: 0
 


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



Gruppo icone

Gruppo: IAGTG Member
Messaggi: 2.494
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: 10.996
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.478
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: 10.996
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... ;-)


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

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: 17th August 2018 - 13:43