Autore Topic: Cavendish field  (Letto 173 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Giovanni Casati

  • Neo-iscritto
  • *
  • Post: 48
  • Gioco Preferito: Archon
Cavendish field
« il: 24 Dicembre 2025, 19:54:15 »
Salve ragazzi,
come sempre, le vacanze permettono di rispolverare il buon vecchio C64.
Per tutti quelli che come me sono appassionati di giochi da tavolo di ti tipo militare/tattico, allego il programma Cavendish Field (CVDFD15.PRG e listato in pdf). Il programma in origine apparve sulla collana INPUT (che da poco ho recuperato anche se non in buonissime condizioni) sui numeri 40-41-42-43-44.
E' un programma in cui si gioca contro il computer guidando un esercito (8 pedine) in un ambientazione medievale.
Il programma é tutto in basic e si puó seguirne la logica abbastanza facilmente con il listato sotto gli occhi.
E' parecchio istruttivo e anche non male da giocare.
E' una buona base di partenza che si puo' adattare ad altri scenari.
Essendo in basic, introdurre eventuali modifiche, non é difficile.
Rispetto al listato originale ci sono alcune piccole differenze (non mi piacevano troppo i caratteri programmabili e anche la traduzione delle stringhe dall'inglese non sempre era convincente).
Non ho ancora introdotto l'intelligenza piú sofisticata nelle mosse del computer illustrata nel numero 44 di INPUT pagine 1384-1389 in quanto rallenta di parecchio l'azione.
Mi riprometto di farlo a breve e poi provare a compilare con BLITZ e vedere se la velocitá di gioco rimane accettabile.

Spero possa piacere a qualche appassionato del genere

Buon Natale a tutti gli amici di READY 64

orion70

  • Utente
  • **
  • Post: 116
  • Gioco Preferito: the hobbit
Re:Cavendish field
« Risposta #1 il: 30 Dicembre 2025, 15:57:36 »
Molto carino, grazie per la segnalazione! Istruttivo per il programmatore in erba, e abbastanza divertente da giocare. Grazie se vorrai implementare la "IA" e provare a compilare il programma.

Una curiosità. Nonostante il nome del gioco derivi evidentemente dall'editore della versione inglese originale Marshall Cavendish, ci fu veramente una battaglia di Cavendish Field. Essa avvenne durante la guerra civile inglese a Gainsborough nel 1643. Qui il comandante realista Sir Charles Cavendish fu ucciso in una palude (oggi nota come "Cavendish Bog") dopo la carica dei soldati di Oliver Cromwell.

Allego alcune parti del testo dedicate al gioco, contenute nei numeri 40 e 44 e tradotte da me (beh da ChatGPT ;) ) dall'originale inglese, tanto per capire meglio anche la funzione didattica e il discorso dell'euristica per introdurre una sorta di IA.

Citazione

## IMPOSTAZIONE DEL GIOCO

In questa serie di cinque articoli vedrai cosa comporta la realizzazione di un piccolo wargame chiamato *Cavendish Field*. Si tratta di una battaglia tattica terrestre combattuta tra due eserciti medievali. Tuttavia, il gioco non è ambientato in un periodo storico specifico.

Come la maggior parte dei wargame per computer, *Cavendish Field* mostra una mappa che rappresenta la disposizione dei due eserciti e il terreno. I giocatori (in questo caso tu e il computer) agiscono come comandanti delle proprie unità e devono prendere decisioni strategiche e impartire ordini appropriati ai loro uomini.

In generale, al giocatore viene data la possibilità di impartire nuovi ordini a ogni unità oppure di lasciarla così com’è. Il gioco procede a turni, durante i quali viene organizzata la disposizione delle truppe, che può o meno portare a un conflitto. L’esito di ogni scontro è determinato dal tipo e dalla forza relativa dei combattenti, più una certa dose di fortuna. Il gioco continua finché uno dei due giocatori non riduce le forze dell’altro a un livello insostenibile.

Questo gioco mostrerà continuamente le informazioni grafiche più importanti — la mappa con gli eserciti — ma riserverà anche un’area per visualizzare istruzioni testuali temporanee e messaggi di richiesta.

Abbiamo preferito usare grafica definita dall’utente (UDG) per la visualizzazione della mappa. In questo modo è semplice gestire entrambe le aree dello schermo utilizzando istruzioni di gestione del testo per entrambe.

È necessario sapere cosa rappresentano le UDG. In questo gioco ci sono quattro tipi di terreno: pianure, villaggi, boschi e colline.

Il wargame completo probabilmente non offre ancora una grande sfida. Il programma consente solo movimenti casuali da parte del computer, quindi dopo poche partite è piuttosto semplice batterlo. Praticamente qualsiasi strategia semplice ma sensata risulterà efficace contro il computer, semplicemente perché il computer segue un piano fisso e non reagisce alle tattiche del giocatore.

Quando ti stancherai di vincere ogni volta, la cosa da fare sarà rendere il gioco del computer più forte. Questo significa programmare nuove routine. Tuttavia, uno dei problemi nello scrivere un programma come *Cavendish Field* è la gestione delle limitazioni di memoria, quindi ogni aggiunta deve essere semplice ma efficace.

---

## UN AVVERSARIO PIÙ FORTE

Esistono due approcci per rendere il computer più difficile da battere. L’opzione più semplice è accettare la debolezza delle tattiche del computer e dargli forze più potenti rispetto a quelle del giocatore. Questo approccio è stato adottato in alcuni wargame commerciali perché è di gran lunga il più facile da programmare.

Se vuoi vedere l’effetto di questo approccio semplice, puoi aggiungerlo al programma con una o due sole righe. Tra poco vedrai come affrontare una soluzione più sofisticata al problema. Questa richiede aggiunte diverse, quindi potresti voler continuare a leggere prima, oppure eliminare le righe di “forza extra” dopo averle provate.

---

## INTELLIGENZA MILITARE

Affrontare un avversario che incarna forza bruta e ignoranza non è soddisfacente quanto affrontarne uno, con forze equilibrate, che sia intelligente. Tuttavia, aggiungere intelligenza al gioco del computer è un problema molto più difficile che aggiungere forza.

Si scopre rapidamente che costruire un algoritmo è quasi impossibile. Non esiste un percorso chiaramente definito per nessuna delle due parti — ed è qui che diventano evidenti le differenze tra gli scacchi e i wargame. Negli scacchi non ci sono elementi casuali e tutto ciò che deve essere considerato riguarda le mosse e le relazioni spaziali sulla scacchiera. In un wargame, invece, è quasi certo che ci sia un elemento casuale incorporato, e vi sono diversi tipi di variabili da considerare: armatura, morale, capacità di movimento, numero di unità e così via, tutte influenzano il successo o il fallimento di un esercito. Alcune variabili sono interdipendenti, altre no. E, cosa più importante, nessuno sa con certezza cosa faccia vincere una battaglia. Non si può dire: “Se seguo questo percorso, vincerò”.

Conoscendo come è stato scritto il wargame e le assunzioni fatte, sarebbe teoricamente possibile costruire un algoritmo, ma sarebbe estremamente complesso, rendendo il programma risultante grande e lento. In pratica, la soluzione al problema di un algoritmo ampio, sfavorevole o inesistente è ricorrere alle euristiche.

Un’euristica è semplicemente una “regola pratica” che sembra funzionare in alcune situazioni.

È importante rendersi conto che le euristiche non garantiscono il successo e, in alcune occasioni, possono persino portare a errori disastrosi. Tuttavia, la regola in genere vale la pena di essere provata. In effetti, le euristiche sono esattamente ciò che tutti usano nella vita quotidiana, a causa della complessità di molti problemi che affrontiamo.

Il programma dovrebbe quindi avere un elenco di euristiche integrate, ad esempio:

* Se sei un’unità di arcieri e c’è un’unità nemica a portata, allora spara.
* Se sei coinvolto in una battaglia ma stai perdendo, prova ad andare nella direzione opposta.
* Se sei vicino a un’unità nemica più forte di te, allontanati.
* Se sei vicino a un’unità più debole di te, attaccala.

In quest’ultimo caso, si nota che il computer ha un vantaggio sul giocatore, poiché conosce esattamente la sua forza, mentre il giocatore non conosce quella del computer. Tuttavia, vale la pena consentire al computer di usare questa informazione, perché gli conferisce una maggiore capacità decisionale.

---

## UN APPROCCIO INTELLIGENTE

Basta con la teoria: il computer ha bisogno di un piano generale. Nessuna battaglia viene combattuta senza un piano d’azione. Il piano dipenderà dalle condizioni di vittoria del gioco. Se fosse possibile vincere uccidendo il generale avversario, una possibile strategia sarebbe inviare tutte le unità contro il suo quartier generale. In *Cavendish Field*, invece, la vittoria può essere ottenuta solo uccidendo più nemici di quanti ne uccida l’avversario, quindi il computer deve adottare un piano che porti a questo risultato.

Un metodo semplice per distruggere le truppe nemiche è attaccare unità deboli con forze superiori. Ciò significa che potrebbe essere adottato un piano del tipo: “Attacca solo un avversario più debole di te”. In realtà, questa è una tattica piuttosto complessa da programmare. Può essere semplificata dicendo: “Concentra tutte le forze su una sola casella”. Facendo questo (e supponendo che il giocatore non concentri le proprie forze sulla stessa casella), le forze del computer dovrebbero superare numericamente quelle del giocatore. Una conseguenza di ciò è che altrove le forze del giocatore supereranno quelle del computer — ed è qui che l’euristica fallisce — quindi le altre forze, in inferiorità numerica, dovrebbero evitare il combattimento.

Affinché il giocatore non possa prevedere facilmente il comportamento del computer, quest’ultimo deve avere diverse opzioni a disposizione. Ancora una volta, per semplicità, si può scegliere come casella di concentrazione una occupata da una delle unità del giocatore. Esiste una routine che, a ogni turno, verifica se la casella scelta deve essere cambiata. Questo dovrebbe mantenere il giocatore nell’incertezza sul piano esatto del computer e far sì che le sue forze seguano lo stesso schema generale.

Il secondo aspetto del gioco che deve essere controllato in modo intelligente è l’azione individuale di ciascuna unità. Indipendentemente dal piano generale, ogni unità deve rispondere alla situazione immediata sul campo di battaglia che la circonda. Un’unità non dovrebbe, ad esempio, dirigersi direttamente verso il punto di concentrazione se molti nemici le sbarrano la strada.

Quando il computer impartisce gli ordini, esegue una serie di test. Questi vengono effettuati in un ordine attentamente studiato, tenendo conto di due considerazioni. In primo luogo, i test dovrebbero essere eseguiti il più rapidamente possibile, così da poter terminare la routine non appena viene presa una decisione, senza dover continuare con test inutili. In secondo luogo, i test più importanti dovrebbero essere eseguiti per primi. In caso contrario, il computer potrebbe prendere una decisione basata su un criterio meno rilevante.

Le regole utilizzate nel programma sono le seguenti, elencate dalla più importante alla meno importante:

* Se l’unità è in combattimento e ha vinto il turno precedente, continua con lo stesso ordine. Se questa condizione è vera, nessun’altra regola viene testata.
* Se l’unità è in combattimento ma ha perso il turno precedente, dovrebbe allontanarsi dall’avversario. Questo non è sempre possibile, perché la casella in cui dovrebbe muoversi potrebbe essere già occupata o potrebbe trovarsi ai margini della mappa.
* Se l’unità è composta da arcieri e un bersaglio è a portata, dovrebbe sparare. Inserire questa regola qui garantisce che gli arcieri scelgano sempre l’opzione meno rischiosa di sparare piuttosto che entrare in combattimento corpo a corpo.
* Se c’è un’unità nemica entro la distanza massima di movimento e questa è più debole di te, attaccala. Se invece è più forte di te, ritirati. Questa è una ricerca lunga, perché devono essere considerate tutte le unità nemiche sul campo.
* Muoviti verso la casella di concentrazione.

Anche queste poche regole richiedono un tempo considerevole per essere eseguite e, se vengono testate tutte per ogni unità, il gioco può rallentare sensibilmente. Tuttavia, non preoccuparti: non ci sono le lunghe attese che potresti aver sperimentato in quel gioco.

---

## A TE LA SCELTA

Puoi incorporare una o entrambe le routine aggiuntive — aumento della forza o aumento dell’intelligenza — per migliorare il gioco del computer in *Cavendish Field*, a seconda del livello di avversario che ti senti in grado di affrontare.

La natura stessa delle euristiche implica che le regole pratiche incorporate nel programma non siano necessariamente le migliori in tutte le circostanze. Alcuni giocatori troveranno queste tattiche più facili da aggirare rispetto ad altri.

Solo la sperimentazione può suggerire i compromessi migliori, e potresti voler provare alcune routine diverse: con un po’ di impegno, potresti riuscire a rendere il gioco del computer ancora più efficace.

In realtà non ho trovato istruzioni pratiche più immediate, con i comandi ecc. Probabilmente sono spiegati nei vari numeri dedicati al programma.

Giovanni Casati

  • Neo-iscritto
  • *
  • Post: 48
  • Gioco Preferito: Archon
Re:Cavendish field
« Risposta #2 il: 31 Dicembre 2025, 09:57:54 »
Ciao orion70,
allego il file zip con IA implementata e relativo listato.
Non è stato necessario compilarlo con BLITZ perchè comunque gira abbastanza velocemente.
Ho dovuto togliere tutti i REM per fare spazio perchè non si puo' andare con il basic oltre la locazione 14336 altrimenti si creano conflitti con i caratteri programmabili.
Le linee modificate, rispetto al listato originale, sono:
 - 360, 415, 1665, 1666, 1760.
 - tutte le linee della mossa del computer 2143-2190
 - sono state aggiunte le righe da 3010 a 3260.
Questa è la parte di IA aggiunta.

L'altra opzione è tenere il listato originale e aumentare la forza delle unità del computer di un numero random tra 1 e 100 aggiungendo la riga
665 IF J=8 THEN T(I+J,5)=T(I+J,5)+FNR (100).
Non ho messo nel programma questa riga.
Si puo' ovviamente inserire anche in combinazione con IA nuova per rendere la vita ancora più difficile al giocatore.

Detto questo l'IA nuova non mi convince troppo.
In particolare la sezione 2143-2160.
Giocando un po' vedo che funziona la logica di ammassamento truppe e anche il fuoco degli arcieri quando un' unità del giocatore è a tiro.
Non vedo funzionare molto la logica di attacco di un'unità più forte a una più debole e l'eventuale ritirata in caso di sconfitta.
Devo studiarmelo ancora un pochino e vedere se metterci mano (anche se lo spazio disponibile per modifiche non è tantissimo a causa della dimensione delle matrici).

Buon Anno a tutti gli amici di READY 64

orion70

  • Utente
  • **
  • Post: 116
  • Gioco Preferito: the hobbit
Re:Cavendish field
« Risposta #3 il: 31 Dicembre 2025, 10:29:54 »
Ottimo, grazie davvero e buon anno a te e a tutti gli amici di R64!