C#实现十五子游戏教程

最近由于工作需要,做一个C#的简单程序。学习了一些基础东西先记下来。

主要有:

1.生成初始框架

2.打乱顺序

3.游戏部分,点击按钮后与空白部分交换的只是Text和Visible部分

  const int N = 4; //行列数  Button[,] buttons = new Button[N, N];    private void Form1_Load(object sender, EventArgs e)  {    //产生所有按钮    GenerateAllButtons();  }    private void button1_Click(object sender, EventArgs e)  {    //打乱顺序    Shuffle();  }    //生成按钮  void GenerateAllButtons()  {    int x0 = 100, y0 = 10, w = 45, d = 50;     for( int row = 0; row < N; row++ )      for ( int col = 0; col < N; col++ )      {        int num = row * N + col;  //数字编号        Button btn = new Button();        btn.Text = (num + 1).ToString();        btn.Top = y0 + row * d;        btn.Left = x0 + col * d;        btn.Width = w;        btn.Height = w;        btn.Visible = true;        btn.Tag = row * N + col;  //button位置          //注册button点击事件        btn.Click += new EventHandler(btn_Click);          buttons[row, col] = btn;        this.Controls.Add(btn);      }    buttons[N - 1, N - 1].Visible = false;  }    void Shuffle()  {    Random rnd = new Random();    for (int i = 0; i < 100; i++ )    {      int a = rnd.Next(N);      int b = rnd.Next(N);      int c = rnd.Next(N);      int d = rnd.Next(N);      Swap(buttons[a, b], buttons[c, d]);    }  }  // 进行游戏  private void btn_Click(object sender, EventArgs e)  {    Button btn = sender as Button;    Button blank = FindHiddenButton();      // 判断是否相邻    if ( IsNeighbor(btn, blank) )    {      Swap(btn, blank);      blank.Focus();    }      // 判断是否完成    if ( ResultIsOk() )    {      MessageBox.Show("OK!");    }  }    // 查找空白按钮  Button FindHiddenButton()  {    for (int row = 0; row < N; row++)      for (int col = 0; col < N; col++)      {        if (!buttons[row,col].Visible)        {          return buttons[row, col];        }      }    return null;  }    // 判断是否相邻  bool IsNeighbor(Button btnA, Button btnB)  {    int a = (int)btnA.Tag;    int b = (int)btnB.Tag;    int r1 = a / N, c1 = a % N;    int r2 = b / N, c2 = b % N;      if ( (r1 == r2 && (c1 == c2 + 1 || c1 == c2 - 1))      || (c1 == c2 && (r1 == r2 + 1 || r1 == r2 - 1)) )      return true;    return false;  }    //检查是否完成  bool ResultIsOk()  {    for (int r = 0; r < N; r++)      for (int c = 0; c < N; c++)      {        if (buttons[r, c].Text != (r * N + c + 1).ToString())        {          return false;        }      }    return true;  }  //交换两个按钮  void Swap(Button btna, Button btnb)  {    string t = btna.Text;    btna.Text = btnb.Text;    btnb.Text = t;      bool v = btna.Visible;    btna.Visible = btnb.Visible;    btnb.Visible = v;  }
(0)

相关推荐

  • 五笔输入法教程

    很多朋友对五笔输入法都是一种抗拒心里,并不是他们不想学,而是认为五笔是专业输入法,一定比较难学,同时一看长长的五笔字根表口诀,再对应到130个字根时,就已经决定放弃五笔了,其实五笔学习是一件简单的事情 ...

  • Excel鲜为人知的二十五个技巧

    也许你已经在Excel中完成过上百张财务报表,也许你已利用Excel函数实现过上千次的复杂运算,也许你认为Excel也不过如此,甚至了无新意。但我们平日里无数次重复的得心应手的使用方法只不过是Exce ...

  • 电脑启动加快十五招

    嫌电脑启动太慢是每个电脑迷的共同心病,下面介绍我收集的电脑启动加快十五招,其中有的我并没有试过,共大家讨论。 一、bios的优化设置 在bios设置的首页我们进入“advanced bios feat ...

  • 贴吧为什么要15字 标准的十五字含义是什么

    百度贴吧里总是有人说一大堆的十五字究竟是什么意思呢,对于初出茅庐的贴吧新人来说,是否很纳闷,很疑惑,不用疑惑不用纳闷,小编将为你带来十五字的含义。 标准的十五字含义: 十五字是刷经验用的,回复发帖超过 ...

  • 教大家十五招提升服务器安全等级

    安全十五招,具体介绍请看下文. 1.经常更改系统管理员密码.---->且密码最好是大小写都有 2.定期更新系统补叮---->开启自动更新,并设定到晚上重启. 3.检查系统是否多出超级管理员 ...

  • 如何在PR软件中给视频添加百分之二十五的画中画旋转入点

    今天给大家介绍一下如何在PR软件中给视频添加百分之二十五的画中画旋转入点的具体操作步骤.1. 首先打开电脑上的PR软件,进入主页面后,将想要操作的视频导入软件2. 然后在页面如图位置,点击[效果]选项 ...

  • 欢乐斗地主残局闯关第三十五关

    这一关相对来说有点小难度,一大意就会败北.所以要考虑好怎么出牌哦! 操作方法 01 进入第三十五关,看牌. 02 先将顺子出下去,对方上不了. 03 我们出一根5,对方上一根7. 04 我们拆开Q上( ...

  • 逆水寒奇遇任务合集 十五 雨中奇缘、蛊底乾坤

    逆水寒奇遇任务非常多,今天给大家介绍逆水寒奇遇合集之 雨中奇缘.蛊底乾坤的触发方法 雨中奇缘 01 坐标:杭州断桥(513,457)(这个位置不固定只是为了让你找到断桥) 02 触发条件:下雨的时候在 ...

  • 益智游戏《机械迷城》第十五关视频图文攻略

    益智游戏<机械迷城>第十五关视频图文攻略 步骤/方法 01 上楼后来到这里接着来这里,再点旁边的的红色按钮. 02 接下来的详细操作 上半部分具体操作 03 下半部分具体操作 04 然后把 ...