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

📄 frmmaze.cs

📁 迷宫游戏源码
💻 CS
📖 第 1 页 / 共 2 页
字号:
			this.Controls.AddRange(new System.Windows.Forms.Control[] {
																		  this.statusBar});
			this.Menu = this.mainMenu1;
			this.Name = "frmMaze";
			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
			this.Text = "Solve Mazes with Multiple Threads";
			this.Paint += new System.Windows.Forms.PaintEventHandler(this.frmMaze_Paint);
			this.ResumeLayout(false);

		}
		#endregion

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

		private void frmMaze_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			Graphics g = e.Graphics;
		    g.FillRectangle(Brushes.White, ClientRectangle);
			TheMaze.Draw(g);		
		}

		private void mnuExit_Click(object sender, System.EventArgs e)
		{
			this.Close();
		}

		private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
		{
			TheMaze.Draw(e.Graphics);		
		}

		private void PreviewMenu_Click(object sender, System.EventArgs e)
		{
		 this.printPreviewDialog1.ShowDialog();
		}

		private void PrintMenu_Click(object sender, System.EventArgs e)
		{
		  printDocument1.Print();
		}

		private void DimensionsMenu_Click(object sender, System.EventArgs e)
		{
			DimensionsDialog theDialog = new DimensionsDialog();
			theDialog.numericUpDown1.Value = Maze.kDimension;
			theDialog.numericUpDown2.Value = Cell.kCellSize;
			if (theDialog.ShowDialog() == DialogResult.OK)
			{
				Maze.kDimension = 	(int)theDialog.numericUpDown1.Value;
				Cell.kCellSize =  (int)theDialog.numericUpDown2.Value;
				TheMaze.Initialize();
				TheMaze.Generate();
				SetBounds(this.Left, this.Top, (Maze.kDimension + 8) * Cell.kCellSize + Cell.PADDING, (Maze.kDimension + 12) * Cell.kCellSize + Cell.PADDING + statusBar.Height );
				Invalidate();
			}
		}

		private void ResetMenu_Click(object sender, System.EventArgs e)
		{
			statusBar.Text = "";
			TheMaze.Reset();
			this.Refresh();
		}

		private void SolveSingleThread_Click(object sender, System.EventArgs e)
		{
			// Initialize all necessary variables
			threads = 1;
			threadCount = 0;
			statusBar.Text = "";

			// Clear the maze and refresh the form before we start the clock
			TheMaze.Reset();
			this.Refresh();

			// Set the cursor and start the clock
			this.Cursor = Cursors.WaitCursor;
			startTime = DateTime.Now;

			// Create one thread and start it running
			Thread aThread = new Thread(new ThreadStart(TheMaze.SolveA));
			aThread.Start();
		}

		private void SolveTwoThreads_Click(object sender, System.EventArgs e)
		{
			// Run the code for a single thread...
			SolveSingleThread_Click(sender, e);
			threads = 2;

			// And add one more thread
			Thread bThread = new Thread(new ThreadStart(TheMaze.SolveB));
			bThread.Start();
		}

		private void SolveFourThreads_Click(object sender, System.EventArgs e)
		{
			SolveTwoThreads_Click(sender, e);
			threads = 4;

			// Add two additional threads
			Thread cThread = new Thread(new ThreadStart(TheMaze.SolveC));
			Thread dThread = new Thread(new ThreadStart(TheMaze.SolveD));
			cThread.Start();
			dThread.Start();
		}

		private void SolveEightThreads_Click(object sender, System.EventArgs e)
		{
			SolveFourThreads_Click(sender, e);
			threads = 8;

			// Add four additional threads
			Thread eThread = new Thread(new ThreadStart(TheMaze.SolveE));
			Thread fThread = new Thread(new ThreadStart(TheMaze.SolveF));
			Thread gThread = new Thread(new ThreadStart(TheMaze.SolveG));
			Thread hThread = new Thread(new ThreadStart(TheMaze.SolveH));
			eThread.Start();
			fThread.Start();
			gThread.Start();
			hThread.Start();

		}

		private void Solve16Threads_Click(object sender, System.EventArgs e)
		{
			SolveEightThreads_Click(sender, e);
			threads = 16;

			// Add eight additional threads
			Thread iThread = new Thread(new ThreadStart(TheMaze.SolveI));
			Thread jThread = new Thread(new ThreadStart(TheMaze.SolveJ));
			Thread kThread = new Thread(new ThreadStart(TheMaze.SolveK));
			Thread lThread = new Thread(new ThreadStart(TheMaze.SolveL));
			Thread mThread = new Thread(new ThreadStart(TheMaze.SolveM));
			Thread nThread = new Thread(new ThreadStart(TheMaze.SolveN));
			Thread oThread = new Thread(new ThreadStart(TheMaze.SolveO));
			Thread pThread = new Thread(new ThreadStart(TheMaze.SolveP));
			iThread.Start();
			jThread.Start();
			kThread.Start();
			lThread.Start();
			mThread.Start();
			nThread.Start();
			oThread.Start();
			pThread.Start();

		}
		
		private void SolveThreadPool_Click(object sender, System.EventArgs e)
		{
			// Reset all necessary variables
			threads = 8;
			threadCount = 0;
			statusBar.Text = "";

			// Clear the maze and refresh the form
			TheMaze.Reset();
			this.Refresh();

			// Start the clock and queue up 8 threads for execution
			this.Cursor = Cursors.WaitCursor;
			startTime = DateTime.Now;
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncA));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncB));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncC));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncD));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncE));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncF));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncG));
			ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadFuncH));
		}

		private void ThreadFuncA(Object O)
		{
			TheMaze.SolveA();
		}

		private void ThreadFuncB(Object O)
		{
			TheMaze.SolveB();
		}

		private void ThreadFuncC(Object O)
		{
			TheMaze.SolveC();
		}

		private void ThreadFuncD(Object O)
		{
			TheMaze.SolveD();
		}

		private void ThreadFuncE(Object O)
		{
			TheMaze.SolveE();
		}

		private void ThreadFuncF(Object O)
		{
			TheMaze.SolveF();
		}

		private void ThreadFuncG(Object O)
		{
			TheMaze.SolveG();
		}

		private void ThreadFuncH(Object O)
		{
			TheMaze.SolveH();
		}

		private void MazeComplete(object sender, EventArgs e)
		{
			// Roll call for the threads
			threadCount++;

			// When they all call in, we know we're done so put up the results
			if( threadCount == threads )
			{
				this.Refresh();
				statusBar.Text = "Completed using " + threads + " threads in " + (DateTime.Now - startTime);			
				this.Cursor = Cursors.Default;
			}
		}
	}
}

⌨️ 快捷键说明

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