Precedente :: Successivo |
Autore |
Messaggio |
borbone Comune mortale
Registrato: 20/12/10 14:15 Messaggi: 4
|
Inviato: 20 Dic 2010 14:24 Oggetto: [Vb2008.net] Gioco di carte |
|
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 20 Dic 2010 17:16 Oggetto: |
|
|
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 |
|
|
borbone Comune mortale
Registrato: 20/12/10 14:15 Messaggi: 4
|
Inviato: 23 Dic 2010 02:23 Oggetto: |
|
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 23 Dic 2010 15:19 Oggetto: |
|
|
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.
|
|
Top |
|
|
borbone Comune mortale
Registrato: 20/12/10 14:15 Messaggi: 4
|
Inviato: 31 Gen 2011 18:38 Oggetto: |
|
|
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.
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 01 Feb 2011 13:24 Oggetto: |
|
|
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 |
|
Top |
|
|
borbone Comune mortale
Registrato: 20/12/10 14:15 Messaggi: 4
|
Inviato: 16 Feb 2011 17:21 Oggetto: |
|
|
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 |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11568 Residenza: Tokelau
|
Inviato: 17 Feb 2011 10:44 Oggetto: |
|
|
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 |
|
Top |
|
|
cooperativasolaris Comune mortale
Registrato: 18/01/11 09:52 Messaggi: 3
|
Inviato: 03 Mar 2011 09:36 Oggetto: Grazie |
|
|
Grazie per le info mi sono state molto utili |
|
Top |
|
|
|