Condividi tramite


Esercitazione: Visualizzare un messaggio nell'app WinForms del gioco corrispondente

In questa serie di quattro esercitazioni si crea un gioco corrispondente, in cui il giocatore corrisponde alle coppie di icone nascoste.

In questo tutorial, rivedi il gioco delle coppie per mantenere visibili le coppie abbinate e visualizzare un messaggio di congratulazioni quando un giocatore vince.

In questa esercitazione si apprenderà come:

  • Mantenere visibili le coppie.
  • Verificare se un giocatore ha vinto.
  • Provare altre funzionalità.

Prerequisiti

Questa esercitazione si basa su queste esercitazioni precedenti:

  1. Creare un'applicazione di gioco corrispondente
  2. Aggiungere icone alla di gioco corrispondente
  3. Aggiungi un timer al tuo gioco di abbinamento

Mantenere visibili le coppie

Quando un giocatore trova una coppia, il gioco deve reimpostare in modo che non tenga più traccia delle etichette che usano le variabili di riferimento firstClicked e secondClicked. Non deve reimpostare i colori per le due etichette corrispondenti. Tali etichette continuano a essere visualizzate.

  1. Aggiungere l'istruzione if seguente al metodo del gestore eventi label_Click(). Posizionarlo vicino alla fine del codice appena sopra l'istruzione in cui si avvia il timer.
        // If the player gets this far, the timer isn't
        // running and firstClicked isn't null,
        // so this must be the second icon the player clicked
        // Set its color to black
        secondClicked = clickedLabel;
        secondClicked.ForeColor = Color.Black;

        // If the player clicked two matching icons, keep them 
        // black and reset firstClicked and secondClicked 
        // so the player can click another icon
        if (firstClicked.Text == secondClicked.Text)
        {
            firstClicked = null;
            secondClicked = null;
            return;
        }

        // If the player gets this far, the player 
        // clicked two different icons, so start the 
        // timer (which will wait three quarters of 
        // a second, and then hide the icons)
        timer1.Start();
    }
}

L'istruzione if controlla se l'icona nella prima etichetta scelta dal giocatore è uguale all'icona nella seconda etichetta. Se le icone sono uguali, il programma esegue le tre istruzioni. Le prime due istruzioni reimpostano le variabili di riferimento firstClicked e secondClicked. Non tengono più traccia delle etichette. La terza istruzione è un'istruzione return, che ignora il resto delle istruzioni nel metodo senza eseguirle.

  1. Esegui il programma, quindi inizia a scegliere i quadrati nel modulo.

Screenshot del gioco corrispondente creato in questa esercitazione.

Se si sceglie una coppia che non corrisponde, viene attivato l'evento Tick del timer. Entrambe le icone scompaiono.

Se si sceglie una coppia corrispondente, la nuova dichiarazione if viene eseguita. L'istruzione return fa sì che il metodo ignori il codice che avvia il timer. Le icone rimangono visibili.

Verificare se un giocatore ha vinto

Hai creato un gioco divertente. Dopo la vittoria di un giocatore, il gioco dovrebbe terminare. Questa sezione aggiunge un metodo per verificare se il giocatore ha vinto.

  1. Aggiungere un metodo CheckForWinner() alla fine del codice, sotto il gestore eventi timer1_Tick().
/// <summary>
/// Check every icon to see if it is matched, by 
/// comparing its foreground color to its background color. 
/// If all of the icons are matched, the player wins
/// </summary>
private void CheckForWinner()
{
    // Go through all of the labels in the TableLayoutPanel, 
    // checking each one to see if its icon is matched
    foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }

    // If the loop didn’t return, it didn't find
    // any unmatched icons
    // That means the user won. Show a message and close the form
    MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

Il metodo usa un altro ciclo foreach in C# o un ciclo For Each in Visual Basic per scorrere ogni etichetta nel TableLayoutPanel. Controlla il colore dell'icona di ogni etichetta per verificare se corrisponde allo sfondo. Se i colori corrispondono, l'icona rimane invisibile e il giocatore non ha ancora abbinato tutte le icone rimanenti.

In tal caso, il programma usa un'istruzione return per ignorare il resto del metodo. Se il ciclo passa attraverso tutte le etichette senza eseguire l'istruzione return, significa che tutte le icone nel form sono state abbinate. Il programma mostra un MessageBox per congratularsi con il giocatore per la vittoria e quindi chiama il metodo Close() per terminare il gioco.

  1. Fai in modo che il gestore eventi Click dell'etichetta chiami il nuovo metodo CheckForWinner().
// If the player gets this far, the timer isn't
// running and firstClicked isn't null, 
// so this must be the second icon the player clicked
// Set its color to black
secondClicked = clickedLabel;
secondClicked.ForeColor = Color.Black;

// Check to see if the player won
CheckForWinner();

// If the player clicked two matching icons, keep them 
// black and reset firstClicked and secondClicked 
// so the player can click another icon
if (firstClicked.Text == secondClicked.Text)
{
    firstClicked = null;
    secondClicked = null;
    return;
}

Assicurati che il programma verifichi la presenza di un vincitore subito dopo che mostra la seconda icona scelta dal giocatore. Cercare la linea in cui si imposta il colore della seconda icona scelta e quindi chiamare il metodo CheckForWinner() subito dopo tale riga.

  1. Salvare ed eseguire il programma. Gioca il gioco e trova la corrispondenza con tutte le icone. Quando si vince, il programma visualizza un messaggio di congratulazioni.

    Screenshot mostra il gioco di abbinamento con un MessageBox.

    Dopo aver selezionato OK, il gioco corrispondente viene chiuso.

Provare altre funzionalità

Il tuo gioco di abbinamento è stato completato. Puoi aggiungere altre funzionalità per rendere questo gioco più impegnativo e interessante. Ecco alcune opzioni.

  • Sostituire le icone e i colori con quelli scelti.

    Prova a esaminare la proprietà ForeColor dell'etichetta.

  • Aggiungere un timer di gioco che tiene traccia del tempo impiegato dal giocatore per vincere.

    È possibile aggiungere un'etichetta per visualizzare il tempo trascorso nel modulo. Posizionarlo sopra il TableLayoutPanel. Aggiungere un altro timer al form per tenere traccia dell'ora. Usa il codice per avviare il timer quando il giocatore avvia il gioco e arresta il timer dopo che corrispondono alle ultime due icone.

  • Aggiungi un suono quando il giocatore trova una corrispondenza, un altro suono quando il giocatore scopre due icone che non corrispondono e un terzo suono quando il programma nasconde nuovamente le icone.

    Per riprodurre suoni, è possibile usare lo spazio dei nomi System.Media. Per altre informazioni, vedere Riprodurre suoni nell'app Windows Form (C#) o Come riprodurre audio in Visual Basic.

  • Rendere il gioco più difficile ingrandendo la tavola.

    Dovrai fare di più che aggiungere righe e colonne a TableLayoutPanel. È anche necessario considerare il numero di icone che crei.

  • Rendere il gioco più impegnativo nascondendo la prima icona se il giocatore è troppo lento per rispondere.

Passaggi successivi

Felicitazioni! Hai completato questa serie di esercitazioni. Queste attività di programmazione e progettazione sono state eseguite nell'IDE di Visual Studio:

  • Oggetti archiviati, ad esempio icone, in un elenco
  • È stato usato un ciclo in C# o Visual Basic per scorrere un elenco
  • Tenere traccia dello stato usando le variabili di riferimento
  • Creare un gestore eventi per rispondere agli eventi per più oggetti
  • Aggiunto un timer che effettua il conto alla rovescia e avvia un evento

Passa a questo articolo per un approfondimento dettagliato sul Designer di Windows Forms.