==Data aggioranamento: 03.07.2010 == Introduzione Il programma Cuperativa è un software per giocare a carte da soli o contro il computer. Il software è realizzato completamente in ruby e può essere ampliato a piacere da chiunque lo desideri. La licenza del pacchetto cuperativa è la licenza ruby. Nella repository svn di rubyforge ho messo tutto il necessario per sviluppare nuovi giochi oppure modificarli. == Partenza veloce - fare il checkout della repository briscola: svn checkout svn://rubyforge.org/var/svn/briscola - andare nella sottodirectory briscola/src e lanciare il programma: ruby cuperativa_gui.rb Se il programma parte mostrando la schermata iniziale, vuol dire che l'ambiente di sviluppo è corretto e si può iniziare a sviluppare il programma. == Configurare l'ambiente di sviluppo in windows Nel file dev_ruby_cuperativa_windows.zip (http://kickers.fabbricadigitale.it/cuperativa/dev_ruby_cuperativa_windows.zip) ho messo tutto quello che è necessario per sviluppare il programma sotto windows xp. Il programma è sviluppato usando il linguaggio di programmazione Ruby e quindi necessita della sua installazione. Nello zip che ho riportato sopra, si trova la versione 1.8.6-25 (ruby186-25.exe) che è quella funzionante con i codici sorgenti della cuperativa. Questo è il primo programma da installare. Per vedere se funziona basta aprire una finestra di comando e lanciare il comando: ruby -v e compare il messaggio: ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] Provare anche gem -v per vedere la versione di gem: 0.9.2 Il programma cuperativa necessita di altre librerie che non sono contenute nel setup ruby186-25.exe, ma si devono installare in modo manuale. Queste librerie aggiuntive si trovano nello zip dev_ruby_cuperativa_windows.zip. Per installare le librerire aggiuntive si usa il comando gem. Questo programma viene installato con ruby186-25.exe. Bisogna aprire una finestra di comando dove si è scompattato lo zip e lanciare: gem -l archive-tar-minitar-0.5.2.gem Si ripete lo stesso comando per tutti i files *.gem del pacchetto. Con ruby186-25.exe viene installato anche l'editor Scite che può essere usato per editare i files sorgenti e lanciare l'ambiente ruby. Ora si possono prendere i file sorgenti dalla repository svn su rubyforge. In una directory a piacere vuota lanciare il comando: svn checkout svn://rubyforge.org/var/svn/briscola Il programma svn deve essere già  installato e il suo funzionamento non fa parte di questo documento. Maggiori informazioni si trovano su http://svnbook.red-bean.com/. Per provare l'installazione di Ruby, basta aprire con Scite il file \app\src\cuperativa_gui.rb e premere F5. A questo punto, se tutto è stato installato in modo corretto, partirà  il programma della cuperativa. == Testare un singolo gioco: esempio la briscola Quando si sviluppa un gioco è comodo testare solo un singolo gioco senza dovere fare partire il programma cuperativa. Per esempio per testare il gioco della briscola contro il computer basta aprire il file in scite: /briscola/src/games/briscola/briscola_gfx.rb ed eseguirlo con F5. Compare la schermata iniziale della briscola in una finestra di test. Basta cliccare all'interno della finestra per iniziare il gioco. == Nuovi giochi Ogni gioco della cuperativa si trova in una sottodirectory di /briscola/src/games/ All'interno di queste sotto directory si trova il file game_info.yaml il quale contiene tutte le informazioni per integrare il gioco nella cuperativa. La chiave :enabled: se contiene il valore true fa in modo di includere il gioco nella lista dei giochi della cuperativa. La chiave :class_name: indica quale classe verrà  instanziata al momento di lanciare il gioco. Il file incluso è indicato della chiave :file_req: Per vedere l'esempio di un gioco appena iniziato ma molto lontano dall'essere concluso, basta vedere i files della directory: /briscola/src/games/scala40 == Struttura del gioco Guardando il contenuto delle sottodirectory di /briscola/src/games/ Si notano almeno quattro files: alg_cpu_.rb _gfx.rb core_game_.rb game_info.yaml Il file alg_cpu_.rb serve per gestire il giocatore da parte della cpu. Ogni giocatore automatico ha una instanza di questa classe. I metodi che può implementare si trovano nella classe di base AlgCpuPlayerBase. Il file _gfx.rb contiene la classe che si occupa della rappresentazione grafica della partita e raccoglie gli inputs del giocatore umano. Il file core_game_.rb contiene la classe che gestisce il gioco. Contiene le informazioni sul mazzo, sui giocatori, riceve le carte giocate, distribuisce le carte, informa i giocatori quando devono giocare, che carta hanno giocato e controlla se una giocata è valida oppure no. L'architettura è suddivisa in modo da potere sviluppare un gioco con le sue regole senza dovere usare un'intefaccia grafica. Quando inizio a sviluppare un nuovo gioco, parto sempre dalle classi alg_cpu_.rb e core_game_.rb. In questo modo è possibile provare lo svolgimento di una partita senza dovere programmare interfacce grafiche come il mazzo di carte, carte di un giocatore e animazioni varie. Il gioco del tressette /briscola/src/games/tressette, che è ancora incompleto nella parte grafica, è istruttivo per quanto riguarda la parte core e alg_cpu. Per esempio, per vedere una partita a tressette tra due giocatori automatici senza interfaccia grafica, basta lanciare il programma: /briscola/test/tressette/test_core_tressette.rb Questo programma esegue la simulazione di un'intera smazzata tra due giocatori che giocano a caso. Il ciclo di una partita si può riassumere dal seguente codice: # crea il core del gioco tressette @core = CoreGameTressette.new # crea due giocatori automatici player1 = PlayerOnGame.new("Test1", nil, :cpu_alg, 0) player1.algorithm = AlgCpuTressette.new(player1, @core, nil) player2 = PlayerOnGame.new("Test2", nil, :cpu_alg, 1) player2.algorithm = AlgCpuTressette.new(player2, @core, nil) arr_players = [player1,player2] # inizia il gioco nel core @core.gui_new_match(arr_players) # processa il prossimo evento event_num = @core.process_only_one_gevent while event_num > 0 event_num = @core.process_only_one_gevent end # nessun evento da processare, smazzata finita == Autore Igor Sarzi Sartori == Links Home del sito: http://cuperativa.invido.it Forum dello sviluppo di cuperativa: http://cuperativa.invido.it/forums/4 Contatto: 6colpiunbucosolo@gmx.net Progetto su ruby forge (sorgenti e binari): http://rubyforge.org/projects/briscola/