Fondamenti di Intelligenza Artificiale M
A.A. 2016-2017

Fondamenti di Intelligenza Artificiale M

Gioco del Mulino, A.A. 2016--2017

 

Slides relative all'edizione di quest'anno.

 

Link alla competizione dell'anno scorso, con anche il player risultato vincitore.

 


 

  • Indirizzi email per iscrizione ed informazioni: paola.mello@unibo.it, federico.chesani@unibo.it, andrea.galassi7@unibo.it

  • Il sito di riferimento per il regolamento è: https://it.wikipedia.org/wiki/Mulino_(gioco)

  • Esiste un progetto Eclipse disponibile su svn all'url https://svn.ing.unibo.it/svn/ai/didattica_ai/mulino/Mulino

  • Per motivi di efficienza, ogni software dovrà essere in grado di "giocare" con un limite di 2Gb di RAM

  • Tale progetto contiene:

    • Un server che mantiene lo stato centrale del gioco (Stato in State.java, motore di esecuzione in Engine.java)

    • Un client (classe MulinoClient.java) che offre due primitive: una per inviare al server la propria mossa, una per leggere dal server lo stato corrente.

    • All'avvio il server invia a entrambi i giocatori lo stato attuale. Da quel momento in poi si comincia a giocare, per primo sempre il bianco (State.Checker.WHITE). Le mosse cambiano a seconda della fase.

      • Fase 1 (State.Phase.FIRST): ogni mossa e' una stringa di due lettere che indicano dove si vuole mettere la propria pedina. Ad esempio "a1". Se la propria mossa dà adito al diritto di rimuovere la pedina avversaria, bisogna anche indicare la posizione da cui rimuovere la pedina avversaria. Ad es: "g7a1" significa che il giocatore mette la propria pedina in a1, e che poichè tale mossa crea una tripletta, si deve rimuovere la pedina avversaria in posizione a1

      • Fase 2: analoga alla prima, ma con regole leggermente diverse

      • Fase finale: analoga alla seconda ma senza le restrizioni varie imposte nelle prime due fasi

    • Una volta inviata la propria mossa, il server risponde subito al giocatore comunicandogli il nuovo stato del gioco: a tal scopo, dopo la scrittura al server della mossa il giocatore deve subito leggere dal server il nuovo stato attuale. modificato dalla propria mossa.

    • Dopo aver fatto ciò il turno passa all'avversario; il giocatore può effettuare una read bloccante per aspettare dal server di avere notizie: in particolare, non appena l'avversario effettua la sua mossa, il server comunica a entrmabi i giocatori il nuovo stato

    • Riassumendo, supponendo di essere il giocatore di turno, il ciclo di gioco è simile a:

      1. invio la mia mossa;

      2. leggo dal server il nuovo stato, modificato a causa della mia mossa;

      3. ri-eseguo lettura dal server, e mi blocco aspettando la mossa del mio avversario: appena questa viene fatta, ricevo dal server lo stato aggiornato, e posso riprendere (o continuare) il mio ragionamento;

    • Per ogni mossa ogni giocatore ha al massimo 60 secondi di tempo: se sfora il tempo, il giocatore perde. Qualora le sifde risultassero troppo lunghe, il tempo potrà essere abbastao a discrezione di Chesani.

    • Se il giocatore propone una mossa non consentita, vengono lanciate specifiche eccezioni (a seconda del tipo di errore), e il giocatore perde

    • La classe MulinoClient può essere eseguita con parametro "White" o "Black" e offre la possibilita' di giocare tramite console. Per poter fare una partita di prova, è necessario eseguire Engine.java, e poi a parte due istanze differenti di MulinoClient.java, una eseguita con parametro di avvio "White" e l'altra con parametro di avvio "Black". In totale, tre processi distinti (server e due giocatori).

    • Stampando a video il risultato di State.toString() si ottiene una rappresentaizone ascii-art della scacchiera e dello stato attuale...

    • Tutte le regole del gioco potranno essere comunque modificate da Chesani/Mello per opportuni motivi, in qualsiasi momento, e senza pre-avviso... :-|

Contact webmaster of this site