c# Windows窗體應用程序設計綜合實例-------小遊戲設計

c# Windows窗體應用程序設計綜合實例(一)匹配遊戲設計

上次的計時器運行效果圖如下:
效果圖
= ------------------------------------------------------------------------------

今天來分享一個綜合實例,設計一個匹配小遊戲。
本次實例步驟較多,切勿搞混。

步驟一 新建項目

1.目的:創建項目並設計佈局表。該表有助於將圖標對齊到有序的 4x4 網格。需設置若干屬性,以改善遊戲板的外觀。
2.項目名稱窗體text屬性改爲“匹配遊戲”(其他名字也行),在size屬性中將窗體大小設置爲550*550。
3. 添加一個TableLayoutPanel 控件,將BackColor屬性設置爲CornflowerBlue。(其他顏色也行,有些屬性的更改可以直接粘貼文本進去設置。);將Dock屬性設置爲Fill(即覆蓋整個窗體),將CellBorderStyle屬性設置爲Inset。
4. 選擇 TableLayoutPanel 右上角的三角形按鈕,以顯示任務菜單。
在任務菜單上,選擇“添加行”兩次以再添加兩行,然後選擇“添加列”兩次以再添加兩列 。
三角形按鈕
圖一 三角形按鈕
菜單
圖二 菜單欄

打開菜單,選擇“編輯行和列”,打開“列和行樣式”窗口 。將列和行的值都設置爲25%(注意設置時,都要保證右側的設置內容爲百分比,現實前面的下拉框可以切換行和列。)
屬性
圖三 屬性設置

設置好了以後,點擊確定,效果應該爲是一個 4x4 網格,包含十六個大小相等的方塊單元格。

5.再向左上角單元格添加一個Label 控件,將BackColor屬性設置爲CornflowerBlue ,將AutoSize屬性設置爲False。,將Dock屬性設置爲Fill ;TextAlign屬性設置爲MiddleCenter” 。圖標顯示在單元格中間;選中Font屬性, 此時應顯示一個省略號 (… ) 按鈕。選擇省略號按鈕,並將“Font”值設置爲“Webdings”,將“Font Style”設置爲“Bold”,並將“Size”設置爲“48” ;text屬性設置爲“c”

6.選擇 Label 控件並將其複製到 TableLayoutPanel 中的下一單元格,保證每個單元格都被複制粘貼完成。注意每個單元格要先選中再粘貼(用快捷鍵ctrl+c、ctrl+v即可)

效果圖:
設置效果

步驟二 添加代碼

1.添加圖標列表

在本步驟中,要爲遊戲創建一組匹配的符號。 每個符號將添加到窗體上 TableLayoutPanel 中的兩個隨機單元格。
查看代碼的方法:在“解決方案資源管理器” 中,選擇“Form1.cs” ,然後在菜單欄上選擇“查看” ,選擇 “代碼” 。
本次需要添加的代碼如下(給Form窗口添加代碼):

public partial class Form1 : Form
{
       Random random = new Random();
    List<string> icons = new List<string>() 
    { 
        "!", "!", "N", "N", ",", ",", "k", "k",
        "b", "b", "v", "v", "w", "w", "z", "z"
};
}

2.分配隨機圖標

以下代碼添加給label控件:

private void AssignIconsToSquares()
{   
    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);
        }
    }
} 


若要用圖標填充遊戲板,你需要在程序啓動時調用 AssignIconsToSquares() 方法。在 Form1 構造函數中 直接添加一條語句。

public Form1()
{
    InitializeComponent();

    AssignIconsToSquares();
}

效果:保存並運行程序。它應該顯示一個窗體,其中每個標籤都分配了隨機圖標。

3.添加事件處理程序

匹配遊戲的運行原理:當玩家選擇一個帶有隱藏圖標的方塊時,程序會通過將圖標顏色更改爲黑色來向玩家顯示該圖標。然後玩家選擇另一個隱藏的圖標。如果圖標互相匹配,則它們保持可見。如果不匹配,則兩個圖標都會再次隱藏。

1.在Windows 窗體設計器”中打開窗體。在“解決方案資源管理器” 中,選擇“Form1.cs” 在菜單欄上,依次選擇“視圖” > “設計器” 。選擇第一個標籤控件以選中它。然後,按住 Ctrl 鍵選擇其他每個標籤,將它們選中。確保選中每個標籤。

2.選擇“屬性” 窗口工具欄上的“事件” 按鈕,在“屬性” 窗口中查看“事件” 頁面。向下滾動到“Click” 事件,在框中輸入“label_Click” ,最後回車一下。
添加的代碼如下:

private void label_Click(object sender, EventArgs e)
{
    Label clickedLabel = sender as Label;

    if (clickedLabel != null)
    {
        
        if (clickedLabel.ForeColor == Color.Black)
            return;

        clickedLabel.ForeColor = Color.Black;
    }
 }

效果:最後運行程序看到一個背景爲藍色的空窗體。在窗體中選擇任意單元格,其中一個圖標應變爲可見。繼續在窗體中選擇不同位置。當選擇圖標時,可以顯示。

4.添加標籤引用

使用下面的代碼向窗體(Form1)中添加標籤引用:

private void label_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;

        // If firstClicked is null, this is the first icon 
        // in the pair that the player clicked,
        // so set firstClicked to the label that the player 
        // clicked, change its color to black, and return
        if (firstClicked == null)
        {
            firstClicked = clickedLabel;
            firstClicked.ForeColor = Color.Black;

            return;
        }
    }
}

效果 :保存並運行程序,選擇其中一個標籤控件,它的圖標將顯示。
效果圖

5.添加計時器

關於計時器,在上次寫的《c# Windows窗體應用程序(四)》有一個關於Timer控件的用法。

在插入Timer控件以後,將計時器的Interval 屬性設置爲 750。雙擊該計時器添加如下代碼:

private void timer1_Tick(object sender, EventArgs e)
{
    timer1.Stop();

      firstClicked.ForeColor = firstClicked.BackColor;
    secondClicked.ForeColor = secondClicked.BackColor;
    firstClicked = null;
    secondClicked = null;
}

若要查看正在使用的新計時器,請轉至代碼編輯器,將以下代碼添加到 label_Click() 事件處理程序方法的頂部和底部。(將兩個 if 語句添加到頂部,將三個語句添加到底部;該方法的其餘部分保持相同。)

private void label_Click(object sender, EventArgs e)
{
    if (timer1.Enabled == true)
        return;

    Label clickedLabel = sender as Label;
    if  (secondClicked !=  null)
        return;

    if (clickedLabel != null)
    {
        if (clickedLabel.ForeColor == Color.Black)
            return;
        if (firstClicked == null)
        {
            firstClicked = clickedLabel;
            firstClicked.ForeColor = Color.Black;
            return;
        }

  
        secondClicked = clickedLabel;
        secondClicked.ForeColor = Color.Black;

       
        timer1.Start();
    }
}


效果:保存並運行程序。選擇一個圖標,它將顯示出來。選擇另一個圖標。 它會短暫顯示,然後兩個圖標都消失。

6.保持對可見

將下面的 if 語句添加到 label_Click() 事件處理程序方法中,緊靠啓動計時器的語句上方代碼的結尾處。

if (firstClicked.Text == secondClicked.Text)
        {
            firstClicked = null;
            secondClicked = null;
            return;
        }
        
        timer1.Start();   

效果:保存並運行程序,然後開始選擇窗體上的圖標。如果選擇的是不匹配的對,則將觸發計時器的事件,兩個圖標都會消失。

7.添加驗證玩家是否獲勝的方法

1.在代碼底部,CheckForWinner() 事件處理程序下方添加一個 timer1_Tick() 方法,如以下代碼所示。

private void CheckForWinner()
{
       foreach (Control control in tableLayoutPanel1.Controls)
    {
        Label iconLabel = control as Label;

        if (iconLabel != null) 
        {
            if (iconLabel.ForeColor == iconLabel.BackColor)
                return;
        }
    }    
       MessageBox.Show("You matched all the icons!", "Congratulations");
    Close();
}

2.讓標籤的 Click 事件處理程序調用新的 CheckForWinner() 方法。 請確保程序在顯示玩家選擇的第二個圖標後立即檢查是否有贏家。 查找設置第二個選中圖標顏色的行,將以下代碼複製到CheckForWinner() 方法中。

secondClicked = clickedLabel;
secondClicked.ForeColor = Color.Black;
CheckForWinner();
if (firstClicked.Text == secondClicked.Text)
{
    firstClicked = null;
    secondClicked = null;
    return;
}

效果:保存並運行程序。 玩遊戲並匹配所有圖標。

3.運行結果

效果圖如下:
結果
有什麼好的建議或者問題可以在下方留言。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章