Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Carte Napoletane Cs - Gioco di carte in C#

Carte Napoletane Cs

Sommario | Admin | Forum | Bugs | Todo | Files

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:39
Sabato, 19/06/2021
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.



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:53
Domenica, 20/06/2021
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.


Carlo ha allegato un file: Release.zip (106786 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 20/06/2021 alle 20:02


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:51
Domenica, 20/06/2021
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.

Testo quotato


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:

Testo quotato


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.




https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 23:13
Mercoledì, 23/06/2021
Testo quotato

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

Testo quotato

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.

Testo quotato

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.



Carlo ha allegato un file: Release.zip (145649 bytes)
Clicca qui per scaricare il file

Ultima modifica effettuata da Carlo il 23/06/2021 alle 23:25


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:30
Giovedì, 24/06/2021
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.



https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 23:48
Giovedì, 24/06/2021
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.

Codice sorgente

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

Codice sorgente - presumibilmente C++

  1. Carta c = new Carta(Carta.Tipo.Bastoni, 7);
  2. c.OnCardClick += C_OnCardClick;
  3. c.Location = new Point(50, 50);
  4. themeBase1.Controls.Add(c);
  5.  
  6.  
  7. //Al Click
  8.   private void C_OnCardClick(object sender, CardEventArgs e)
  9.         {
  10.             MessageBox.Show($"La carta e di tipo {e.Seme} e vale {e.Numero}");
  11.  
  12.             //oppure
  13.             MessageBox.Show(((Carta)sender).ToString());
  14.         }



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 il 24/06/2021 alle 23:55


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:23
Venerdì, 25/06/2021
@ 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.


Carlo ha allegato un file: Release.zip (145825 bytes)
Clicca qui per scaricare il file


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 18:07
Venerdì, 25/06/2021
Per quanto riguarda l'indicizzazione della carta, basta inserire una proprietà di tipo int.
esattamente come dici IDCarta , però, credo sia sempre meglio utilizzare una Lista.
Gli array sono poco affidabili da sempre. Basta un indice sbagliato per avere un crash.
cosa che con le liste non accade.

Con una lista è anche più semplice recuperare un elemento anche perché sono già indicizzati.
Al click avendo già l'object (sender) che prende il tipo dalla carta stessa:

Codice sorgente

List<Carta> carte = new List<Carta>(); //Lista esempio private void C_OnCardClick(object sender, CardEventArgs e) { Carta c = (Carta)sender; var card = carte.Where(x => x.Numero == c.Numero && x.SemeCarta == c.SemeCarta).FirstOrDefault(); carte.Remove(card); }



la var card è di tipo Carta quindi contiene già tutte le informazioni al riguardo della carta che viene cliccata. ( Numero e Seme)

si può in seguito decidere di eliminarla esempio dal deck, o dal tavolo.

Certo, Io al momento mi sto concentrando sulla parte grafica
(Classe Carta, Controlli Vari,e Tavolo)

Riguardo alla carta coperta, Posso impostare un bool di default su false
False = Scoperta
True = Coperta

Cmq mi piace molto per ora.
Il tuo sistema mi garba molto con la ListView. Soprattutto le carte le vedo di una maggiore qualità.



Ultima modifica effettuata da Thejuster il 25/06/2021 alle 20:43


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo