C#之五十 扫雷

常规扫雷:

类: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();
				}
			}
		}
		}
	}
时间: 2024-10-14 11:43:42

C#之五十 扫雷的相关文章

(转载)VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)

上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObject类有六个直接的派生类,GDI对象主要也是这六个,分别是:CBitmap.CBrush.CFont.CPalette.CPen和CRgn. 在这六个GDI对象中,最常用的莫过于画笔和画刷了,即CPen类和CBrush类.本文就主要讲解画笔的使用. 画笔的应用实例 鸡啄米在这里直接通过一个波形图的实

【管理心得之五十四】管理者不能事无巨细,但细节又决定成败。元芳你怎么看?

场景再现 ================ {一次非正式谈话} 部长:前几天我看过你提交的项目总结报告,感觉里面有很多问题都是可以避免的. 比方说“Release Miss 那条”,完全事先做一个CheckList,然后再安排一个人监督就可以了. 这样低级的失误被客户指摘,感觉有点冤呀. PM:是呀. 有很多问题都是细节没有做到位,如果我能抽出点时间多看看.多查查,也不会这样狼狈. 部长:细节决定成败啊 PM:我有不解 “我不能事必亲躬.事无巨细,但您又谈细节决定成败,是不是哪里我理解错了” 部

【管理心得之五十五】学学“传销”

场景再现 ================ 甲:喂,刚才你在14下半年工作计划会上,提出的5大方面.10个必要.23个坚持真不赖,每一点都是我们现在的痛楚,看得出你真下工夫. 乙:是吗?谢谢你的夸奖,如果真能推行下去那倒就更好了. 甲:怎么了?怕不被采用? 乙:每个人都有自己的舒适度,谁都不想有他人来破坏自己的舒适度.谈变革.谈推进恰恰是触及他人的固有的舒适度,这样的推行能不受阻吗? 甲:你这么一说我到是想起来了,刚才会议上你刚刚谈及变革时,有人的脸色突然就变得紧张起来. 乙:我说得没错吧. 甲

VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)

上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObject类有六个直接的派生类,GDI对象主要也是这六个,分别是:CBitmap.CBrush.CFont.CPalette.CPen和CRgn. 在这六个GDI对象中,最常用的莫过于画笔和画刷了,即CPen类和CBrush类.本文就主要讲解画笔的使用. 画笔的应用实例 鸡啄米在这里直接通过一个波形图的实

Java经典编程题50道之五十

有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号,姓名,三门课成绩),计算出平均成绩,况原有的数据和计算出的平均分数存放在磁盘文件 "stud"中. public class Example50 {    public static void main(String[] args) {        stud();    } public static void stud() {        Scanner ss = new Scanner(System.in); 

【管理心得之五十六】我仅仅是一个“传话筒”?(沟通篇)

场景再现 ==================== {某公司忘年会} 甲:喂,说句心里话“像你我这样的公司中层,在公司是不是很主要?” 乙:哦?怎么说? 甲:你看,我帮你分析分析.上面有公司决策层:下面有具体实施者:我们中层就是承上启下. 小时候习写作的时候老师常说“段落之间要有承上启下的句子或段落,承接上文也就是总结概括上文,启下就是引起下文,在课文或者作文中往往起到过度的作用,显得不是那么生硬.不自然,不然你的作文得不了高分.” 乙:理是这么个理,但是总感觉少了一点点什么,我帮你再分析分析.

【云快讯】之五十二《华为的公有云即将发布,名字还是个谜》

2015-07-22 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 前两天,笔者在微信中收到华为公有云战略与业务发布会的邀请函,打开看了一下发布会议程,放在了7月30日,还真的是7月最后一天啊,看来是希望的能准备的更充分些. 由华为的轮值CEO徐直军先生来进行发布,也足见华为对于这词发布的重视,看邀请的嘉宾也比较重量级,就是人数少了点. 华为的公有云其实在2010年就出现了,不过在市场推广上并没有下功夫,这和华为高层的态度有关系,毕竟华为很看重国内几大运营商

【云快讯】之五十六《谷歌GCE为企业用户提供私有密钥加密服务》

2015-07-30 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 [个人观点] Google虽然号称不会保存客户的私密密钥,但是,从技术上他完全有能力保存这个密钥,并用它去解密数据. 所以这种安全服务主要还是在于防止第三方盗取用户数据. 值得鼓励的是,这种安全服务未来有望在所有的云服务中推广,毕竟这是一个不错的安全功能,或许一年后这回成为一个标配选项. 本周二的时候,Google在他们的公有云平台上提供了新的安全服务.对于企业来说,数据存入云端最大的担心就

【管理心得之五十二】一次报复、一次转折

场景再现 ================ {甲}和{乙}是一起步入公司的同年生. 但是他们的工作的内容却不相同.{甲}是HR,{乙}则是业务员. 工作上他们之间很少有交集,但是私下里吐槽就却是常有的事. {乙}:我恨透这个公司了,感觉这里对我不公平,我要离开这里,找一个“伯乐”去. {甲}:好,你要离开这里我举双手赞成.既然公司对你这样的不公平,你就没想要报复公司吗? {乙}:有报复的机会当然好了. {甲}:不过你现在离开还不是机会,你只是“小卒”罢了,你的离职给不了公司多大损失. 我建议你,