Oppure

Loading
19/06/21 17:10
Carlo
Postato originariamente da Thejuster:

Visivamente è intuibile, ma poco pratico riguardo al "prendi".

Direi di fare un approccio differente.

Al click di una carta che si intende giocare, vengono mostrate eventuali scelte su quelle che il giocatore può prendere.

esempio, sul tavolo c'è 5 den, 5 spad, 2 bast, 3 den.

Il giocatore clicca su 7 che ha in mano.
può scegliere di prendere automaticamente al click della carta ( 5 den + 2 bas ) o (5 spad + 2 bast)
tramite un popup che appare sempre sul tavolo.

Così anche allo stesso modo nel caso ci sia due volte un numero uguale ma con semi differenti.


Effettivamente, con le giocate pronte è più semplice.

Con il nuovo eseguiblie dai le carte, qualsiasi carta clicchi dei giocatori, attiva il giocatore e vengono mostrate le possibili giocate in una ListBox (migliorabile, magari con le immagini delle carte invece dei nomi).
Con il doppio click, si sceglie la giocata...
La giocata vine visualizzate tra le carte che ogni giocatore ha fatto sue.
Se non è possibile prendere nulla, la carta scelta puo' essere solo scesa.

Ancora nessuna rimozione delle carte giocate dal giocatore e dal banco.
Non escludo possibili bug, che per ora non ho notato.
Ultima modifica effettuata da Carlo 19/06/21 17:37
in programmazione tutto è permesso
19/06/21 17:39
Thejuster
Perfetto.

L'unica cosa è da togliere la scelta "Scendi [Carta]"

Al doppio click, si presume che l'utente vuole giocare quella.
In caso di sbaglio, non si torna indietro. Così come nel gioco reale.
Una volta posato una carta non puoi riprenderla.

mire.forumfree.it/ - Mire Engine
C# UI Designer
20/06/21 15:53
Carlo
Il programma è solo per verificare se la giocabilità è intuitiva, i commenti sono benvenuti.

Ho automatizzato:
Se al click sulla carta il giocatore non ha nulla da prendere, la carta scende sul banco automaticamente.
Se al click sulla carta la presa è univoca, il programma assegna le carte al giocatore automaticamente.
Se al click sulla carta, ci sono più scelte possibili, vengono mostrate le possibilità, e il giocatore deve scegliere.
Tolto il doppioclick sulla ListBox.
Aggiunti dei piccoli ritardi per permettere all'occhio di vedere cosa succede.

I giocatori ciclano automaticamente e solo il giocatore abilitato può giocare.
Ad ogni giro vengono ridistribuite 4 carte.

Sarà troppo automatizzato? Le sviste e gli errori non faranno più parte del gioco.

Ancora da fare:
il riconoscimento della scopa
il riconoscimento di fine partita
il conteggio dei punti
giocare contro il PC e/o consigliare cosa giocare

Cose che non so:
i giocatori giocano in coppia?
i gicatori in coppia dovrebbero poter farsi dei segnali di intesa?
quando si distribuiscono le carte, se sul banco capitano 4 Re (improbabile ma non impossibile), che succede?

@ Thejuster
Il programma è scritto completamente in modo procedurale, per farlo diventare un vero programma OOP in C#, serve il tuo intervento.
Nessun problema invece per implementare le tua grafica GDI.
Ultima modifica effettuata da Carlo 20/06/21 18:02
in programmazione tutto è permesso
20/06/21 21:51
Thejuster
ottimo.
come giocabilità mi sembra perfetto. tranne un solo problema.
Le carte vengono distribuite ad ogni carta giocata.
Mentre andrebbero ri-distribuite quando i giocatori giocano tutte le 3 carte in possesso.

Sarà troppo automatizzato? Le sviste e gli errori non faranno più parte del gioco.


No, direi che è perfetto, la svista sta nel giocatore a giocare la carta sbagliata.
Una carta giocata in modo errata, può permettere agli avversari di fare punti in altro modo.
es: Totale delle carte, i 4 setti (primera), maggiori carte di denari in possesso, e scopa.

riguardo a questo punto:

giocare contro il PC e/o consigliare cosa giocare


Credo serva un grado di difficoltà. "Principiante" "Esperto"
nel caso del principiante, direi di impostare una semplice ia in modo di prendere più carte possibili,
mentre nel caso di Esperto, di giocarsi tutte le possibilità, come prendere una carta di denari al posto di una normale, o tentare di tirare in inganno il giocatore preparandosi una scopa.

Un esempio è se Computer in mano: 8 ,2 , 3

Sul banco c'è: 4, 8

Il Computer tende tende a fare una trappola per far prendere il 7 al giocatore, quindi con un 4 atterrà, lancierà il 3, in caso poi il giocatore prenda 7, il computer fa scopa. (giusto per dare un esempio)

insomma un calcolo di probabilità.

Per il resto, quando sei pronto puoi caricare i sorgenti o su sourceforge come eravamo rimasti in modo che tramite svn si aggiorna velocemente senza riscaricare ogni volta i sorgenti e ricaricarli sul sito, o su git, oppure qualcosa che permette di avere una reposity per sviluppare in gruppo.


mire.forumfree.it/ - Mire Engine
C# UI Designer
23/06/21 21:13
Carlo
Postato originariamente da Thejuster:
ottimo.
come giocabilità mi sembra perfetto. tranne un solo problema.
Le carte vengono distribuite ad ogni carta giocata.
Mentre andrebbero ri-distribuite quando i giocatori giocano tutte le 3 carte in possesso.

Come ti avevo detto con le carte non ho confidenza. Ho corretto e aggiunto il riconoscimento della scopa e la fine della partita.
Se non ho sbagliato, le carte che rimangono sul banco le assegno al giocatore che ha fatto l'ultima presa.
vedi allegato

Postato originariamente da Thejuster:
Una carta giocata in modo errata, può permettere agli avversari di fare punti in altro modo.
es: Totale delle carte, i 4 setti (primera), maggiori carte di denari in possesso, e scopa.

Per i punti, se non ricordo male:
Numero carte totali
Numero carte denari
Primiera (4 sette)
Re bello
Sette Bello
e le scope.
Invece non ricordo se i punti si contano a coppie di giocatori o singoli.

Postato originariamente da Thejuster:
Credo serva un grado di difficoltà. "Principiante" "Esperto"
nel caso del principiante, direi di impostare una semplice ia in modo di prendere più carte possibili,
mentre nel caso di Esperto, di giocarsi tutte le possibilità, come prendere una carta di denari al posto di una normale, o tentare di tirare in inganno il giocatore preparandosi una scopa.

Un esempio è se Computer in mano: 8 ,2 , 3

Sul banco c'è: 4, 8

Il Computer tende tende a fare una trappola per far prendere il 7 al giocatore, quindi con un 4 atterrà, lancierà il 3, in caso poi il giocatore prenda 7, il computer fa scopa. (giusto per dare un esempio)

insomma un calcolo di probabilità.


Per la strategia ci aggiorniamo, non sono la persona più indicata, visto che non so giocare con cognizione di causa.

Ultima modifica effettuata da Carlo 23/06/21 21:25
in programmazione tutto è permesso
24/06/21 8:30
Thejuster
Per i punti Re Bello non esiste :rotfl: ma vabbe dettagli.

Per i denari si vince che ne ha di più così come per le carte totali.

Per la primera invece il discorso cambia,
Non valgono solo i 4 (7) ma si sommano in punteggi.

La primera va colcalta in questo modo:

il 7 vale 21 punti
il 6 vale 18 punti
l’asso vale 16 punti
il 5 vale 15 punti
il 4 vale 14 punti
il 3 vale 13 punti
il 2 vale 12 punti
tutte le figure valgono 10 punti.

mire.forumfree.it/ - Mire Engine
C# UI Designer
24/06/21 21:48
Thejuster
Ho apportato delle modifiche alla casse carta.

Dunque, la prima sostanziale modifica ed implementazione importante e quella di avere un EventArgs per la carta
più il Fix e aggiunta del Click.

Dal momento che si aggiunge una carta tramite IDE, si specificano dei valori per testare, invece via codice, c'è un costruttore apposta.


 public Carta(Tipo seme,int Valore)



Ho assegnato un Evento di Default così che al Click della carta viene direttamente chiamato un delegato che incapsula dei riferimenti tramite l'EventArgs

Esempio se dal costruttore dichiari


Carta c = new Carta(Carta.Tipo.Bastoni, 7);
c.OnCardClick += C_OnCardClick;
c.Location = new Point(50, 50);
themeBase1.Controls.Add(c);


//Al Click
  private void C_OnCardClick(object sender, CardEventArgs e)
        {
            MessageBox.Show($"La carta e di tipo {e.Seme} e vale {e.Numero}");

            //oppure
            MessageBox.Show(((Carta)sender).ToString());
        }



Gli uint nella classe servono a distinguere i vari tipi, o magari per serializzari in binario non sò.
Per creare una partita online esempio, o salvare lo stato di una partita.
Ultima modifica effettuata da Thejuster 24/06/21 21:55
mire.forumfree.it/ - Mire Engine
C# UI Designer
25/06/21 11:23
Carlo
@ Thejuster
Ok, come vuoi impostare il gioco?
La falsa riga del test allegato va bene?

Ho fatto un commit, dove testo la disposizione delle carte, creando un'array della tua classe Carte.
Tra le proprietà di Carte si dovrebbe poter inserire:
IDcarta (riconduce alla giusta immagine in ImageList, ed eventuale array che contiene il mazzo, senza fare calcoli)
PuntiCarta (servirà per calcolare i punteggi)
Image (utile per nascondere la carta, senza cambiare BackgroundImage)

La ImageList l'ho inserita perché così le immagini delle carte sono indicizzate.
Oppure se hai pensato altri metodi, esponi grazie.

Anche chi fa cosa, sarebbe utile saperlo per poter lavorare in parti diverse del progetto.
in programmazione tutto è permesso