通过游戏学习面向对象编程-c#版

在4月的博客中通过游戏学习java面向对象编程(1)使用java来开发了一个小游戏,通过这个游戏我们初步介绍了java的继承,二维数组

以及swing的事件机制。

最近可能要开始教s1了。所以必须要准备一下C#。

首先需要一个Button,这个Button如果用java可以从swing的jbutton继承而来。但是我们的button要会变颜色。

并且为了后边的需要,我们最好给它2个属性,用来表示x,y坐标。

在c#中我们如何自定义呢?先看代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

//author:pengzj

namespace PengzjDll
{
    public class MyButton:Button

    {    

  public MyButton(int x,int y)
        {
            this.x = x;
            this.y = y;
            this.BackColor = Color.Yellow;
        }
        private int x;

        public int X
        {
            get { return x; }
            set { x = value; }
        }
        private int y;

        public int Y
        {
            get { return y; }
            set { y = value; }
        }

        //改变颜色
        public void changeColor()
        {
            if (this.BackColor != Color.Pink)
            {
                this.BackColor = Color.Pink;
            }
            else
            {
                this.BackColor = Color.Yellow;

            }
        }
    }
}

然后再新建一个Form。做这个的时候,遇到一个问题,如何构造一个5行5列的按钮矩阵。呵呵,c#不擅长的我,为此查了vs的帮助,帮助文档好强大

一下就找到了tabelLayou这个可以自定义布局的东东。

且看我们是如何通过代码添加5行5列25个按钮到form中去的。

private void InitButtons()
     {
         myButtons = newPengzjDll.MyButton[5, 5];
         for (int i = 0; i < 5; i++)
         {
             for (int j = 0; j < 5; j++)
             {
                 myButtons[i, j] = new MyButton(i , j );

                  //添加事件委托                   
                 myButtons[i, j].Click += new System.EventHandler(this.buttonmy_Click);

                 //添加button到tableLayoutpanel中布局
                 this.tableLayoutPanel1.Controls.Add(myButtons[i, j], i, j);
                 //让按钮充满整个网格
                 myButtons[i, j].Dock = System.Windows.Forms.DockStyle.Fill;
                 //让边界设为0
                 myButtons[i,j].Margin=new System.Windows.Forms.Padding(0);
                 myButtons[i, j].Enabled = false;
             }

         }

     }

以上代码是整个程序非常重要的部分。大家仔细看代码和注释。

其中事件的代码如下。这个事件就是以上的button委托来调用的的。

private void buttonmy_Click(object sender, EventArgs e)
    {
        step++;
        labelStep.Text = step.ToString();
        MyButton btn = (MyButton)sender;
        //MessageBox.Show(btn.X+","+btn.Y);
        changeRound(btn);
        if (isWin()) //isWin()方法检测是否所有的按钮都已经变色。省略
        {
            EnableAllButtons(false);
            timerCount.Stop();
            MessageBox.Show("恭喜,恭喜,你搞定了");

        }
    }

ok.关键的问题已经搞定了,剩下的相邻按钮变色,检测是否赢等和java完全一样,我是直接复制的java改的。大家自己去看吧。

最后运行的结果见下图:

通过游戏学习面向对象编程-c#版_第1张图片

Technorati 标签: c# , 委托 , tableLayout , pengzj

这里不能上传源代码大家到我的51cto博客去下载吧。

你可能感兴趣的:(面向对象,C#,委托,休闲,c#自定义布局)