2 qq614097636 qq614097636 于 2014.10.07 18:19 提问

急求 怎样用WindowsForm 编写 别踩白块??

点击下落最简单的功能就可以 ,带点注释,谢谢。。。。。。。。。

1个回答

ftz514396491
ftz514396491   2014.10.11 09:49

不会贴图...
界面就是一个form里一个大的mainPanel,然后这个Panel里有4*4的16个子Panel,初始化时随机4个数分别设置每一行中随机一个panel的背景色为灰色,然后最后一行添加了点击事件,点击白块时提示失败并初始化,点击灰色块时上面三行的灰色块下移,第一行再次随机一个Panel的背景色设置成灰色,以此反复。
功能是这样的,其他的地方按照你自己的想法去改吧。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace biecaibaikuai
{
public partial class Form1 : Form
{
#region 变量
private int firstRow;
private int secRow;
private int thrRow;
private int fourRow;
private Random rd = new Random();
#endregion

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        init();
    }

    #region 初始化
    private void init()
    {
        // 设置所有panel背景色为白色
        foreach (Control ctl in mainPanel.Controls)
        {
            ctl.BackColor = Color.White;
        }

        firstRow = rd.Next(1, 4);// 第一行随机数
        secRow = rd.Next(1, 4);// 第二行随机数
        thrRow = rd.Next(1, 4);// 第三行随机数
        fourRow = rd.Next(1, 4);// 第四行随机数
        this.Controls.Find("fPanel" + firstRow, true)[0].BackColor = Color.Gray;// 设置第一行随机一个panel背景色为灰色
        this.Controls.Find("sPanel" + secRow, true)[0].BackColor = Color.Gray;// 设置第二行随机一个panel背景色为灰色
        this.Controls.Find("tPanel" + thrRow, true)[0].BackColor = Color.Gray;// 设置第三行随机一个panel背景色为灰色
        this.Controls.Find("foPanel" + fourRow, true)[0].BackColor = Color.Gray;// 设置第四行随机一个panel背景色为灰色
    }
    #endregion

    #region 最后一行panel点击事件处理
    private void foPanel1_Click(object sender, EventArgs e)
    {
        playGame((Panel)sender);
    }

    private void foPanel2_Click(object sender, EventArgs e)
    {
        playGame((Panel)sender);
    }

    private void foPanel3_Click(object sender, EventArgs e)
    {
        playGame((Panel)sender);
    }

    private void foPanel4_Click(object sender, EventArgs e)
    {
        playGame((Panel)sender);
    }
    #endregion

    #region 游戏逻辑处理
    /// <summary>
    /// 游戏逻辑处理
    /// </summary>
    /// <param name="pl">被点击的panel</param>
    private void playGame(Panel pl)
    {
        if (pl.BackColor != Color.Gray)// 点到白块
        {
            MessageBox.Show("失败!");
            init();// 重新初始化
        }
        else
        {
            // 清空初始化设置的panel背景色
            this.Controls.Find("fPanel" + firstRow, true)[0].BackColor = Color.White;
            this.Controls.Find("sPanel" + secRow, true)[0].BackColor = Color.White;
            this.Controls.Find("tPanel" + thrRow, true)[0].BackColor = Color.White;
            pl.BackColor = Color.White;

            // 之前的随机数按行下移
            fourRow = thrRow;
            thrRow = secRow;
            secRow = firstRow;
            // 第一行再次随机生成一个数
            firstRow = rd.Next(1, 4);
            // 再次设置panel的背景色
            this.Controls.Find("fPanel" + firstRow, true)[0].BackColor = Color.Gray;
            this.Controls.Find("sPanel" + secRow, true)[0].BackColor = Color.Gray;
            this.Controls.Find("tPanel" + thrRow, true)[0].BackColor = Color.Gray;
            this.Controls.Find("foPanel" + fourRow, true)[0].BackColor = Color.Gray;
        }
    }
    #endregion
}

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!