Sunny seeds

di il
12 risposte

Sunny seeds

Qualcuno riesce gentilmente a capire cosa c'è di sbagliato in questo codice che non funziona? Grazie mille in anticipo attendo risposta

(devo ricreare il goco sunny seeds, il gioco è questo https://www.youtube.com/watch?v=G_9DS5IkQQ)
Public Class Form1
Const numcolonne As Integer = 11
Const numrighe As Integer = 7
Dim matrice(numrighe - 1, numcolonne - 1), i, j, riga, colonna As Integer
Dim r1, r2, c1, c2, n As Integer
Dim possibile, possibile1 As Boolean
'j indice per le righe
'i indice per le colonne
'riga indica la riga selezionata
'colonna indica la colonna selezionata
Private Sub visualizza()
For j = 0 To numrighe - 1
For i = 0 To numcolonne - 1
dgv1.Item(i, j).Value = matrice(j, i)
Next

Next
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



For i = 0 To numcolonne - 1
dgv1.Columns.Add(i + 1, i + 1)
dgv1.Columns(i).Width = 30

Next

dgv1.Rows.Add(6)


Dim num As New Random

For j = 0 To numrighe - 1
For i = 0 To numcolonne - 1
matrice(j, i) = num.Next(1, 10)
dgv1.Item(i, j).Value = matrice(j, i)
Next

Next


dgv1.RowsDefaultCellStyle.BackColor = Color.Yellow





r1 = dgv1.CurrentCell.RowIndex
c1 = dgv1.CurrentCell.ColumnIndex
' r2 = dgv1.CurrentCell.RowIndex
' c2 = dgv1.CurrentCell.ColumnIndex

'If c1 > c2 Then
'n = 1
' Else
' n = -1
' End If

' If r1 = r2 Then
'If (c1 = c2 + 1) Or (c1 = c2 - 1) Then
' Else
'vicini in riga
' possibile = True
' For k = c1 + 1 To c2 - 1 Step n
'If matrice(r1, k) <> "" Then
'possibile = True
' Else
' possibile = False
' End If
' Next
' If possibile = True Then
'controllasopra()
' controllasotto()
' End If
' End If
' End If

' If c1 = c2 Then
'If (r1 = r2 + 1) Or (r1 = r2 - 1) Then
' Else
'vicini in colonna
' possibile = True
' For k = r1 + 1 To r2 - 1 Step n
'If matrice(k, c1) <> "" Then
'possibile = False
' Else
' possibile = True
' End If
' Next
' If possibile = True Then
'controllasx()
' controlladx()
' End If
' End If
' End If
If c1 > 0 Then
controllasx()
End If
If c1 < 10 Then
controlladx()
End If
If r1 > 0 Then
controllasopra()
End If
If r1 < 6 Then
controllasotto()
End If

End Sub

Private Sub controllasx()
If matrice(r1, c1) = matrice(r1, c1 - 1) Then
dgv1.CurrentCell.Style.BackColor = Color.White
' matrice(r1, c1 - 1) = ""
' matrice(r1, c1) = ""
visualizza()
End If
End Sub

Private Sub controlladx()
If matrice(r1, c1) = matrice(r1, c1 + 1) Then
dgv1.CurrentCell.Style.BackColor = Color.White
' matrice(r1, c1 + 1) = ""
' matrice(r1, c1) = ""
visualizza()
End If
End Sub

Private Sub controllasopra()
If matrice(r1, c1) = matrice(r1 - 1, c1) Then
dgv1.CurrentCell.Style.BackColor = Color.White
' matrice(r1 - 1, c1) = ""
' matrice(r1, c1) = ""
visualizza()
End If
End Sub

Private Sub controllasotto()
If matrice(r1, c1) = matrice(r1 + 1, c1) Then
dgv1.CurrentCell.Style.BackColor = Color.White
' matrice(r1 + 1, c1) = ""
' matrice(r1, c1) = ""
visualizza()
End If
End Sub


End Class

12 Risposte

  • Re: Sunny seeds

    No
  • Re: Sunny seeds

    Ciao giova ! Ho risolto il tuo quesito! ora ti metto il codice in descrizione:
    error 104 page not found
  • Re: Sunny seeds

  • Re: Sunny seeds

    giovanni muchacha ha scritto:


    ciao giova ! Ho risolto il tuo quesito! ora ti metto il codice in descrizione:
    error 104 page not found
    Ciao mi spieghi il senso di questo 3d?
    posti un listato, poi ti rispondi "no", successivamente ciao giova! ho risolto....error 104 page not found

    ??
  • Re: Sunny seeds

    Scusatemi era solo uno "scherzo" di un mio amico, non si ripeterà più.
  • Re: Sunny seeds

    giovanni muchacha ha scritto:


    Qualcuno riesce gentilmente a capire cosa c'è di sbagliato in questo codice che non funziona? Grazie mille in anticipo attendo risposta

    (devo ricreare il goco sunny seeds, il gioco è questo https://www.youtube.com/watch?v=G_9DS5IkQQ)
    Public Class Form1
    Const numcolonne As Integer = 11
    Const numrighe As Integer = 7
    Dim matrice(numrighe - 1, numcolonne - 1), i, j, riga, colonna As Integer
    Dim r1, r2, c1, c2, n As Integer
    Dim possibile, possibile1 As Boolean
    'j indice per le righe
    'i indice per le colonne
    'riga indica la riga selezionata
    'colonna indica la colonna selezionata
    Private Sub visualizza()
    For j = 0 To numrighe - 1
    For i = 0 To numcolonne - 1
    dgv1.Item(i, j).Value = matrice(j, i)
    Next

    Next
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load



    For i = 0 To numcolonne - 1
    dgv1.Columns.Add(i + 1, i + 1)
    dgv1.Columns(i).Width = 30

    Next

    dgv1.Rows.Add(6)


    Dim num As New Random

    For j = 0 To numrighe - 1
    For i = 0 To numcolonne - 1
    matrice(j, i) = num.Next(1, 10)
    dgv1.Item(i, j).Value = matrice(j, i)
    Next

    Next


    dgv1.RowsDefaultCellStyle.BackColor = Color.Yellow





    r1 = dgv1.CurrentCell.RowIndex
    c1 = dgv1.CurrentCell.ColumnIndex
    ' r2 = dgv1.CurrentCell.RowIndex
    ' c2 = dgv1.CurrentCell.ColumnIndex

    'If c1 > c2 Then
    'n = 1
    ' Else
    ' n = -1
    ' End If

    ' If r1 = r2 Then
    'If (c1 = c2 + 1) Or (c1 = c2 - 1) Then
    ' Else
    'vicini in riga
    ' possibile = True
    ' For k = c1 + 1 To c2 - 1 Step n
    'If matrice(r1, k) <> "" Then
    'possibile = True
    ' Else
    ' possibile = False
    ' End If
    ' Next
    ' If possibile = True Then
    'controllasopra()
    ' controllasotto()
    ' End If
    ' End If
    ' End If

    ' If c1 = c2 Then
    'If (r1 = r2 + 1) Or (r1 = r2 - 1) Then
    ' Else
    'vicini in colonna
    ' possibile = True
    ' For k = r1 + 1 To r2 - 1 Step n
    'If matrice(k, c1) <> "" Then
    'possibile = False
    ' Else
    ' possibile = True
    ' End If
    ' Next
    ' If possibile = True Then
    'controllasx()
    ' controlladx()
    ' End If
    ' End If
    ' End If
    If c1 > 0 Then
    controllasx()
    End If
    If c1 < 10 Then
    controlladx()
    End If
    If r1 > 0 Then
    controllasopra()
    End If
    If r1 < 6 Then
    controllasotto()
    End If

    End Sub

    Private Sub controllasx()
    If matrice(r1, c1) = matrice(r1, c1 - 1) Then
    dgv1.CurrentCell.Style.BackColor = Color.White
    ' matrice(r1, c1 - 1) = ""
    ' matrice(r1, c1) = ""
    visualizza()
    End If
    End Sub

    Private Sub controlladx()
    If matrice(r1, c1) = matrice(r1, c1 + 1) Then
    dgv1.CurrentCell.Style.BackColor = Color.White
    ' matrice(r1, c1 + 1) = ""
    ' matrice(r1, c1) = ""
    visualizza()
    End If
    End Sub

    Private Sub controllasopra()
    If matrice(r1, c1) = matrice(r1 - 1, c1) Then
    dgv1.CurrentCell.Style.BackColor = Color.White
    ' matrice(r1 - 1, c1) = ""
    ' matrice(r1, c1) = ""
    visualizza()
    End If
    End Sub

    Private Sub controllasotto()
    If matrice(r1, c1) = matrice(r1 + 1, c1) Then
    dgv1.CurrentCell.Style.BackColor = Color.White
    ' matrice(r1 + 1, c1) = ""
    ' matrice(r1, c1) = ""
    visualizza()
    End If
    End Sub


    End Class

    Ti serve ancora la soluzione? Io ci sono riuscito.
    Il tuo codice invece ha delle incongruenze e parti mancanti. (Vedi ad esempio le righe e le colonne invertite tra le variabili Matrice e l'oggetto Dgv1, e la mancanza dell'evento di selezione dell'utente e altre procedure) .
  • Re: Sunny seeds

    Si mi servirebbe ancora grazie mille
  • Re: Sunny seeds

    Ok bene, allora te lo posto per sabato sera. Questa settimana sono preso per impegni miei, e sto tra l'altro aiutando anche altre persone.

    Al momento attuale, ho raggiunto questi obbiettivi:
    - selezione origine e destinazione mossa = ok
    - controllo della validità della combinazione vincente tra celle adiacenti = ok
    - controllo della validità della combinazione vincente con celle intermedie estinte = ok
    - controllo della validità della combinazione vincente per valore identico = ok
    - controllo della validità della combinazione vincente per valore con somma pari a 10 = ok
    - rimappatura dei valori della celle random = ok

    vorrei aggiungere per sabato almeno queste procedure prima di postarlo:
    - punteggi = da fare
    - nuova partita = da fare
    e questo magari più tardi:
    - spostamento delle celle tra celle estinte = da fare

    Posso sapere se fate parte di una start up, o se lo fate per passione?
  • Re: Sunny seeds

    Lo facciamo per passione! Riusciresti a postarmi lo stesso il codice che hai già fatto anche se mancano le parti che mi hai detto? Grazie mille!
  • Re: Sunny seeds

    giovanni muchacha ha scritto:


    Lo facciamo per passione! Riusciresti a postarmi lo stesso il codice che hai già fatto anche se mancano le parti che mi hai detto? Grazie mille!
    Ok, eccolo:
    
    
    '1 - INSERIRE questi controlli in fase di design
    '    [DataGridView1] , nella proprietà "name" scrivere "DGV1"
    '    [Textbox1] , con dimensioni almeno  (250 px , 300 px) e a fianco della griglia
    '    [Button1], e chiamarlo: BT_Rimappa
    '    [Button2], e chiamarlo: BT_ControlloEstinzioni
    '    [Button3], e chiamarlo: BT_NuovaPartita
    '    posizionare i pulsanti sotto la griglia e la casella di testo a fianco della griglia
    '2 - Incollare tutto questo codice nel form1
    '    Controllare che gli apostrofi siano corretti dato che lo posto sul forum
    '3 - AVVIARE IL PROGRAMMA
    '    cliccare su [RIMAPPA]
    '    Selezionare la prima cella e TENENDO IL PULSANTE PREMUTO
    '    ...spostarsi fino alla seconda cella scelta
    '    ...e RIALZARE IL PULSANTE SENZA USCIRE DAL DGV1
    '    La combinazione vincente è valida in RIGA o IN COLONNA e non in diagonale
    '    ...e il valore delle 2 celle scelte deve essere identico [Punti += Valore1]
    '    ...oppure la loro somma deve essere pari a 10 [Punti += 10]
    '4 - OK non c'è "nuova partita" o "partita terminata" o "livello completato..." per ora! :-)
    '
    
    Public Class Form1
    
        'Variabili per le coordinate e per lo stato delle celle della griglia
        Dim QColonne As Integer = 11 'Indica la QUANTITA' di colonne nella griglia
        Dim QRighe As Integer = 7 'Indica la QUANTITA' di righe nella griglia
        Dim QCelle As Integer = 0 'Indica la quantità di celle nella griglia
        Dim QCelleEstinte As Integer = 0 'Indica la quantità di celle estinte
        Dim QRimappature As Integer = 0 'Indica la quantità di volte che è stata rimappata la griglia nella stessa partita
    
        Dim matrice(QColonne - 1, QRighe - 1) As Integer '(AL MOMENTO NON SERVE) Indica i valori astratti delle celle della griglia
        Dim Estinto(QColonne - 1, QRighe - 1) As Boolean '(SERVE) Indica lo stato della cella TRUE = ESTINTO , FALSE = VIVA
    
        Dim X1, Y1 As Integer 'Indica la coordinata della prima cella scelta
        Dim X2, Y2 As Integer 'Indica la coordinata dell'ultima cella scelta
    
        Dim Valore1 As Integer 'Indica il valore contenuto nella prima cella scelta
        Dim Valore2 As Integer 'Indica il valore contenuto nella seconda cella scelta    
    
    
        'Variabili per il controllo delle combinazioni vincenti:
        Dim StessaCasella As Boolean = False
    
        Dim AdiacenteAlto As Boolean = False
        Dim AdiacenteBasso As Boolean = False
        Dim AdiacenteSinistra As Boolean = False
        Dim AdiacenteDestra As Boolean = False
        Dim AdiacenzaCorrettaSemplice As Boolean = False 'Determina le condizioni richieste
    
        Dim AdiacenteAltoAPonte As Boolean = False
        Dim AdiacenteBassoAPonte As Boolean = False
        Dim AdiacenteSinistraAPonte As Boolean = False
        Dim AdiacenteDestraAPonte As Boolean = False
        Dim AdiacenzaCorrettaAPonte As Boolean = False 'Determina le condizioni richieste
    
        'Variabili per i punteggi
        Dim Punti As Integer = 0 'Indica il punteggio del giocatore nella partita corrente
    
        '================
        'CARICAMENTO FORM
        '================
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            InizializzaGriglia()
        End Sub
        '================
    
        Sub InizializzaGriglia()
            '=================
            'CREAZIONE GRIGLIA
            '=================
            For i As Integer = 0 To QColonne - 1
                DGV1.Columns.Add(i + 1, i)
                DGV1.Columns(i).Width = 30
            Next
            DGV1.Rows.Add(QRighe - 1)
            '=================
        End Sub
    
        '################################
        'TESTO DI INFORMAZIONI PER I TEST
        '################################
        Sub Test()
    
            Dim Testo As String = ""
            Testo = Testo & "======GRIGLIA======" & vbCrLf
            Testo = Testo & "QColonne = " & QColonne.ToString & vbCrLf
            Testo = Testo & "QRighe = " & QRighe.ToString & vbCrLf
            Testo = Testo & "QCelle = " & QCelle.ToString & vbCrLf
            Testo = Testo & "QCelleEstinte = " & QCelleEstinte.ToString & vbCrLf
            Testo = Testo & "======CELLA 1======" & vbCrLf
            Testo = Testo & "X1 = " & X1.ToString & vbCrLf
            Testo = Testo & "Y1 = " & Y1.ToString & vbCrLf
            Testo = Testo & "Valore1 = " & Str$(Valore1) & vbCrLf
            Testo = Testo & "Estinto = " & Estinto(X1, Y1).ToString & vbCrLf
            Testo = Testo & "======CELLA 2======" & vbCrLf
            Testo = Testo & "X2 = " & X2.ToString & vbCrLf
            Testo = Testo & "Y2 = " & X2.ToString & vbCrLf
            Testo = Testo & "Valore2 = " & Str$(Valore2) & vbCrLf
            Testo = Testo & "Estinto = " & Estinto(X2, Y2).ToString & vbCrLf
            Testo = Testo & "======ESITO !======" & vbCrLf
            Testo = Testo & "AdiacezaCorrettaSemplice = " & AdiacenzaCorrettaSemplice.ToString & vbCrLf
            Testo = Testo & "AdiacenzaCorrettaAPonte = " & AdiacenzaCorrettaAPonte.ToString & vbCrLf
            Testo = Testo & "=====PUNTEGGIO !===" & vbCrLf
            Testo = Testo & "Punti = " & Punti.ToString & vbCrLf
            Testo = Testo & "QRimappature = " & QRimappature.ToString & vbCrLf
            TextBox1.Text = Testo
        End Sub
        '################################
    
        Private Sub DGV1_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV1.CellMouseDown
            X1 = e.ColumnIndex
            Y1 = e.RowIndex
            Valore1 = DGV1.Item(X1, Y1).Value
    
            Test()
        End Sub
    
        Private Sub DGV1_CellMouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DGV1.CellMouseEnter
        End Sub
    
        Private Sub DGV1_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV1.CellMouseMove
    
        End Sub
    
        Private Sub DGV1_CellMouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DGV1.CellMouseUp
            '======================================
            'CONTROLLO IL LIMITE DELL'AREA DI GIOCO
            '======================================
            If e.ColumnIndex > QColonne - 1 Then MsgBox("Selezione fuori a destra") : Exit Sub
            If e.ColumnIndex < 0 Then MsgBox("Selezione fuori a sinistra") : Exit Sub
            If e.RowIndex > QRighe - 1 Then MsgBox("Selezione fuori in basso") : Exit Sub
            If e.RowIndex < 0 - 1 Then MsgBox("Selezione fuori in alto") : Exit Sub
            '======================================
    
            '====================================================
            'OTTENGO LE COORDINATE DELL'ULTIMA CELLA SELEZIONATA
            '====================================================
            X2 = e.ColumnIndex
            Y2 = e.RowIndex
            Valore2 = DGV1.Item(X2, Y2).Value
            '====================================================
    
            Test()
    
            '=========================
            'CONTROLLO ADIACENZE CELLE
            '=========================        
            'Resetto lo stato delle varibili di controllo delle adiacenze
            StessaCasella = False
            AdiacenteAlto = False
            AdiacenteBasso = False
            AdiacenteSinistra = False
            AdiacenteDestra = False
            AdiacenzaCorrettaSemplice = False 'Determina le condizioni richieste
    
            AdiacenteAltoAPonte = False
            AdiacenteBassoAPonte = False
            AdiacenteSinistraAPonte = False
            AdiacenteDestraAPonte = False
            AdiacenzaCorrettaAPonte = False 'Determina le condizioni richieste
    
            'Alto
            If X1 = X2 And Y1 = Y2 - 1 Then
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    AdiacenteAlto = True
                End If
            End If
    
            'Basso        
            If X1 = X2 And Y1 = Y2 + 1 Then
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    AdiacenteBasso = True
                End If
            End If
    
            'Sinistra        
            If X1 = X2 - 1 And Y1 = Y2 Then
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    AdiacenteSinistra = True
                End If
            End If
            'End If
    
            'Destra        
            If X1 = X2 + 1 And Y1 = Y2 Then
                If Estinto(X1, Y1) = False And Estinto(X2, X2) = False Then
                    AdiacenteDestra = True
                End If
            End If
    
            'Stessa casella        
            If X1 = X2 And Y1 = Y2 Then
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    StessaCasella = True
                End If
            End If
    
            '********************
            'ADICENZA SEMPLICE OK
            '********************
            If StessaCasella = False And (AdiacenteAlto = True Or AdiacenteBasso = True Or AdiacenteSinistra = True Or AdiacenteDestra = True) Then AdiacenzaCorrettaSemplice = True
            '********************
    
    
            '============================================================================
            'CONTROLLO LA SEQUENZA DELLE CELLE SELEZIONATE E DI QUELLE INTERMEDIE ESTINTE
            '============================================================================        
            'Alto a ponte
            If X1 = X2 And Y1 > Y2 Then
                'Controllo le celle interne al segmennto tra le 2 celle selezionate
                Dim QEstintiInColonna As Integer = 0 'resetto per contare
                Dim QCelleInColonna As Integer = 0 '= r1 - r2 + 1
                For Y = Y2 To Y1
                    If Estinto(X1, Y) = True Then QEstintiInColonna = QEstintiInColonna + 1
                    QCelleInColonna = QCelleInColonna + 1
                Next
                'Se la PRIMA casella selezionata NON è estinta
                '...e se l'ULTIMA casella selezionata NON è estinta
                '...e se la quantità delle celle estinte è uguale alle celle che fanno da ponte,
                'ALLORA la selezione è valida
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    If QEstintiInColonna = QCelleInColonna - 2 Then
                        AdiacenteAltoAPonte = True
                    End If
                End If
                'MsgBox("Controllo Alto: " & "QEstintiInColonna = " & QEstintiInColonna & vbCrLf & "QCelleInColonna = " & QCelleInColonna)
            End If
    
            'Basso a ponte        
            If X1 = X2 And Y1 < Y2 Then
                'Controllo le celle interne al segmennto tra le 2 celle selezionate
                Dim QEstintiInColonna As Integer = 0 'resetto per contare
                Dim QCelleInColonna As Integer = 0 '= r2 - r1
                For Y = Y1 To Y2 Step 1
                    If Estinto(X1, Y) = True Then QEstintiInColonna = QEstintiInColonna + 1
                    QCelleInColonna = QCelleInColonna + 1
                Next
                'Se la PRIMA casella selezionata NON è estinta
                '...e se l'ULTIMA casella selezionata NON è estinta
                '...e se la quantità delle celle estinte è uguale alle celle che fanno da ponte,
                'ALLORA la selezione è valida
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    If QEstintiInColonna = QCelleInColonna - 2 Then
                        AdiacenteBassoAPonte = True
                    End If
                End If
                'MsgBox("Controllo Basso: " & "QEstintiInColonna = " & QEstintiInColonna & vbCrLf & "QCelleInColonna = " & QCelleInColonna)
            End If
    
            'Sinistra a ponte
            If X1 > X2 And Y1 = Y2 Then
                'Controllo le celle interne al segmennto tra le 2 celle selezionate
                Dim QEstintiInRiga As Integer = 0 'resetto per contare
                Dim QCelleInRiga As Integer = 0 '= c1 - c2 + 1
                For X = X2 To X1
                    If Estinto(X, Y1) = True Then QEstintiInRiga = QEstintiInRiga + 1
                    QCelleInRiga = QCelleInRiga + 1
                Next
                'Se la PRIMA casella selezionata NON è estinta
                '...e se l'ULTIMA casella selezionata NON è estinta
                '...e se la quantità delle celle estinte è uguale alle celle che fanno da ponte,
                'ALLORA la selezione è valida
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    If QEstintiInRiga = QCelleInRiga - 2 Then
                        AdiacenteSinistraAPonte = True
                    End If
                End If
                'MsgBox("Controllo Sinistra: " & "QEstintiInRiga = " & QEstintiInRiga & vbCrLf & "QCelleInRiga = " & QCelleInRiga)
            End If
            'End If
    
            'Destra a ponte
            If X1 < X2 And Y1 = Y2 Then
                'Controllo le celle interne al segmennto tra le 2 celle selezionate
                Dim QEstintiInRiga As Integer = 0 'resetto per contare
                Dim QCelleInRiga As Integer = 0 ' = c1 - c2 + 1
                Dim X As Integer = 0
                For X = X1 To X2
                    If Estinto(X, Y1) = True Then QEstintiInRiga = QEstintiInRiga + 1
                    QCelleInRiga = QCelleInRiga + 1
                Next
                'Se la PRIMA casella selezionata NON è estinta
                '...e se l'ULTIMA casella selezionata NON è estinta
                '...e se la quantità delle celle estinte è uguale alle celle che fanno da ponte,
                'ALLORA la selezione è valida
                If Estinto(X1, Y1) = False And Estinto(X2, Y2) = False Then
                    If QEstintiInRiga = QCelleInRiga - 2 Then
                        AdiacenteDestraAPonte = True
                    End If
                End If
                'MsgBox("Controllo Destra: " & "QEstintiInRiga = " & QEstintiInRiga & vbCrLf & "QCelleInRiga = " & QCelleInRiga)
            End If
    
            ''Stessa casella        
            'If X1 = X2 And Y1 = Y2 Then
            '    StessaCasella = True
            'End If
    
            '*****************
            'ADIACENZA A PONTE
            '*****************
            If StessaCasella = False And (AdiacenteAltoAPonte = True Or AdiacenteBassoAPonte = True Or AdiacenteSinistraAPonte = True Or AdiacenteDestraAPonte = True) Then AdiacenzaCorrettaAPonte = True
            '*****************
    
            '============================================================================
    
            '=========================
    
            'Aggiorno il testo delle informazioni e lo visualizzo nella casella di testo
            Test()
    
    
    
            '=====================================================================
            'CONTROLLO DELLE COMBINAZIONI AMMESSE PER VALORE CONTENUTO NELLE CELLE
            '=====================================================================
            If (AdiacenzaCorrettaSemplice = True) Or (AdiacenzaCorrettaAPonte = True) Then
                'Se il valore delle 2 celle è identico
                '...oppure la somma dei loro valori è 10
                'allora 
                '...la combinazione è ammessa come vincente per valore            
                If Valore1 = Valore2 Or (Valore1 + Valore2 = 10) Then
                    'DGV1.CurrentCell.Style.BackColor = Color.White
                    DGV1.Item(X1, Y1).Style.BackColor = Color.White
                    DGV1.Item(X2, Y2).Style.BackColor = Color.White
                    DGV1.Item(X1, Y1).Style.ForeColor = Color.DarkGray
                    DGV1.Item(X2, Y2).Style.ForeColor = Color.DarkGray
                    Estinto(X1, Y1) = True
                    Estinto(X2, Y2) = True
                End If
                If Valore1 = Valore2 Then Punti = Punti + Valore1
                If Valore1 + Valore2 = 10 Then Punti = Punti + 10
                '==========================================            
            End If
            '=====================================================================
    
            '===========================================================
            'ESTINZIONE DELLE CELLE 2 SCELTE AI VERTICI DELLA SELEZIONE
            '===========================================================
            If AdiacenzaCorrettaAPonte = True Then
                If AdiacenteSinistraAPonte = True Then
                    For Y = Y2 To Y1
                        If Estinto(X1, Y) = False Then
                            Estinto(X1, Y) = True
                            DGV1.Item(X1, Y).Style.BackColor = Color.White
                            DGV1.Item(X1, Y).Style.ForeColor = Color.DarkGray
                        End If
                    Next
                End If
    
                If AdiacenteBassoAPonte = True Then
                    For Y = Y2 To Y1
                        If Estinto(X1, Y) = False Then
                            Estinto(X1, Y) = True
                            DGV1.Item(X1, Y).Style.BackColor = Color.White
                            DGV1.Item(X1, Y).Style.ForeColor = Color.DarkGray
                        End If
                    Next
                End If
    
                If AdiacenteSinistraAPonte = True Then
                    For X = X2 To X1
                        If Estinto(X, Y1) = False Then
                            Estinto(X, Y1) = True
                            DGV1.Item(X, Y1).Style.BackColor = Color.White
                            DGV1.Item(X, Y1).Style.ForeColor = Color.DarkGray
                        End If
                    Next
                End If
    
                If AdiacenteDestraAPonte = True Then
                    For X = X1 To X2
                        If Estinto(X, Y1) = False Then
                            Estinto(X, Y1) = True
                            DGV1.Item(X, Y1).Style.BackColor = Color.White
                            DGV1.Item(X, Y1).Style.ForeColor = Color.DarkGray
                        End If
                    Next
                End If
                'Punteggio
                QCelleEstinte = QCelleEstinte + 2
            End If
            '===========================================================
    
            'Aggiorno il testo delle informazioni e lo visualizzo nella casella di testo
            Test()
    
        End Sub
    
        Private Sub BT_RIMAPPA_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_RIMAPPA.Click
            '=============
            '>>>>> RIMAPPA
            '=============
            RIMAPPA()
            '=============
        End Sub
    
        Sub RIMAPPA()
    
            'If DGV1.Rows.Count > 0 Then
            'End If
    
            'If DGV1.Columns.Count > 0 Then
            'End If
    
            '===================
            'POPOLAZIONE GRIGLIA
            '===================
            Dim NumeroCasuale As New Random
    
            For Y As Integer = 0 To QRighe - 1
                For X As Integer = 0 To QColonne - 1
                    'Se la cella è estinta allora non la modifico
                    '...altrimenti la modifico con nuovo valore nel contenuto
                    If Estinto(X, Y) <> True Then
                        matrice(X, Y) = NumeroCasuale.Next(1, 10)
                        DGV1.Item(X, Y).Value = matrice(X, Y)
                        Estinto(X, Y) = False 'False = Indica che la cella è ancora giocabile , True = Estinto non considera il numero                
                    End If
                Next
            Next
            '===================
    
            DGV1.RowsDefaultCellStyle.BackColor = Color.Yellow
    
            X1 = DGV1.CurrentCell.ColumnIndex
            Y1 = DGV1.CurrentCell.RowIndex
    
            'Incremento il contatore delle Rimappature e richiamo il testo di informazioni
            QRimappature = QRimappature + 1
            Test()
    
        End Sub
    
        '====
        'TEST\
        '=====
        Private Sub BT_ControlloEstinzioni_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_ControlloEstinzioni.Click
            'Rintraccio tutte le celle che fino al momento
            '... sono state estinte e le coloro di rosso
    
            '===================
            'Cotrollo estinzioni
            '===================        
            For Y As Integer = 0 To QRighe - 1
                For X As Integer = 0 To QColonne - 1
                    If Estinto(X, Y) = False Then DGV1.Item(X, Y).Style.BackColor = Color.Yellow
                    If Estinto(X, Y) = True Then DGV1.Item(X, Y).Style.BackColor = Color.Red
                Next
            Next
            '===================
    
        End Sub
        '======
    
    
        Private Sub BT_NuovaPartita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_NuovaPartita.Click
            MsgBox("Da Fare qui il reset della griglia per la nuova partita")
            '-Eliminare tutte le colonne e le righe
            '-Resettare i punteggi e gli stati delle celle
            '-Prelevare l'informazione dalle impostazioni sulle nuove quantità delle celle in riga e in colonna
            '-Prelevare l'informazione dalle impostazioni sul numero del valore massimo e minimo che la cella può contenere (Esempio da 1 a 10, da 0 a 100, da 25 a 35)
            '-Creare la nuova griglia
            '-Popolare la griglia richiamando in automatico la procedura: "Rimappa"
    
    
            'MinValore = Nuovo valore minimo prelevato dalle impostazioni
            'MaxValore = Nuovo valore massimo prelevato dalle impostazioni
            'QColonne = Nuovo valore da impostazioni
            'QRighe = Nuovo valore da impostazioni
            'RIMAPPA()
        End Sub
    End Class
    
    
  • Re: Sunny seeds

    Io lo provato e a volte nella selezione da errore, io ho messo la verifica delle coordinate in e sembra funzionare ma forse sono stato molto fortunato
    
                Try
    
                Catch ex As Exception
    
                End Try
    
    comunque bisognerebbe convertirlo per vb net 2010 o superiore, perchè questo codice è per vb 6
  • Re: Sunny seeds

    E' un thread di settembre 2013 ... forse non ha proprio senso rispondere dopo 6 mesi ...

    E magari a "giovanni muchacha" non importa ...
Devi accedere o registrarti per scrivere nel forum
12 risposte