Megosztás a következőn keresztül:


Oktatóanyag: Ikonok hozzáadása a megfelelő Játék WinForms-alkalmazáshoz

Ebben a négy oktatóanyagból álló sorozatban egy egyező játékot építünk ki, amelyben a játékos egyezik a rejtett ikonok párjaival.

Az egyező játékban a játékos kiválaszt egy négyzetet egy ikon megjelenítéséhez, majd kiválaszt egy másik négyzetet. Ha az ikonok egyeznek, láthatóak maradnak. Ha nem, a játék elrejti mindkét ikont. Ebben az oktatóanyagban véletlenszerűen rendel hozzá ikonokat a címkékhez. Beállíthatja, hogy rejtettek legyenek, majd megjelenjenek a kijelöléskor.

Ebben a második oktatóanyagban megtanulhatja, hogyan:

  • Adjon hozzá egy véletlenszerű objektumot és egy ikonlistát.
  • Rendeljen hozzá egy véletlenszerű ikont az egyes címkékhez.
  • Adjon hozzá ikonokat megjelenítő eseménykezelőket a címkékhez.

Előfeltételek

Ez az oktatóanyag az előző oktatóanyagra épül, egyező játékalkalmazás létrehozása. Ha még nem végezte el ezt az oktatóanyagot, először ezt kell végighaladni.

Véletlenszerű objektum és ikonlista hozzáadása

Ebben a szakaszban egy megfelelő szimbólumkészletet hoz létre a játékhoz. Minden szimbólum két véletlenszerű cellához lesz hozzáadva az űrlap TableLayoutPanel elemében.

Két objektum létrehozásához new utasításokat kell használnia. Az első egy Random objektum, amely véletlenszerűen választ ki cellákat a TableLayoutPanelben. A második objektum egy List<T> objektum. Tárolja a véletlenszerűen kiválasztott szimbólumokat.

  1. Nyissa meg a Visual Studiót. A MatchingGame projekt az Legutóbbi megnyitásaalatt jelenik meg.

  2. Válassza a Form1.cs, ha C#-ot használ, vagy Form1.vb, ha Visual Basicet használ. Ezután válassza a >Kód megtekintéselehetőséget. Másik lehetőségként válassza az F7 billentyűt, vagy kattintson duplán Form1. A Visual Studio IDE megjeleníti a Form1 kódmodulját.

  3. A meglévő kódban adja hozzá a következő kódot.

    public partial class Form1 : Form
    {
        // Use this Random object to choose random icons for the squares
        Random random = new Random();
    
        // Each of these letters is an interesting icon
        // in the Webdings font,
        // and each icon appears twice in this list
        List<string> icons = new List<string>() 
        { 
            "!", "!", "N", "N", ",", ",", "k", "k",
            "b", "b", "v", "v", "w", "w", "z", "z"
        };
    

Ha C#-ot használ, ügyeljen arra, hogy a kódot a kapcsos zárójel megnyitása után és az osztálydeklaráció (public partial class Form1 : Form) után tegye. Ha Visual Basicet használ, helyezze a kódot közvetlenül az osztálydeklaráció (Public Class Form1) után.

Listaobjektumokkal nyomon követheti a különböző típusú elemeket. A listák tartalmazhatnak számokat, igaz/hamis értékeket, szöveget vagy más objektumokat. A megfelelő játékban a listaobjektum 16 sztringet tartalmaz, egyet a TableLayoutPanel panel minden cellájához. Minden karakterlánc egyetlen karakter, amely megfelel a címkéken lévő ikonoknak. Ezek a karakterek buszként, kerékpárként és másként jelennek meg a Webdings betűtípusban.

Jegyzet

A listák szükség szerint zsugorodhatnak és növekedhetnek, ami ebben a programban fontos.

Ha többet szeretne megtudni a listákról, nézze meg a List<T>-t. Ha c#-ban szeretne egy példát látni, tekintse meg Egy egyszerű listacímű témakört. Ha egy példát szeretne látni a Visual Basicben, olvassa el Egyszerű gyűjtemény használatacímű témakört.

Véletlenszerű ikon hozzárendelése minden címkéhez

A program minden futtatásakor véletlenszerűen hozzárendeli az ikonokat az űrlap Címke vezérlőihez egy AssignIconsToSquares() metódus használatával. Ez a kód a foreach kulcsszót használja C# vagy For Each a Visual Basicben.

  1. Adja hozzá a AssignIconsToSquares() metódust Form1.cs-hez vagy Form1.vb-höz.

    /// <summary>
    /// Assign each icon from the list of icons to a random square
    /// </summary>
    private void AssignIconsToSquares()
    {
        // The TableLayoutPanel has 16 labels,
        // and the icon list has 16 icons,
        // so an icon is pulled at random from the list
        // and added to each label
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            Label iconLabel = control as Label;
            if (iconLabel != null)
            {
                int randomNumber = random.Next(icons.Count);
                iconLabel.Text = icons[randomNumber];
                // iconLabel.ForeColor = iconLabel.BackColor;
                icons.RemoveAt(randomNumber);
            }
        }
    }
    

Ezt a kódot az előző szakaszban hozzáadott kód alatt adhatja meg.

Jegyzet

Az egyik sort szándékosan megjegyzésként fűzik hozzá. Ezt később adja hozzá ebben az eljárásban.

A AssignIconsToSquares() metódus végigfut a TableLayoutPanel összes címkevezérlőjén. Mindegyikhez ugyanazokat az utasításokat futtatja. Az utasítások véletlenszerű ikont húznak le a listáról.

  • Az első sor átalakítja a vezérlő változót egy iconLabelnevű címkévé.
  • A második sor egy if utasítás, amely ellenőrzi, hogy az átalakítás működött-e. Ha az átalakítás működik, a if utasításban lévő utasítások futnak.
  • A if utasítás első sora létrehoz egy randomNumber nevű változót, amely egy véletlenszerű számot tartalmaz, amely az ikonok listájának egyik elemének felel meg. A Next() objektum Random metódusát használja. A Next metódus a véletlenszerű számot adja vissza. Ez a sor a Count listájának tulajdonságát is használja annak meghatározásához, hogy melyik tartományból válassza ki a véletlenszerű számot.
  • A következő sor hozzárendeli az egyik ikont, listaelemeket a címke Text tulajdonságához.
  • A következő sor elrejti az ikonokat. A sor itt ki van kommentelve, így ellenőrizheti a kód többi részét, mielőtt folytatná.
  • A if utasítás utolsó sora eltávolítja az űrlaphoz hozzáadott ikont a listából.
  1. Hívás hozzáadása a AssignIconsToSquares() metódushoz az Form1konstruktorhozForm1.cs. Ez a módszer ikonokkal tölti ki a játéktáblát. A konstruktorok meghívása objektum létrehozásakor történik.

    public Form1()
    {
        InitializeComponent();
    
        AssignIconsToSquares();
    }
    

    Visual Basic esetén adja hozzá a AssignIconsToSquares() metódushívást a Form1_LoadForm1.vb metódusához.

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AssignIconsToSquares()
    End Sub
    

    További információ: Konstruktorok (C# programozási útmutató) vagy Konstruktorok és destruktorok használata.

  2. Mentse a programot, és futtassa. Az egyes címkékhez hozzárendelt véletlenszerű ikonokat tartalmazó űrlapnak kell megjelennie.

    Borravaló

    Ha a Webdings ikonok nem jelennek meg megfelelően az űrlapon, állítsa az űrlapon lévő címkék UseCompatibleTextRendering tulajdonságát True.

  3. Zárja be a programot, majd futtassa újra. Minden címkéhez különböző ikonok vannak rendelve.

    Képernyőkép a véletlenszerű ikonokat megjelenítő egyező játékról.

    Az ikonok most már láthatók, mert nem rejtette el őket. Ha el szeretné rejteni őket a lejátszó elől, beállíthatja az egyes címkék ForeColor tulajdonságát a BackColor tulajdonságával megegyező színre.

  4. Állítsa le a programot. Távolítsa el a megjegyzésjeleket a AssignIconsToSquares() metódus hurokjában lévő megjegyzéssorhoz.

    iconLabel.ForeColor = iconLabel.BackColor;
    

Ha ismét futtatja a programot, úgy tűnik, hogy az ikonok eltűntek. Csak egy kék háttér jelenik meg. Az ikonok véletlenszerűen vannak hozzárendelve, és továbbra is ott vannak.

Eseménykezelők hozzáadása címkékhez

Ebben a megfelelő játékban egy játékos felfed egy rejtett ikont, majd egy másodikat. Ha az ikonok egyeznek, láthatóak maradnak. Ellenkező esetben mindkét ikon ismét el van rejtve.

Ahhoz, hogy a játék így működjön, adjon hozzá egy Click eseménykezelőt, amely a kiválasztott címke színét a háttérnek megfelelően módosítja.

  1. Nyissa meg az űrlapot a Windows Forms Designer. Válassza Form1.cs vagy Form1.vb, majd válassza a Nézet>Tervező.

  2. Válassza ki az első címkevezérlőt, majd kattintson duplán rá, hogy hozzáadjon egy Click nevű eseménykezelőt, a label1 _Click(), a kódhoz.

  3. Ezután tartsa lenyomva a Ctrl billentyűt, miközben kijelöli a többi címkét. Győződjön meg arról, hogy minden címke ki van jelölve.

  4. A Tulajdonságok ablakban válassza az Események gombot, amely villámcsapás. A Kattintás eseményhez válassza a label1_Click mezőben.

    Képernyőkép a Kattintás eseményt megjelenítő Tulajdonságok ablakról.

  5. Válassza az Enter billentyűt. Az IDE hozzáad egy Clicklabel1 _Click() nevű eseménykezelőt a Form1.cs vagy Form1.vbkódhoz. Mivel az összes címkét kiválasztotta, a kezelő az egyes címkékhez van csatlakoztatva.

  6. Töltse ki a kód többi részét.

    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label1_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            clickedLabel.ForeColor = Color.Black;
        }
     }
    

Jegyzet

Ha a label1_Click() kódblokkot másolja és illessze be ahelyett, hogy manuálisan írja be a kódot, mindenképpen cserélje le a meglévő label1_Click() kódot. Különben egy ismétlődő kódblokkba fogsz ütközni.

Válassza a Hibakeresés>Indítsa el a hibakeresést a program futtatásához. Egy üres, kék háttérrel rendelkező űrlapot kell látnia. Válassza ki az űrlap bármelyik celláját. Az egyik ikonnak láthatóvá kell válnia. Folytassa a különböző helyek kiválasztását az űrlapon. Az ikonok kiválasztásakor meg kell jelenniük.

A képernyőképen a Párosító játék egyetlen ikon látható.

Következő lépések

Lépjen tovább a következő oktatóanyagra, amelyből megtudhatja, hogyan módosíthatja a címkéket időzítő használatával.