Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[Vb2008.net] Gioco di carte
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
borbone
Comune mortale
Comune mortale


Registrato: 20/12/10 14:15
Messaggi: 4

MessaggioInviato: 20 Dic 2010 14:24    Oggetto: [Vb2008.net] Gioco di carte Rispondi citando

Salve a tutti ,

ho intenzione di creare una variante del tressette a perdere con vb.net , però mi risulta difficile l'estrazione delle 40 carte nelle apposite picturebox , facendo in modo che ogni carta estratta non venga ripetuta.
Ho letto vari argomenti sulla mescolazione degli array , ma pur capendo la logica del codice non riesco a farle funzionare e le carte vengono ripetute sempre. Posto quì il mio codice che inizialmente era di vb6 , poi lo convertito con vb.net2008:
Codice:


Friend Class Form1
   Inherits System.Windows.Forms.Form
   Dim mazzo(3, 12) As String
   Dim riga, colonna As Short
   Dim seme, carta As String
    Dim cont, i, j, l As Short
    Dim numericasuali As New Random
   Private Sub Cmdestrai_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Cmdestrai.Click
        Dim pict As String
        Dim pict2 As String
      Randomize()
        seme = CStr(numericasuali.Next(0, 3))
        carta = CStr(numericasuali.Next(0, 9))
      Select Case seme
         Case CStr(0)
                seme = "b"
         Case CStr(1)
                seme = "s"
         Case CStr(2)
                seme = "c"
         Case CStr(3)
                seme = "d"
      End Select
      Select Case carta
         Case CStr(0)
                carta = "1"
         Case CStr(1)
                carta = "2"
         Case CStr(2)
                carta = "3"
         Case CStr(3)
                carta = "4"
         Case CStr(4)
                carta = "5"
         Case CStr(5)
                carta = "6"
         Case CStr(6)
                carta = "7"
         Case CStr(7)
                carta = "8"
         Case CStr(8)
                carta = "9"
         Case CStr(9)
                carta = "10"
      
        End Select
        pict = seme & carta
        Me.PictureBox1.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\img\Napoletane\" & pict & ".gif")
        Me.Text = pict
        Me.PictureBox2.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\img\Napoletane\" & pict & ".gif")

   End Sub
   
   
End Class



Potete spiegarmi meglio questo concetto o almeno linkarmi qualche link su cui imparare?

Grazie mille.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 20 Dic 2010 17:16    Oggetto: Rispondi citando

spiegato in modo semplice: se estrai a caso un numero tra 1 e 4 per decidere il 'seme' e poi un numero tra 1 e 10 per il valore allora può benissimo capitare che ti vengano serviti due '8 di quadri' per dire.

se invece definisci un array di 40 interi, ognuno contenente un numero tra 0 e 39, poi si tratta di estrarre a caso un numero consistente di volte due numeri tra 0 e 39 e 'scambiare' le carte (i due numeri interi) contenuto nell'array in quelle posizioni.
(per passare dal numero contenuto al valore della carta devi prendere il risultato della divisione per 10 come seme e il resto (+1) come valore...)

Così mescoli il mazzo, poi si tratterà di prendere una carta per volta dalla cima del mazzo (dell'array)
Top
Profilo Invia messaggio privato HomePage
borbone
Comune mortale
Comune mortale


Registrato: 20/12/10 14:15
Messaggi: 4

MessaggioInviato: 23 Dic 2010 02:23    Oggetto: Rispondi citando

Ok grazie della risposta , ho creato un un unico mazzo da 40 carte .
Posto il codice:
Codice:


Public Class Form1
    Dim num_items As Integer = 20
    Dim items(num_items - 1) As Integer
    Dim seme As Integer

    Private Sub RandomizeArray(ByVal items() As Integer)
        Dim max_index As Integer = items.Length - 1
        Dim rnd As New Random
        For i As Integer = 0 To max_index - 1
            ' Pick an item for position i.
            Dim j As Integer = rnd.Next(i, max_index + 1)

            ' Swap them.
            Dim temp As Integer = items(i)
            items(i) = items(j)
            items(j) = temp
        Next i
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Make the items array.

        For i As Integer = 0 To num_items - 1
            items(i) = i
        Next i

        ' Randomize the items.
        RandomizeArray(items)

     


        ' Display the result.
        For i As Integer = 0 To num_items - 1

            Me.PictureBox1.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(0) & ".gif")
            Me.PictureBox2.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(1) & ".gif")
            Me.PictureBox3.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(2) & ".gif")
            Me.PictureBox4.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(3) & ".gif")
            Me.PictureBox5.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(4) & ".gif")
            Me.PictureBox6.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(5) & ".gif")
            Me.PictureBox7.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(6) & ".gif")
            Me.PictureBox8.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(7) & ".gif")
            Me.PictureBox9.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(8) & ".gif")
            Me.PictureBox10.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(9) & ".gif")
            Me.PictureBox11.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(10) & ".gif")
            Me.PictureBox12.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(11) & ".gif")
            Me.PictureBox13.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(12) & ".gif")
            Me.PictureBox14.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(13) & ".gif")
            Me.PictureBox15.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(14) & ".gif")
            Me.PictureBox16.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(15) & ".gif")
            Me.PictureBox17.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(16) & ".gif")
            Me.PictureBox18.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(17) & ".gif")
            Me.PictureBox19.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(18) & ".gif")
            Me.PictureBox20.Image = System.Drawing.Image.FromFile(My.Application.Info.DirectoryPath & "\Napoletane\" & items(19) & ".gif")




        Next i

     
    End Sub

    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
        Label1.Text = items(0)
    End Sub
End Class


Nel codice momentaneamente ho messo 20 carte di 2 semi , tato per provare. Ora vorrei sapere però come faccio a raggruppare i vari semi nella mano ? ad esempio tutte le carte del seme coppe dovrebbero andare insieme , non mischiate con bastoni.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 23 Dic 2010 15:19    Oggetto: Rispondi citando

classico problema di ordinamento. assegni un numero ad ogni seme (per dire 0=cuori 1=quadri 2=fiori 3=picche) e poi ordini per seme crescente e a parità di seme per valore crescente

algoritmi di ordinamento (sort) ce ne sono tantissimi. Se te lo devi scrivere da te ti consiglio un bubble sort, non è sicuramente il più performante ma è molto semplice da implementare.

Ciao
Top
Profilo Invia messaggio privato HomePage
borbone
Comune mortale
Comune mortale


Registrato: 20/12/10 14:15
Messaggi: 4

MessaggioInviato: 31 Gen 2011 18:38    Oggetto: Rispondi citando

SverX ha scritto:
classico problema di ordinamento. assegni un numero ad ogni seme (per dire 0=cuori 1=quadri 2=fiori 3=picche) e poi ordini per seme crescente e a parità di seme per valore crescente

algoritmi di ordinamento (sort) ce ne sono tantissimi. Se te lo devi scrivere da te ti consiglio un bubble sort, non è sicuramente il più performante ma è molto semplice da implementare.

Ciao


Scusate per aver risposto dopo molto tempo. Sono riuscito a creare l'algoritmo e tutto . L'unico problema non riesco a far capire al programma quale carta vince , anche perchè le carte sono divise in qusto modo :
0-9 bastoni
10-19coppe
20-29denari
30-39spade
come potrei fare?
Grazie.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 01 Feb 2011 13:24    Oggetto: Rispondi citando

non conosco le regole del gioco di carte ma sostanzialmente per paragonare le due carte devi confrontare i segni (numero DIV 10) e i valori (numero MOD 10). Ad esempio mettiamo che sia briscola, di cui conosco le regole, carta1 e carta2 sono le due carte da paragonare

Codice:
if (segno(carta1)=briscola)
  if (segno(carta2)<>briscola)
    vince carta1
  else
     if (valore(carta1)>valore(carta2))
        vince carta1
     else
        vince carta2
else
  if (segno(carta2)=briscola)
    vince carta2
  else
     if (valore(carta1)>valore(carta2))
        vince carta1
     else
        vince carta2


che si può migliorare in 1000 modi ma era per darti un esempio Smile
Top
Profilo Invia messaggio privato HomePage
borbone
Comune mortale
Comune mortale


Registrato: 20/12/10 14:15
Messaggi: 4

MessaggioInviato: 16 Feb 2011 17:21    Oggetto: Rispondi citando

Ciao , sto da parecchio e pur seguendo il tuo consiglio non riesco a far capire al pc la carta che vince . In pratica io dovrei fare in modo che 1 giocatore a caso tiri per primo (ne sono 4 , ma per ora sto facendo la prova su 2 giocatori.) e poi l'altro. Io non ci riesco perchè , quando tira il giocatore 1 l'altro non ha ancora tirato nessuna carta e quindi il giocatore 1 vince sempre. Non riesco a posizionare il controllo carte postato da te nel mio codice , e come se il pc vedesse ,giustamente, vincere sempre 1 solo giocatore xke effettua il controllo prima che l'altro giocatore tiri. Non so se sono stato chiaro.
Grazie per l'aiuto.
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11568
Residenza: Tokelau

MessaggioInviato: 17 Feb 2011 10:44    Oggetto: Rispondi citando

chiaro... dovrai fare un ciclo for che permetta a tutti i giocatori (2 o 4 che siano) di 'mettere in tavola' una carta.
dopo farai il controllo di chi ha vinto, direi Smile
Top
Profilo Invia messaggio privato HomePage
cooperativasolaris
Comune mortale
Comune mortale


Registrato: 18/01/11 09:52
Messaggi: 3

MessaggioInviato: 03 Mar 2011 09:36    Oggetto: Grazie Rispondi

Grazie per le info mi sono state molto utili
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi