Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Drawing;
- using System.Windows.Forms;
- namespace Mine
- {
- static class Program
- {
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MainForm(10, 10, 10));
- }
- }
- class MineField : CheckBox
- {
- bool isMile;
- public MineField()
- {
- this.Appearance = Appearance.Button;
- this.Width = this.Height;
- this.TextAlign = ContentAlignment.MiddleCenter;
- }
- public static void SetMines(MineField[,] MineFields, int MineCount)
- {
- Random rand = new Random();
- var Temp = new List<int>(Enumerable.Range(0, MineFields.Length));
- for (int i = Temp.Count - 1; i > 0; --i)
- {
- int t = Temp[i], n = rand.Next(i + 1);
- Temp[i] = Temp[n];
- Temp[n] = t;
- }
- Temp.RemoveRange(MineCount, MineFields.Length - MineCount);
- foreach (int n in Temp)
- MineFields[n / MineFields.GetLength(1), n % MineFields.GetLength(1)].isMile = true;
- }
- static bool isVaild(int row, int col, MineField[,] MineFields)
- {
- return col >= 0 && col < MineFields.GetLength(1)
- && row >= 0 && row < MineFields.GetLength(0);
- }
- IEnumerable<MineField> MineFieldsRound()
- {
- int rowNow = this.Top / 30, colNow = this.Left / 30;
- MainForm frmMain = (MainForm)this.FindForm();
- if (isVaild(rowNow - 1, colNow - 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow - 1, colNow - 1];
- if (isVaild(rowNow - 1, colNow , frmMain.MineFields)) yield return frmMain.MineFields[rowNow - 1, colNow ];
- if (isVaild(rowNow - 1, colNow + 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow - 1, colNow + 1];
- if (isVaild(rowNow , colNow - 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow , colNow - 1];
- if (isVaild(rowNow , colNow + 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow , colNow + 1];
- if (isVaild(rowNow + 1, colNow - 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow + 1, colNow - 1];
- if (isVaild(rowNow + 1, colNow , frmMain.MineFields)) yield return frmMain.MineFields[rowNow + 1, colNow ];
- if (isVaild(rowNow + 1, colNow + 1, frmMain.MineFields)) yield return frmMain.MineFields[rowNow + 1, colNow + 1];
- yield break;
- }
- protected override void OnClick(EventArgs e)
- {
- if (this.Checked)
- return;
- MainForm frmMain = (MainForm)this.FindForm();
- if (isMile)
- frmMain.Text = "扫雷:游戏结束,你输了";
- else
- {
- this.Checked = true;
- int MineCount = 0;
- foreach (MineField field in this.MineFieldsRound())
- MineCount += field.isMile ? 1 : 0;
- if (MineCount != 0)
- {
- this.Text = MineCount.ToString();
- int count = 0;
- foreach (MineField field in frmMain.MineFields)
- count += field.Checked ? 0 : 1;
- if (count == 10)
- {
- frmMain.Text = "扫雷:游戏结束,你赢了";
- return;
- }
- }
- else
- {
- foreach (MineField field in this.MineFieldsRound())
- field.OnClick(e);
- }
- }
- }
- }
- class MainForm : Form
- {
- public MineField[,] MineFields { get; private set; }
- public MainForm(int RowCount, int ColCount, int MineCount)
- {
- TableLayoutPanel layout = new TableLayoutPanel();
- MineFields = new MineField[RowCount, ColCount];
- layout.RowCount = RowCount;
- layout.ColumnCount = ColCount;
- for (int row = 0; row != RowCount; ++row)
- {
- for (int col = 0; col != ColCount; ++col)
- {
- MineField btn = new MineField();
- layout.Controls.Add(btn);
- MineFields[row, col] = btn;
- }
- }
- MineField.SetMines(MineFields, MineCount);
- layout.Dock = DockStyle.Fill;
- layout.AutoSize = true;
- this.Controls.Add(layout);
- this.Text = "扫雷";
- this.MaximizeBox = false;
- this.AutoSizeMode = AutoSizeMode.GrowAndShrink;
- this.AutoSize = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement