Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Will32 - 26 Marzo 2010, 16:14:50

Titolo: [ RISOLTO ] Gioco che impara
Inserito da: Will32 - 26 Marzo 2010, 16:14:50
Ciao sono sempre io.
Mi è venuta in mente un'idea : fare un gioco ( quello di tris ) che impara da solo .
Per il gioco non c'è nessun  problema ma , che codice devo usare per far si che il programma si migliori ogni volta che gioca ?
 ;D

Se vi puo interessare, partecipate !
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 26 Marzo 2010, 17:06:06
utilizzare un database dove salva le partite così da non comemttere più lo stesso errore o da rifarlo nel caso sia vincente.
potresti creare l'intelligenza artificiale per il gioco, non dovrebbe essere tanto complicato
Titolo: Re: Gioco che impara
Inserito da: Will32 - 26 Marzo 2010, 19:10:52
E come faccio a far stabilire al programma qual 'è l'errore che ha commesso ??
 ;D
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 26 Marzo 2010, 19:34:19
Puoi fare un ragionaemnto a ritroso.
Se l'ultima mossa che ha fatto l'ha fatto perdere non è buona.
Poi valuti se facendo quella (penultima) mossa perde una volta su due allora non è buona e così via

oppure puoi studiarti l'albero del gioco.
Se mette al centro devi mettere in uno dei quattro lati, poi devi salvarti dal suo tris
eccetera.... le possiblità non sono infinite.....
Titolo: Re: Gioco che impara
Inserito da: Will32 - 26 Marzo 2010, 19:49:29
E per quanto riguarda il gioco, come mi consigli di farlo ?
Io avevo pensato ad un timer che fa cambiare turno appena l'utente o il computer seleziona uno dei button disposti nel seguente modo :

    x      x      x

    x      x      x

    x      x      x

Cosa ne pensi ?  ;D
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 26 Marzo 2010, 19:55:15
allora io ti consiglio di usare le picturebox, il turno cambia appena uno clicca in una di esse.
usi la proprietà picture.load per caricare l'immagine X o O
valuti il tutto con una matrice, salvando il valore messo.
Poi controlli se nella riga o nella colonna o nella diagonale ho tre valori uguali, se è così la partita è finita.
Titolo: Re: Gioco che impara
Inserito da: Ceskho - 27 Marzo 2010, 00:28:34
Puoi fare un ragionaemnto a ritroso.
Se l'ultima mossa che ha fatto l'ha fatto perdere non è buona.
Poi valuti se facendo quella (penultima) mossa perde una volta su due allora non è buona e così via

oppure puoi studiarti l'albero del gioco.
Se mette al centro devi mettere in uno dei quattro lati, poi devi salvarti dal suo tris
eccetera.... le possiblità non sono infinite.....


Scusa se mi permetto ma penso che tale sistema nel caso del tris non funzioni..secondo me fai prima a scrivere un programma già "intelligente" piuttosto che uno che impari...nel tris la mossa dipende dalla situazione e tenendo presente che tali situazioni sono limitate (visto che le caselle sono poche e i giocatori solo 2).....

Se will32 usa il sistema da te presentato va a finire che il gioco riconoscerà, con l'andare del tempo, il 99% delle mosse sbagliate...
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 08:58:41
Questa era la logica del programma :

- se io vinco la partita , il programma registra le sue mosse e, se le condizioni si ripeteranno , non userà più quella sequenza
- se invece io perdo, il programma registra le mosse come ' valide ' per vincere un ' altra partita

 ;D
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 15:54:49
@ceskho, in effetti gli avevo messo anche l'oppure, e mi trovo in accordo con te.
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 16:03:18
Citazione
Se will32 usa il sistema da te presentato va a finire che il gioco riconoscerà, con l'andare del tempo, il 99% delle mosse sbagliate

Scusa Ceskho ma , come fa a riconoscere il 99% delle mosse sbagliate con questo ragionamento :

Citazione
- se io vinco la partita , il programma registra le sue mosse e, se le condizioni si ripeteranno , non userà più quella sequenza
- se invece io perdo, il programma registra le mosse come ' valide ' per vincere un ' altra partita

@Ealmuno , io avevo pensato di usare le label e disporle nel seguente modo :

1     2     3

4     5     6

7     8     9

Così che si vince quando il testo di 123 o 456 o 789 o 159 o 357 o 147 o 258 o 369 è uguale a tutte e tre .
Che ne pensi ??  ;D
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 16:12:47
come idea funziona, ora bisogna solo implementarla.


creare un gioco che impara è sempre complicato, perchè una mossa che una volta viene trovata come non vincente allora nn la userà più, facendo così ogni volta che perde non farà più quelle mosse per cui alla fine arrivi con mosse tutte sbagliate
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 16:21:58
Se a qualcuno interessa iniziare a scrivere il codice ... !
Iniziamo solo con il gioco , per l'intellgenza artificiale , ci pensiamo poi dopo ( quando abbiamo fatto il resto   ;D )

P.S : Sono ben graditi anche solo pezzettini di codice da assemblare  
        Cercate Pixel , lui è famoso per la grafica !!  :P
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 16:33:43
per adesso sto facendo un altro progetto, è un gioco come il tuo, le basi sono le stesse, se hai problemi chiedii pure.
Titolo: Re: Gioco che impara
Inserito da: Ceskho - 27 Marzo 2010, 17:59:28
@ will32

Tieni presente che a tris si può perdere in tutti i casi possibili che possono presentarsi nel gioco. Così facendo basterà poco per far si che il gioco dopo un tot di sconfitte riconosco la maggior parte delle mosse come sbagliata e finisca per eseguire solo quelle poche mosse che lui ritiene giuste. SE poi perde anche con tali mosse allora le operazioni da fare per lui diventano sempre meno e più gioca quelle e più ha il rischio di perdere con la conseguenza che alla fine non saprà più che fare!
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 18:10:56
Allora, che altro gioco mi consigli di fare ?  ;D
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 18:24:20
poker?
Titolo: Re: Gioco che impara
Inserito da: Ceskho - 27 Marzo 2010, 18:54:47
Ammazza...dal tris al poker il passo è troppo grande...

E poi per programmare il poker bisogna avere basi sull'uso delle classi....non so se will32 le abbia...
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 19:11:02
ok, faccio un elenco:
carte:
scala quaranta
scopa ( :o non pensate male, è un gioco di carte  :P)
briscola
scopone (pure questo  :P)

oppure i classici giochi tipo:
pacman
tetris
...
quello delle mine


(se riesci fa scopa......)
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 19:22:35
Sai qual è il problema di poker : non so come si gioca nella realtà, quindi non posso farlo come programma .  :'(

Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 19:23:10
e gli altri?
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 19:25:38
Mine, tetris e pacman non si giocano in due !  ;D
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 19:28:12
Dite che puo andare bene Worms in due ( quello dei vermi che cercano di mangiare quel puntino ).
Però, che codice uso per far muovere quello del programma ?
 :(
Titolo: Re: Gioco che impara
Inserito da: ealmuno - 27 Marzo 2010, 19:33:56
fantastica come idea!!!
dovrebbero esserci degli esempi in gambas sulla categoria giochi....
Titolo: Re: Gioco che impara
Inserito da: Ceskho - 27 Marzo 2010, 19:47:59
fantastica come idea!!!
dovrebbero esserci degli esempi in gambas sulla categoria giochi....

si si....è tra gli esempi....
Titolo: Re: Gioco che impara
Inserito da: Will32 - 27 Marzo 2010, 19:50:19
Bene , si inizia con la programmazione ... !  ;D
Titolo: Re: Gioco che impara
Inserito da: Will32 - 28 Marzo 2010, 15:34:08
Ecco allegata la versione di Worm in uno .

Adesso ..., che codice devo usare per far muovere quello del computer ?  ;D
Titolo: Re: Gioco che impara
Inserito da: leo72 - 29 Marzo 2010, 11:57:32
L'idea ve la do io.
ESAPEDONE (http://en.wikipedia.org/wiki/Hexapawn).

E' un vecchissimo gioco in BASIC basato su un algoritmo di auto-apprendimento.
In pratica si gioca su una scacchiera 3x3 con 6 pedoni, 3 bianchi e 3 neri, seguedo le regole di mossa e mangiata dei pedoni negli scacchi (quindi un pedone si muove di una mossa in avanti, mangia solo in avanti e spostandosi a DX o SX).
Si gioca umano contro computer. Ad ogni partita il computer controlla se ha perso o vinto: se ha vinto, salva tutte le mosse, se ha perso elimina l'ultima mossa (mi pare). Cmq diciamo che dopo un periodo di apprendimento, il computer diventa (quasi) imbattibile.

L'anno scorso avevo già buttato giù un po' di codice però ero fermo alla grafica. Chi vuole darmi una mano può lavorare sul progetto che allego, vediamo di portarlo in fondo così lo inserisco nella mia raccolta di conversioni BASIC->GAMBAS :).

Ah, trovate anche il listato in BASIC dell'esapedone originale, altrimenti non capite come funziona. Se vi va di farlo girare, procuratevi DOSBOX (è in quasi tutti i repo) e l'interprete GWBASIC.EXE (googlate e lo trovate), così potete lanciare il giochino.
Titolo: Re: Gioco che impara
Inserito da: Will32 - 29 Marzo 2010, 14:11:08
Ho un po' di domande da fare :

      1      le pedine nere si muovono ?

      2      a che cosa serve dosbox ?


 ;D
Titolo: Re: Gioco che impara
Inserito da: leo72 - 29 Marzo 2010, 23:13:13
1) le pedine nere le muove il computer, ovviamente :-)
2) DOSbox è un emulatore DOS. Serve per poter creare l'ambiente in cui lanciare, tramite GW-BASIC, il programmino in BASIC che ho allegato.
Titolo: Re: Gioco che impara
Inserito da: Will32 - 30 Marzo 2010, 08:53:14
Le pedine nere, da me , non si muovono ( hai scritto il codice per far giocare il pc ? )
Poi, non so come mai, ma Gw-Basic non mi funziona ( e neanche dosbox ! ) .
Sarà un problema di Wine ?  ;D
Titolo: Re: Gioco che impara
Inserito da: leo72 - 30 Marzo 2010, 09:38:11
Le pedine nere non si muovono perché non c'è nessuna logica di gioco :-)
Se hai letto il mio post iniziale, dicevo appunto che avevo quasi terminato solo la parte relativa alla gestione grafica della scacchiera.

DOSbox _non_ lo devi lanciare con Wine, va lanciato a sé stante: esso apre una finestra di emulazione del vecchio MS-DOS. Da lì dentro avvii GW-BASIC da cui poi apri il programmino in BASIC... Si vede che hai qualche annetto meno di me  :P
Hexapawn.bas ti serve per studiarti l'algoritmo di gestione dell'apprendimento. Però devi capire il vecchio BASIC: non è difficile ma non è neanche intuitivo come gli odierni linguaggi. E' pieno di GOTO/GOSUB ecc...

La sostanza cmq è che se il programma vince, le mosse sono conservate, se il programma perde le mosse sono cancellate perché non "buone".
Ora vedo se trovo una vecchia rivista di 25 anni fa (!!!) in cui spiegavano l'esapedone con le scatole dei fiammiferi e le palline colorate  ;)
Titolo: Re: Gioco che impara
Inserito da: Will32 - 30 Marzo 2010, 11:32:20
Non intendevo di lanciare DosBox con Wine.
Io, quando lo lancio dal terminale, mi scrive questo :

Codice: [Seleziona]
DOSBox version 0.72
Copyright 2002-2007 DOSBox Team, published under GNU GPL.
---
CONFIG: Using default settings. Create a configfile to change them
ALSA lib pcm_pulse.c:626:(pulse_prepare) PulseAudio: Unable to create stream: Invalid argument

E: stream.c: Assertion 's' failed at pulse/stream.c:1224, function pa_stream_drain(). Aborting.
Aborted

Come mai ?  ;D

Citazione
Le pedine nere non si muovono perché non c'è nessuna logica di gioco :-)
Se hai letto il mio post iniziale, dicevo appunto che avevo quasi terminato solo la parte relativa alla gestione grafica della scacchiera.

Ahahahaha !!
L'avevo saltata quella parte  :P
Titolo: Re: Gioco che impara
Inserito da: leo72 - 30 Marzo 2010, 11:42:20
Te lo dice  8)

Va configurato. E poi ti dà un errore sul sistema audio. Io ho Alsa per cui non so se c'è qualche incompatibilità con Pulse, questo lo devi risolvere tu su... Ubuntu, usi Ubuntu?

Cmq di solito il file di conf è in /home/leo/.dosbox/dosbox-versione.conf.
Titolo: Re: Gioco che impara
Inserito da: Will32 - 30 Marzo 2010, 11:49:56
Uso Ubuntu.

Sai qual'è il problema : non ho una cartella in home di DosBox .

P.S :

Trovato articolo di giornale ( o cos'altro sia ) su hexapawn : http://www.atariarchives.org/basicgames/showpage.php?page=83 (http://www.atariarchives.org/basicgames/showpage.php?page=83)
 ;D
Titolo: Re: Gioco che impara
Inserito da: leo72 - 30 Marzo 2010, 11:53:30
Cerca nel sistema i file dosbox* e guarda se te ne viene fuori uno con l'estensione .conf. Altrimenti immagino tu lo debba creare a mano.
Titolo: Re: Gioco che impara
Inserito da: Will32 - 30 Marzo 2010, 16:04:45
Risolto ma adesso..., come faccio ad aprire gwbasic ed il programma ??  :'(
Titolo: Re: Gioco che impara
Inserito da: leo72 - 31 Marzo 2010, 10:32:01
L'hai scaricato il GW-BASIC?
Cercalo con google. Troverai un file .exe
Lo metti in una cartella qualunque, insieme al sorgente .bas.
Ci apri un terminale, lanci prima Dosbox, poi lanci il Gwbasic, da lì apri il sorgente.
Titolo: Re: Gioco che impara
Inserito da: leo72 - 01 Aprile 2010, 00:01:21
Scaricati questo gw.basic (http://www.sandroronca.it/downloads/gwbasic/gwbasic.zip).
Poi scompatta l'archivio nella home, diciamo. Aprici un terminale e lancia "dosbox gwbasic.exe". Deve andare per forza.
Titolo: Re: Gioco che impara
Inserito da: Picavbg - 02 Aprile 2010, 09:44:32
DosBox:     Fantastico!
l'ho avviato e funziona pefettamente. Ho scaricato ancheGwbasic; devo solo scompattarlo. Ricordo un vecchio gioco che utilizzavo col Vic20, quando cominciai ad usare il Basic. Se riesco a ricuperarlo, lo provo e lo metto a disposizione della comunità: il gioco simula un bombardamento su una città; si vince radendo al suolo tutta la città. Ora non ricordo più i dettagli del gioco, nel senso che c'è un limite per potere abbattere tutti i palazzi, altrimenti si vincerebbe sempre, ma non ricordo più quale sia. A me piaceva tanto. Mi pare però che fosse registrato su cassetta.  Se trovo la cassetta, dovrei tirarne fuori il sorgente. Speriamo bene!
Grazie intanto della notizia. Vi farò sapere. :D
Ciao.


P.S: Credo di avere trovato la cassetta. Ma come potrei fare per estrarne il contenuto?
Titolo: Re: Gioco che impara
Inserito da: Will32 - 02 Aprile 2010, 11:16:56
Funziona, adesso provo a creare exapawn con gambas ( intanto, cerco qualche guida di basic perchè alcune 'cose' non le conosco !!  :D )

P.S : Ci dovrebbe essere nel menù una voce per scompattare le casstte ( penso, ma non ne sono sicuro !!  :P )
       @Picavbg, prova a guardare !!
Titolo: Re: Gioco che impara
Inserito da: Picavbg - 02 Aprile 2010, 11:54:22
P.S : Ci dovrebbe essere nel menù una voce per scompattare le casstte ( penso, ma non ne sono sicuro !!  :P )
       @Picavbg, prova a guardare !!
Scusa, ma non ho capito di quale menù parli. Ma a parte ciò, il problema di fondo è disporre di un'unità in grado di leggere il contenuto di una cassetta. Ormai il Vic20 non cel'ho più; mi ricordo di averlo buttato perchè l'alimentatore si era bruciato.
Ciao

Ah, dimenticavo; potrei provare a leggerlo in trasparenza, davanti ad una finestra ben illuminata. :D :D
Buona Pasqua.
Titolo: Re: Gioco che impara
Inserito da: leo72 - 02 Aprile 2010, 18:17:05
@Will32:
il gestore di interfaccia per l'Esapedone c'è già, va fatto solo la conversione dell'algoritmo di gestione dell'apprendimento. Cmq il vecchio BASIC non è difficile da capire.

@picavbg:
se non hai più il VIC20 la vedo dura estrarre i programmi che hai su nastro. Tieni conto cmq che il GW-BASIC non è il Commodore BASIC per cui avresti cmq problemi di portabilità perché immagino che il tuo giochino per VIC avrà usato le POKE ecc per disegnare su schermo il gioco, ecc...
Per quanto riguarda il giochino, credo che tu ti riferisca ad un gioco in cui si vedeva il profilo di una città con grattacieli di diverse altezze ed un aereo che andava da SX a DX e ad ogni passaggio completato scendeva di una riga. Il gioco consisteva nell'abbattere tutti i grattacieli iniziando da quelli più alti per non schiantarcisi contro. Giusto?
Titolo: Re: Gioco che impara
Inserito da: Picavbg - 02 Aprile 2010, 20:03:46
@Leo:
Vedo che tu lo ricordi perfettamente. Ed ora che me lo hai rammentato, mi sono ricordato pure io. Si, era proprio così. Mi pare che s'intitolasse "Blitz"; la cassetta che ho trovato contiene diversi giochini e l'unico che può accostarsi a quel tipo di gioco si chiama proprio così. È anche vero che il Basic Commodore non era Gw-Basic; ricordo benissimo le poke, ma io non le ho mai usate. Purtroppo è anche vero quello che dici sul possibile recupero del codice sorgente, Però partendo da quel codice, per chi avesse voglia di sgranchirsi la mente, allenandosi a convertire quel gioco in codice Gambas, potrebbe essere anche un buono spunto, non credi?
Voglio provare a chiedere a qualche amico. Non si sa mai.
Ciao.
Titolo: Re: Gioco che impara
Inserito da: leo72 - 03 Aprile 2010, 00:31:04
Guarda, le "conversioni" a me piacciono molto :-)
E' un modo per non perdere i vecchi giochi e poterli rigiocare sui PC odierni.

Titolo: Re: Gioco che impara
Inserito da: Ceskho - 03 Aprile 2010, 00:32:20
Direi che aprire un topic "nostalgico" serva molto di più che discuterne qua...la priorità qui è aiutare will32 che vuole "imparare" il suo programma... ;)
Titolo: Re: Gioco che impara
Inserito da: Will32 - 04 Aprile 2010, 15:31:56
Sto scrivendo il codice di Esapedone ( che è il gioco perfetto per quello che voglio fare !! ) .
Chiudo la discussone e metto un bel RISOLTO . ;)
Grazie e ciao !!
 ;D