在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改的。大家自己去看吧。
最后运行的结果见下图:
这里不能上传源代码大家到我的51cto博客去下载吧。