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.运行结果

效果图如下:
结果
有什么好的建议或者问题可以在下方留言。

  • 36
    点赞
  • 254
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思维矩阵K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值