Regole generali

Come indicato a lezione e nelle pagine del corso, per superare l'esame di "Laboratorio di Programmazione ad Oggetti", "Laboratorio di Informatica Applicata" e "Laboratorio di Informatica per l'artigianato", è anche necessario sviluppare un progetto in Java.

Eccetto accordi presi singolarmente con il docente, a partire dall'appello di novembre 2010, il progetto va scelto in questa pagina.

Note:

Tracce elaborati Java

CONSIDERAZIONI GENERALI

Software di gestione per un gestore di Gas

Si vuole implementare un software di gestione per una società di fornitura del gas. Il software dovrà sopportare comuni operazioni gestionali. In particolare:

Per la conservazione dei dati utilizzate files formattati nel formato da voi prescelto. L'interfaccia utente va fatta utilizzando la console.

[FACOLTATIVO/AVANZATO:] Utilizzare un database per gestire i dati (ad esempio MySQL).

[FACOLTATIVO/AVANZATO:] L'interfaccia utente potrebbe essere sviluppata utilizzando classi swing.

[FACOLTATIVO/AVANZATO:] Creare un applicativo server che accetti in ingresso liste di letture e ne faccia l'inserimento sul sistema. Potete ispirarvi a quanto indicato per il progetto "Mini server HTTP" a questa pagina.

Mini Scrabble

"Scrabble" è un gioco da tavolo in cui, su una scacchiera 15x15, vengono disposte a turno da 2-4 giocatori alcune tessere con una lettera dell'alfabeto in modo che vadano a comporre una parola di senso compiuto (riscontrabile su di un vocabolario prescelto prima di iniziare a giocare). A ciascuna lettera è associato un valore, più alto tanto meno usata è quella lettera nella lingua in cui si sta giocando. È il fratello "più vecchio" del più famoso gioco "Scarabeo". Trovate alcune infomazioni sul gioco su Wikipedia (la versione inglese della pagina contiene maggiori dettagli sulle regole di gioco).

Obiettivo del progetto è quello di sviluppare una versione semplificata del gioco Scrabble. Rispetto al gioco originale, la scacchiera dovrà essere di 9x9 lettere. Non è necessario implementare caselle "premium" (moltiplicatori del valore della lettera).

Il programma dovrà permettere di giocare all'utente contro il calcolatore.

Numerate le colonne con le lettere dell'alfabeto e le righe con i numeri dal 1 al 9. La scacchiera può essere visualizzata sulla console, in modo simile a questo:

 +-----------------------------------+
1|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
2|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
3|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
4|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
5|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
6|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
7|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
8|   |   |   |   |   |   |   |   |   |
 |---+---+---+---+---+---+---+---+---|
9|   |   |   |   |   |   |   |   |   |
 +-----------------------------------+
   A   B   C   D   E   F   G   H   I

Come vocabolario di riferimento potete utilizzate la lista distribuita per il controllo ortografico con qualche programma (as esempio, con WinEdt). Il programma utilizzerà la lista per costituire le parole da mettere sul tabellone quando è il turno del computer, ma anche per verificare l'ammissibilità delle parole dell'utente.

Prima di iniziare questo progetto:

[FACOLTATIVO/AVANZATO:] L'interfaccia utente potrebbe essere sviluppata utilizzando classi swing. Potete in questo caso utilizzare anche le caselle "premium".

[FACOLTATIVO/AVANZATO:] Utilizzare come lista di parole il dizionario italiano di Firefox. Dovete in questo caso al caricamento declinare i verbi e generare i plurali (generate solo le parole singole e non quelle elise che accrescono in modo eccessivo la lista).

Sudoku

Il Sudoku, un gioco che recentemente ha riscosso una certa popolarità, consiste in una matrice 9×9, ulteriormente suddivisa in 9 sottomatrici 3×3, in cui devono essere posti i numeri da 1 a 9 in modo da non avere ripetizioni in una stessa riga, colonna o sottomatrice 3×3. Il gioco inizia con alcuni numeri opportunamente collocati nella griglia (il "suggerimento iniziale") e termina quando la griglia è stata completamente riempita. Se il suggerimento iniziale è ben fatto, il gioco ammette una sola soluzione. Una possibile griglia è la seguente:




Il progetto consiste nello scrivere un programma che consenta all'utente di giocare una partita. Il giocatore ha la facoltà di:
  1. caricare un nuovo schema (vedi Nota 1)
  2. salvare lo schema corrente per riprendere la partita in un secondo momento (vedi Nota 1)
  3. eseguire un numero illimitato di undo per ogni partita. In altre parole, è possibile annullare un numero arbitrario di mosse ritornando alla situazione precedente (come avviene negli editor di testo con le funzioni undo/redo)
  4. farsi suggerrire la prossima mossa dal computer (vedi Nota 2).

NOTA 1: Il file dello schema è un file di testo in cui il carattere '@' rappresenta la casella vuota. Ad ogni riga dello schema corrisponde una linea del file. Ad esempio, lo schema in figura è salvato come:

9@@1@@@@5
@@5@9@2@1
8@@@4@@@@
@@@@8@@@@
@@@7@@@@@
@@@@26@@9
2@@3@@@@6
@@@2@@9@@
@@19@457@

NOTA 2: Nel documento "Metodi per risolvere i Sudoku", linkato alla pagina del gioco di Wikipedia, è proposto un semplice algoritmo per trovare la soluzione di uno schema (da utilizzare per soddisfare il requisito 4), che fa uso di 6 regole. Il programma deve implementarne almeno 2. NB: non usando tutte le regole, il programma potrebbe non essere in grado di risolvere tutti gli schemi.

Rimane sottointeso che il programma segnala ogni mossa che sia vietata dalle regole del gioco.

[FACOLTATIVO/AVANZATO:]
Implementare un'interfaccia grafica.
[FACOLTATIVO/AVANZATO:] Implementare tutte le 6 regole menzionate nel documento sopraccitato.

Server FTP

FTP è un protocollo che consente di eseguire alcune operazioni (tipicamente navigare tra le directories, copiare e cancellare files) su un file system remoto. Il progetto consiste nello sviluppo di un semplice server FTP che accetti i seguenti comandi:
Per semplificare il progetto, il server accetta una sola connessione alla volta e non autentica l'utente (ignora username e password).
Una tipica sessione -- in cui User è l'utente che digita i comandi dal prompt, Client indica i messaggi generati dal programma client in risposta ai comandi dell'utente, e Server indica i messaggi del programma server generati in risposta ai messaggi del client -- è la seguente:
- User: ftp remotehost
- Server: 220
- User: inserisce il nome-utente
- Client: USER foo
- Server: 331 enter password
- User: inserisce la password
- Client: PASS bar
- Server: 230 user logged in
- User: list
- Client: PORT 127,0,0,1,9,13
- Server: 200
- Client: LIST
- Server: 150 Opening ASCII mode data
- trasferimento dei dati
- Server:
226 Transfer complete
- User: quit
- Client: QUIT
- Server:
221 Goodbye

Lo standard tecnico è contenuto in RFC 959. Alcuni esempi di utilizzo di un client FTP sono qui.

Per implementare il programma, fate riferimento:


[FACOLTATIVO/AVANZATO:] Gestire più connessioni contemporaneamente facendo uso di threads.

©2010 Roberto Sassi