首页 > 编程 > C# > 正文

C#十五子游戏编写代码

2020-01-24 00:40:27
字体:
来源:转载
供稿:网友

本文实例为大家分享了C#十五子游戏的具体代码,供大家参考,具体内容如下

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 WindowsFormsApplication15{ public partial class Form1 : Form {  public Form1()  {   InitializeComponent();  }  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 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]);//交换两个按钮位置   }  }  //生成所有按钮函数  void GenerateAllButtons()  {   int x0 = 100, y0 = 10, w = 45, d = 50;   for (int r = 0; r < N; r++)   {    for (int c = 0; c < N; c++)    {     int num = r * N + c;     Button btn = new Button();     btn.Text = (num + 1).ToString();//设置按钮显示的数字     btn.Top = y0 + r * d;//设置按钮的左边缘与容器的上边缘之间的距离     btn.Left = x0 + c * d;//设置按钮的左边缘与容器的左边缘之间的距离     btn.Width = w;//按钮宽度     btn.Height = w;//按钮高度     btn.Visible = true;//是否显示按钮     btn.Tag = r * N + c;//Tag属性是给程序员自己用的,做点标记,类似于按钮的ID,此处这个数据用来表示它所在的行列位置     //注册事件     btn.Click += new EventHandler(btn_click);     buttons[r, c] = btn;//放到数组中     this.Controls.Add(btn);//加到界面上    }   }   buttons[N - 1, N - 1].Visible = false;//定义最后一个按钮不可见  }  //交换两个按钮函数  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;  }  //按钮点击事件处理  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 r = 0; r < N; r++)   {    for (int c = 0; c < N; c++)    {     if (!buttons[r,c].Visible)     {      return buttons[r, c];     }    }   }   return null;  }  //判断是否相邻函数  bool IsNeighbor(Button btnA,Button btnB)  {   int a = (int)btnA.Tag;//获取Tag中保存的位置信息(0-15的值)   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;  }  private void Btn_Click(object sender, EventArgs e)  {   throw new NotImplementedException();  } }}

效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表