通过游戏学习面向对象编程-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改的。大家自己去看吧。

最后运行的结果见下图:

image

Technorati 标签: , , ,

这里不能上传源代码大家到我的51cto博客通过游戏学习面向对象编程-c#版去下载吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值