⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 软件名称:挖雷 游戏版 本:1.01编程语言:Visual Studio .NET C# (Beta 2)调试环境:WINDOWS 2000 Professional运行环境:需要 Microsoft
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace MineClearance
{
	/// <summary>
	/// Summary description for Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
		private System.Windows.Forms.MainMenu mainMenu1;
		private System.Windows.Forms.MenuItem menuItem1;
		private System.Windows.Forms.MenuItem menuItem2;
		private System.Windows.Forms.MenuItem menuItem3;
		private System.Windows.Forms.MenuItem menuItem4;
		private System.Windows.Forms.MenuItem menuItem5;
		private System.Windows.Forms.MenuItem menuItem6;
		private System.Windows.Forms.MenuItem menuItem7;
		private System.Windows.Forms.MenuItem menuItem9;
		private System.Windows.Forms.MenuItem menuItem12;
		private System.Windows.Forms.MenuItem menuItem13;
		private System.Windows.Forms.MenuItem menuItem14;
		private System.ComponentModel.IContainer components;

		private FaceControl faceControl1;
		private MineCountControl mineCountControl1;
		private TimerControl timerControl1;

		private int [ , ] Mine;//==-2时,表示这个地雷已经爆炸;==-1时,代表这个位置是地雷;否则代表周围的地雷的数量
		private int [ , ] Turn;//==-1 表示这个位置已经翻开;==0 表示这个位置没有翻开;==1 表示这个位置插上红旗;
		private int BoardWidth;//宽度
		private int BoardHeight;//高度
		private uint MineCount;
		private Point MP = new Point(0, 0);//用来记录鼠标点击的方格
		private bool GameStartMark;//游戏开始标志
		private uint Count
		{
			get
			{
				return MineCount;
			}
			set
			{
				MineCount = value;
				mineCountControl1.mineCount = (int)value;
			}
		}

		public Form1()
		{
			//
			// Required for Windows Form Designer support
			//
			InitializeComponent();

			//
			// TODO: Add any constructor code after InitializeComponent call
			//
			mineCountControl1 = new MineCountControl();
			faceControl1 = new FaceControl();
			faceControl1.Click += new EventHandler(ClickFace);
			timerControl1 = new TimerControl();
			timerControl1.Rouse += new EventHandler(RouseTime);
			timerControl1.rouseTime = 999;
			Reset(9, 9, 10);
			this.CenterToScreen();

			this.Controls.Add(faceControl1);
			this.Controls.Add(mineCountControl1);
			this.Controls.Add(timerControl1);
		}

		/// <summary>
		/// Clean up any resources being used.
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
			this.menuItem9 = new System.Windows.Forms.MenuItem();
			this.menuItem4 = new System.Windows.Forms.MenuItem();
			this.menuItem5 = new System.Windows.Forms.MenuItem();
			this.menuItem6 = new System.Windows.Forms.MenuItem();
			this.menuItem7 = new System.Windows.Forms.MenuItem();
			this.menuItem1 = new System.Windows.Forms.MenuItem();
			this.menuItem3 = new System.Windows.Forms.MenuItem();
			this.menuItem12 = new System.Windows.Forms.MenuItem();
			this.menuItem2 = new System.Windows.Forms.MenuItem();
			this.menuItem13 = new System.Windows.Forms.MenuItem();
			this.menuItem14 = new System.Windows.Forms.MenuItem();
			this.mainMenu1 = new System.Windows.Forms.MainMenu();
			// 
			// menuItem9
			// 
			this.menuItem9.Index = 5;
			this.menuItem9.Text = "-";
			// 
			// menuItem4
			// 
			this.menuItem4.Index = 2;
			this.menuItem4.Text = "初级 (&B)";
			this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
			// 
			// menuItem5
			// 
			this.menuItem5.Index = 1;
			this.menuItem5.Text = "-";
			// 
			// menuItem6
			// 
			this.menuItem6.Index = 3;
			this.menuItem6.Text = "中级 (&I)";
			this.menuItem6.Click += new System.EventHandler(this.menuItem6_Click);
			// 
			// menuItem7
			// 
			this.menuItem7.Index = 4;
			this.menuItem7.Text = "高级 (&E)";
			this.menuItem7.Click += new System.EventHandler(this.menuItem7_Click);
			// 
			// menuItem1
			// 
			this.menuItem1.Index = 0;
			this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem3,
																					  this.menuItem5,
																					  this.menuItem4,
																					  this.menuItem6,
																					  this.menuItem7,
																					  this.menuItem9,
																					  this.menuItem12});
			this.menuItem1.Text = "游戏(&G)";
			// 
			// menuItem3
			// 
			this.menuItem3.Index = 0;
			this.menuItem3.Shortcut = System.Windows.Forms.Shortcut.F2;
			this.menuItem3.Text = "开局 (&N)";
			this.menuItem3.Click += new System.EventHandler(this.menuItem3_Click);
			// 
			// menuItem12
			// 
			this.menuItem12.Index = 6;
			this.menuItem12.Shortcut = System.Windows.Forms.Shortcut.CtrlX;
			this.menuItem12.Text = "退出 (&X)";
			this.menuItem12.Click += new System.EventHandler(this.menuItem12_Click);
			// 
			// menuItem2
			// 
			this.menuItem2.Index = 1;
			this.menuItem2.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem13,
																					  this.menuItem14});
			this.menuItem2.Text = "帮助(&H)";
			// 
			// menuItem13
			// 
			this.menuItem13.Index = 0;
			this.menuItem13.Shortcut = System.Windows.Forms.Shortcut.F1;
			this.menuItem13.Text = "使用帮助 (&F)";
			this.menuItem13.Click += new System.EventHandler(this.menuItem13_Click);
			// 
			// menuItem14
			// 
			this.menuItem14.Index = 1;
			this.menuItem14.Text = "关于扫雷… (&A)";
			this.menuItem14.Click += new System.EventHandler(this.menuItem14_Click);
			// 
			// mainMenu1
			// 
			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuItem1,
																					  this.menuItem2});
			// 
			// Form1
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(10, 23);
			this.BackColor = System.Drawing.Color.Gainsboro;
			this.ClientSize = new System.Drawing.Size(355, 277);
			this.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
			this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
			this.MaximizeBox = false;
			this.Menu = this.mainMenu1;
			this.Name = "Form1";
			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
			this.Text = "扫雷";

		}
		#endregion

		/// <summary>
		/// The main entry point for the application.
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new Form1());
		}

		//鼠标坐标转换成雷区方格的坐标
		private Point MToA(int x, int y)
		{
			x -= 13; y -= 53;
			if(x < 0 || x > BoardWidth * 20 || y < 0 || y > BoardWidth * 20 )
			{
				throw new Exception();
			}
			x = x / 20;
			y = y / 20;
			return new Point(x , y);
		}

		//鼠标坐标转换成雷区绝对坐标,进行坐标越界处理
		private Point MToAT(int x, int y)
		{
			x = (x - 13) / 20;
			y = (y - 53) / 20;
			if(x < 0) x = 0;
			if(x > BoardWidth - 1) x = BoardWidth - 1;
			if(y < 0) y = 0;
			if(y > BoardHeight -1) y = BoardHeight -1;
			return new Point(x , y);
		}

		//判断一点是否在一区域内
		private bool InBox(System.Drawing.Rectangle rec1, System.Drawing.Point p1)
		{
			if( (rec1.Left <= p1.X && rec1.Top <= p1.Y) && (p1.X <= rec1.Right && p1.Y <= rec1.Bottom) ) return true;
			else return false;
		}
		
		//判断两区域是否交叉(有覆盖之处)
		private bool CrossBox(System.Drawing.Rectangle rec1, System.Drawing.Rectangle rec2)
		{
			//如果rec2有任何一个角在rec1中则视为交叉
			if( InBox(rec1, new Point(rec2.Left, rec2.Top)) == true) return true;
			if( InBox(rec1, new Point(rec2.Right, rec2.Top)) == true) return true;
			if( InBox(rec1, new Point(rec2.Left, rec2.Bottom)) == true) return true;
			if( InBox(rec1, new Point(rec2.Right, rec2.Bottom)) == true) return true;

			//如果rec1有任何一个角在rec2中则视为交叉
			if( InBox(rec2, new Point(rec1.Left, rec1.Top)) == true) return true;
			if( InBox(rec2, new Point(rec1.Right, rec1.Top)) == true) return true;
			if( InBox(rec2, new Point(rec1.Left, rec1.Bottom)) == true) return true;
			if( InBox(rec2, new Point(rec1.Right, rec1.Bottom)) == true) return true;

			if( (rec1.Left <= rec2.Left && rec2.Right <= rec1.Right) && (rec2.Top <= rec1.Top && rec1.Bottom <= rec2.Bottom) ) return true;
			if( (rec2.Left <= rec1.Left && rec1.Right <= rec2.Right) && (rec1.Top <= rec2.Top && rec2.Bottom <= rec1.Bottom) ) return true;

			return false;
		}

		//画立体方框
		private void ColorBox(int x1, int y1, int x2, int y2, int PenWidth, bool Down, bool Fill, Color FillColor)
		{
			System.Drawing.Graphics g = this.CreateGraphics();
			System.Drawing.Pen p = new Pen(Color.White, 1);//确定画笔的颜色和粗细
			for(; PenWidth > 0; PenWidth --)
			{
				p.Color = (Down == false)? Color.White: Color.Gray;
				g.DrawLine( p, x1, y1, x2, y1);
				g.DrawLine( p, x1, y1, x1, y2);
				p.Color = (Down == false)? Color.Gray: Color.White;
				g.DrawLine( p , x2, y2, x2, y1);
				g.DrawLine( p , x2, y2, x1, y2);
				x1 ++; y1 ++;
				x2 --; y2 --;
			}

			if( Fill == true )	g.FillRectangle(new SolidBrush(FillColor), x1, y1, x2 - x1 + 1, y2 - y1 + 1);
		}

		//自动清除无雷区
		private void ClearBoardMine(int nx, int ny)
		{
			if(InBox(new Rectangle(0,0,BoardWidth-1,BoardHeight-1), new Point(nx, ny)) == false) return;
			if( Mine[ny, nx] == -1 || Turn[ny, nx] == -1) return;
			Turn[ny, nx] = -1;
			ReDraw(new Point(nx, ny), new Point(nx, ny) );
			if( Mine[ny, nx] == 0)
			{
				for(int i=ny-1; i<= ny+1; i++)
				{
					for(int j=nx-1; j<=nx+1; j++)
					{
						ClearBoardMine(j, i);
					}
				}
			}
		}

		//单击笑脸处理
		public void ClickFace(object sender, System.EventArgs e)
		{
			ReStart();
		}

		//超时处理
		public void RouseTime(object sender, System.EventArgs e)
		{
			timerControl1.Stop();
			System.Windows.Forms.MessageBox.Show("时间到了,这次你输了!\n\n没关系,别恢心,请继续努力!","游戏结束");
			ReStart();
		}

		protected override void OnPaint(PaintEventArgs e)
		{
			System.Drawing.Graphics g = e.Graphics;

			ColorBox(0, 0,this.ClientSize.Width, this.ClientSize.Height, 3, false, false, Color.Gainsboro);
			g.FillRectangle(new SolidBrush(Color.Gainsboro), 3, 3, this.ClientSize.Width - 5, 7);
			g.FillRectangle(new SolidBrush(Color.Gainsboro), 3, 3, 7, this.ClientSize.Height - 5);
			g.FillRectangle(new SolidBrush(Color.Gainsboro), this.ClientSize.Width - 9 , 3, 7, this.ClientSize.Height - 5);
			g.FillRectangle(new SolidBrush(Color.Gainsboro), 3, 41, this.ClientSize.Width - 5, 9);
			g.FillRectangle(new SolidBrush(Color.Gainsboro), 3, this.ClientSize.Height - 9, this.ClientSize.Width - 5, 7);
			ColorBox(10, 10, this.ClientSize.Width-10, 40, 2, true, false, Color.Gainsboro);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -