欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#之五十 扫雷

程序员文章站 2022-06-10 11:13:31
...

常规扫雷:

     类:UserInfo:用户信息

         Button:按钮

             TopScore:积分

             Main:主类

             用到一个声音文件:lei.wav

----------------------------------------------------部分参考代码如下--------------------

Main.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace BigBangBomb
{
	public partial class frmMain : Form
	{
		public static Timer time;
		static int stat;
		static int run=0;
		static int tim=0;		
		int timertim = 0;
        static int status = 0;

		public static void end()
		{
			run = 1;
			time.Enabled = false;

			frmMain.showwin();
		}
		public static void blast()
		{
           run = 2;
		   time.Enabled = false;
		   frmMain.showlose();
		}
		public static void change_stat()
		{
			stat = 0;
		}

		static int width = 9;
		static int height = 9;
		static int mine=10;
		static string min1 = mine.ToString();

		static button[,] but1;
		public frmMain()
		{			
			InitializeComponent();
		}

		public static button exp(int x, int y)
		{
			return (but1[x, y]);						
		}

		private void button1_Click(object sender, EventArgs e)
		{		
				frmMain frm = new frmMain();
				frmMain.time.Enabled = false;
				run = 0;				
				frm.Show();
				this.Visible = false;
				this.Enabled = false;
		}

		public static void setatt(int x, int y, int m)
		{
			width = x;
			height = y;
			mine = m;
		}
        public static void setrun()
        {
            run = 0;
        }
		
		public static bool IsBomb(int x, int y)
		{
			
			if (x >= 0 && x < width)
			{
				if (y >= 0 && y < height)
				{
					return but1[x, y].Minded;
				}
			}
			return false;
		}

		public static void enabltime()
		{
			time.Enabled = true;			
		}

		public static void distime()
		{
			time.Enabled = true;
		}

		public void start()
		{		
			panel1.Width = width * 19 + 8;
			panel1.Height = height * 19 + 5;
			this.Width = panel1.Width + 13;
			this.Height = panel1.Height + 215;
			but1 = new button[width, height];
			button1.Left = this.Width / 2-28;
			int x = 0;
			int y = -19;
			time = new Timer();
			time.Interval = 1000;
			time.Tick += new EventHandler(time_Tick);
			for (int i = 0; i < width; i++)
			{
				for (int i1 = 0; i1 < height; i1++)
				{
					x = x + 19;
					if (i1 == 0)
					{
						x = 0;
						y = y + 19;
					}
					button b = new button(panel1, width, height, x, y,i,i1,mine);
					but1[i, i1] = b;
				}
			}

			int b4 = 0;
			Random r = new Random();
			while (b4 < mine)
			{
				int x1 = r.Next(0,width);
				int y1 = r.Next(0,height);

				button b3 = but1[x1, y1];
				if (!b3.Minded)
				{
					b3.Minded = true;
					b4++;
				}
			}
		}

		static void reset()
		{
			min1 = mine.ToString();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			stat = 1;
			tim = 0;
			timertim = 0;
			timer2.Enabled = true;			
			frmMain.setatt(width,height,mine);
			reset();
			start();
			panel1.Visible = true;
			label2.Text = mine.ToString();
            button5.Text = "Pause";
            button5.Visible = true;
		}

		private void starterToolStripMenuItem_Click(object sender, EventArgs e)
		{
			frmMain.setatt(9, 9, 10);
		}

		private void customizedToolStripMenuItem_Click(object sender, EventArgs e)
		{
				Attributes at = new Attributes();
				at = new Attributes();
				at.Show();			
		}

		private void timer1_Tick(object sender, EventArgs e)
		{			
		}

		public static void chmine()
		{
			min1 = Convert.ToString(Convert.ToInt32(min1) - 1);
		}

		private void time_Tick(object sender, EventArgs e)
		{
			if (run == 0)
			{
				label1.Text = Convert.ToString(timertim + 1);
				timertim = timertim + 1;
				tim = timertim;
			}
		}

		public static void showlose()
		{
			MessageBox.Show("游戏结束时间 " + Convert.ToString(tim) + " seconds.");
		}
		public static void showwin()
		{			
			MessageBox.Show("胜利时间" + Convert.ToString(tim) + " seconds.");
            if (status == 0)
            {
                bool ans;
                ans = CheckFile();

                if (ans == true)
                    ReadCompareFileContents();
                else
                {
                    StreamWriter SW = new StreamWriter("test.txt", false);
                    frmUserInfo frm = new frmUserInfo();
                    frm.ShowDialog();
                    SW.WriteLine(frmUserInfo.UserName);
                    SW.WriteLine(Convert.ToString(tim));
                    SW.Close();
                }
            }

		}

        private static bool CheckFile()
        {
            StreamReader SR;
            try
            {
                SR = new StreamReader("test.txt");
            }
            catch (FileNotFoundException a)
            {
                return false;
            }
            SR.Close();
            return true;
        }

        private static void ReadCompareFileContents()
        {
            StreamReader SR = new StreamReader("test.txt");
            string str = SR.ReadLine();
            str = SR.ReadLine();
            SR.Close();
            int i = Convert.ToInt32(str);
            if (tim < i)
            {
                StreamWriter SW = new StreamWriter("test.txt", false);
                frmUserInfo frm = new frmUserInfo();
                frm.ShowDialog();
                SW.WriteLine(frmUserInfo.UserName);
                SW.WriteLine(Convert.ToString(tim));
                SW.Close();
            }
                   
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
		{
			
		}		

		private void Form1_FormClosing(object sender, FormClosingEventArgs e)
		{
			Application.Exit();
		}

		private void panel1_MouseDown(object sender, MouseEventArgs e)
		{
            if (button5.Text == "Resume")
            {
                MessageBox.Show("游戏终止");
            }            
		}

        private void button2_Click(object sender, EventArgs e)
        {
            status = 0;
            this.Visible = false;
            frmMain.setatt(9, 9, 10);			
            frmMain frm = new frmMain();
			frmMain.time.Enabled = false;
            frm.Show();
            run = 0;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            status = 1;
            Attributes at;
            at = new Attributes(this);
            at.Show();	
        }

        private void button4_Click(object sender, EventArgs e)
        {
			Help.ShowHelp(this, "HelpBigBangBomb.chm");
        }

        private void button5_Click(object sender, EventArgs e)
        {
            if (button5.Text == "Pause")
            {
                time.Enabled = false;
                for (int yo = 0; yo < width; yo++)
                {
                    for (int wo = 0; wo < height; wo++)
                    {
                        but1[yo, wo].b1.Enabled = false;
                    }
                }
                button5.Text="Resume";
            }
            else
            {
                time.Enabled = true;
                for (int yo = 0; yo < width; yo++)
                {
                    for (int wo = 0; wo < height; wo++)
                    {
                        but1[yo, wo].b1.Enabled = true;
                    }
                }
                button5.Text = "Pause";
            }
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            
        }

		private void timer2_Tick(object sender, EventArgs e)
		{
			label2.Text = min1;
			if (run > 0)
			{
				button1.Visible = true;
				time.Enabled = false;
				timer2.Enabled = false;
			}
		}

        private void button6_Click(object sender, EventArgs e)
        {
            Form frm = new frmTopScore();
            frm.Show();
        }
    }
}


扫雷按钮Button.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace BigBangBomb
{
	public class button
	{
		public Button b1;
		public EventHandler expl;
		Panel p;
		bool mined;
		bool gover;
		bool disman;
		bool open;
		int posx, posy;
		int nposx, nposy;
		int width;
		int height;
		int mines;
		int detmin=0;		

		public button(Panel p1,int w, int h,int x, int y,int pos, int posy1,int mine)
		{
			width = w;
			height = h;
			mines = mine;
			posx = pos;
			posy = posy1;
			b1 = new Button();
			b1.FlatStyle = FlatStyle.Flat;
			int bw = 19;
			int bh = 19;
			b1.Width = bw;
			b1.BackColor = SystemColors.ControlDark;
			b1.Height = bh;			
			b1.Top = x;
			b1.Left = y;
			b1.Click += new EventHandler(Click);
			b1.MouseDown += new MouseEventHandler(down);
			p1.Controls.Add(b1);
			mined = false;
			disman = false;
			open = false;
		}

		public bool Minded
		{
			get { return (this.mined); }
			set { this.mined = value; }
		}
		public bool Dismant
		{
			get { return (this.disman); }			
		}
		private void down(object sender, MouseEventArgs e)
		{
			if(e.Button==MouseButtons.Right)
			{
				if (Dismant)
				{
					disman  = false;
					b1.BackColor = SystemColors.ControlDark;
				}
				else
				{
					disman = true;
					b1.BackColor = Color.Orange;
					if(frmMain.IsBomb(posx,posy))
					{
						check();
					}
					frmMain.chmine();				
				}
			}
		}		

		public void check()
		{
			int win = 2;
			int coumin = 0;

				for (int i = 0; i < width; i++)
				{
					for (int y = 0; y < height; y++)
					{
						if (frmMain.exp(i, y).disman == true && frmMain.exp(i,y).mined==true)
						{
							coumin = coumin + 1;
						}
						if (coumin == mines)
						{
							button bh = frmMain.exp(i, y);
							if (bh.open == false)
							{
								if (bh.disman == false)
								{
									win = 1;
								}
								else
								{
									win = 0;
								}
							}
						}
					}
				}
				if (win == 0)
				{
					detmin = detmin + 1;
					frmMain.end();				
					for (int i = 0; i < width; i++)
					{
						for (int y = 0; y < height; y++)
						{
							frmMain.exp(i, y).b1.Enabled = false;
						}
					}
				}			
		}

		private void show()
		{
			if (open == false && disman==false)
			{
				int c = 0;
				open = true;
				if (frmMain.IsBomb(posx - 1, posy - 1))
				{
					c++;
				}
				if (frmMain.IsBomb(posx - 0, posy - 1))
				{
					c++;
				}
				if (frmMain.IsBomb(posx + 1, posy - 1))
				{
					c++;

				}
				if (frmMain.IsBomb(posx - 1, posy - 0))
				{
					c++;

				}
				if (frmMain.IsBomb(posx - 0, posy - 0))
				{
					c++;

				}
				if (frmMain.IsBomb(posx + 1, posy - 0))
				{
					c++;

				}
				if (frmMain.IsBomb(posx - 1, posy + 1))
				{
					c++;

				}
				if (frmMain.IsBomb(posx - 0, posy + 1))
				{
					c++;

				}
				if (frmMain.IsBomb(posx + 1, posy + 1))
				{
					c++;

				}
				if (c == 0)
				{
					b1.Text = "";
				}
				if (c > 0)
				{
					b1.Text = (c.ToString());
					b1.BackColor = Color.Cornsilk;
					b1.Enabled = false;
				}
				else
				{
					b1.BackColor = Color.Cornsilk;
					b1.Enabled = false;
					show1(Posx - 1, Posy - 1);
					show1(Posx - 0, Posy - 1);
					show1(Posx + 1, Posy - 1);
					show1(Posx - 1, Posy - 0);
					show1(Posx - 0, Posy - 0);
					show1(Posx + 1, Posy - 0);
					show1(Posx - 1, Posy + 1);
					show1(Posx - 0, Posy + 1);
					show1(Posx + 1, Posy + 1);
				}
			}
		}
		public int Posx
		{
			get { return (this.posx); }
		}

		public int Posy
		{
			get { return (this.posy); }
		}
        private void PlayFile(String url)
        {
            WMPLib.WindowsMediaPlayer Player = new WMPLib.WindowsMediaPlayer();
            Player.URL = url;
            Player.controls.play();
        }
		private void expld()
		{
			for (int i = 0; i < width; i++)
			{
				for (int y = 0; y < height; y++)
				{
					button but1 = frmMain.exp(i, y);
					if(frmMain.IsBomb(i,y))
					{						
						if (but1.b1.BackColor == Color.Orange)
						{
							but1.b1.BackColor = Color.Green;							
						}
						else
						{
							but1.b1.BackColor = Color.Red;
							but1.b1.BackgroundImage = Image.FromFile("dead.jpg");
                            PlayFile(@"expl.wav");
						}
					}
					else if(frmMain.exp(i,y).disman==true)
					{
						frmMain.exp(i, y).b1.BackColor = Color.Red;
					}
					but1.b1.Enabled = false;
				}
			}
			gover = true;
			frmMain.blast();
		}

		public bool gstat()
		{
			return(gover);
		}

        private void dispau(Button b12)
        {
            b12.Enabled = false;
        }
		private void show1(int x,int y)
		{
			if (x >= 0 && x < width)
			{
				if (y >= 0 && y < height)
				{
					button bot = frmMain.exp(x, y);
					bot.show();
				}
			}			
		}




		private void Click(object sender, System.EventArgs e)
		{
			frmMain.enabltime();
			if (!Dismant)
			{
				if (Minded)
				{
					expld();
					frmMain.distime();
				}
				else
				{
					show();
					check();
				}
			}
		}
		}
	}