一盘游戏刚开始,布局一定是不能有直接可消的排列,为此要生成一个横竖都无连续3个相同动画元素的布局,就要用到随机生成,还要有检查重复的功能。
1.随机生成元素代码:
private void 布局生成()
{
int 列数 = 0, 行数 = 0, 数量 = 19;
while (行数 < 数量 - 2)
{
列数 = 0;
while (列数 < 数量)
{
int 随机数 = new Random(DateTime.Now.Millisecond).Next(100, 119);
if (列检查(行数, 列数, 随机数))
{
玩无限消乐.Rows[行数].Cells[列数].Tag = 随机数;
玩无限消乐.Rows[行数].Cells[列数++].Value = new Bitmap("动画素材/e" + 随机数.ToString() + ".gif");
}
}
行数++;
}
}
2.检查重复元素代码:
private bool 列检查(int 行数, int 列数, int 随机数)
{
int 重复 = 0;
if (列数 >= 2)
{
int 起列 = 列数 - 2;
while (起列 < 列数)
if ((int)玩无限消乐.Rows[行数].Cells[起列++].Tag == 随机数)
++重复;
}
return 重复 >= 2 ? false : true;
}
首先写了列的重复检查,运行结果发现会有横向连3元素发生,因此,修改相关代码:
private void 布局生成()
{
int 列数 = 0, 行数 = 0, 数量 = 19;
while (行数 < 数量 - 2)
{
列数 = 0;
while (列数 < 数量)
{
int 随机数 = new Random(DateTime.Now.Millisecond).Next(100, 119);
if (检查重复(行数, 列数, 随机数) && 检查重复(行数, 列数, 随机数, false))
{
玩无限消除.Rows[行数].Cells[列数].Tag = 随机数;
玩无限消除.Rows[行数].Cells[列数++].Value = new Bitmap("动画素材/e" + 随机数.ToString() + ".gif");
}
}
行数++;
}
}
private bool 检查重复(int 行数, int 列数, int 随机数, bool 控 = true)
{
int 重复 = 0;/*检查前面2个是否重复,从而生成不连续3个重复的*/
if ((控 ? 列数 : 行数) >= 2)
{
int 起数 = (控 ? 列数 : 行数) - 2;
while (起数 < 列数)
if ((int)玩无限消除.Rows[控 ? 行数 : 起数++].Cells[控 ? 起数++ : 列数].Tag == 随机数)
++重复;
}
return 重复 >= 2 ? false : true;
}
修改窗体初始代码:
private void Form1_Load(object sender, EventArgs e)
{
this.TopMost = true;
//System.Threading.Thread.Sleep(2000);
玩无限消乐.AllowDrop = true;
玩无限消乐.AllowUserToAddRows = false;
玩无限消乐.AllowUserToOrderColumns = false;
玩无限消乐.AllowUserToResizeColumns = false;
玩无限消乐.AllowUserToResizeRows = false;
玩无限消乐.ReadOnly = true;
玩无限消乐.Anchor = (AnchorStyles.Top | AnchorStyles.Left);
//玩无限消乐.Location = new Point(0, 27);
玩无限消乐.BackgroundColor = System.Drawing.Color.Linen;
玩无限消乐.ColumnHeadersVisible = false;
玩无限消乐.MultiSelect = false;
玩无限消乐.RowHeadersVisible = false;
玩无限消乐.ScrollBars = ScrollBars.None;
//玩无限消乐.Capture = true;
玩无限消乐.AutoSize = true;
//玩无限消乐.ColumnCount = 14;
int 列数 = 0, 数量 = 19;
while (列数++ < 数量)
{ DataGridViewImageColumn 新图列 = new DataGridViewImageColumn(); 玩无限消乐.Columns.Add(新图列); }
玩无限消乐.RowCount = 数量 - 2;
玩无限消乐.AutoResizeColumns();
布局生成();
}
运行结果如下图: