- ·上一篇文章:C#用Activex实现Web客户端读取RFID功能
- ·下一篇文章:c#中使用多线程访问winform中控件
C#版扫雷游戏源代码
:2011-04-18 21:10:02
很多人都喜欢Windows附带的扫雷游戏,从上学的学生到上班一族,都在玩扫雷游戏,现在在网上找到了C#版得扫雷游戏,放到下面供需要者参考。
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- namespace WindowsFormsApplication1
- {
- public partial class Frm1 : Form
- {
- #region 变量
- public int qishu;
- public static int ls=20, hs=11;
- public int lgs = 30; //列数,行数。
- public int bl=0; //是否重新布雷
- public int time ;
- public int[,] bulei = new int[ls, hs]; //bulei数组的值0代表无雷,1-8代表雷的个数,9代表雷
- public int ceshi = 0;
- public int[,] click = new int[ls, hs]; //10表示要清除既是单击的 11表示右击一次,12表示右击两次 16表示以清除过了
- public int sum = 0;
- public int timerEnable = 0; //游戏所处的状态 0是游戏中
- #endregion
- public Frm1()
- {
- InitializeComponent();
- }
- ///
- /// 标识雷的个数 和可插的旗数
- ///
- public void Qishu()
- {
- if (qishu <= lgs)
- {
- gamesource.Text = "00" + (lgs - qishu)。ToString();
- }
- else
- {
- gamesource.Text = "00" + (lgs - qishu)。ToString();
- }
- }
- ///
- /// 画方格
- ///
- /// <实例对象>
- /// <要画图的位置>
- /// <要画图的位置>
- /// <画图使用的颜色>
- public void Dline(Graphics dline,int mx1,int my1,Pen mypen)
- {
- dline.DrawLine(mypen , mx1, my1, mx1 + 20, my1);
- dline.DrawLine(mypen, mx1, my1, mx1, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);
- }
- ///
- /// 看是否可以向周围移动
- ///
- /// <移动的基本X坐标>
- /// <移动的基本Y坐标>
- public void Panjie(int x,int y)
- {
- Pl(x, y);
- if (y - 1 >= 0)
- {
- Pl(x,y-1);
- if (x - 1 >= 0)
- {
- Pl(x-1,y-1);
- }
- if (x + 1
- {
- Pl(x + 1, y - 1);
- }
- }
- if (y + 1 < hs)
- {
- Pl(x,y+1);
- if (x - 1 >= 0)
- {
- Pl(x - 1, y + 1);
- }
- if (x + 1 < ls)
- {
- Pl(x + 1, y +1);
- }
- }
- if (x - 1 >= 0)
- {
- Pl(x - 1 ,y);
- }
- if (x + 1 < ls)
- {
- Pl(x + 1,y);
- }
- }
- ///
- /// 判断是否要清清除
- ///
- /// <要判断的基本X坐标>
- /// <要判断的基本Y坐标>
- public void Pl(int x, int y)
- {
- if (bulei[x, y] == 0 && click[x, y] != 10 && click[x, y] != 11 && click[x, y] != 16)
- {
- click[x, y] = 10;
- Panjie(x,y);
- }
- if (bulei[x, y] > 0 && bulei[x, y] < 9 && click[x, y] != 10 && click[x, y] != 11 && click[x, y] != 16)
- {
- click[x, y] = 10;
- }
- }
- ///
- /// 初始化数组,布雷,判断周围的雷数
- ///
- public void Blpl()
- {
- sum = ls * hs;
- qishu = 0;
- int mx,my;
- //初始化数组 9表示雷数
- int mx1,my1;
- int sum1=0;
- for (mx = 0; mx < ls; mx++)
- {
- for (my = 0; my
- {
- bulei[mx, my] = 0;
- click[mx, my] = 0;
- }
- }
- while(sum1
- //决定雷的个数和雷德位置
- {
- sum1= 0;
- Random r = new Random((int)DateTime.Now.Ticks);
- mx = r.Next(ls-1);
- my = r.Next(hs-1);
- bulei[mx,my] = 9;
- for (mx1 = 0; mx1 < ls; mx1++)
- {
- for (my1 = 0; my1 < hs; my1++)
- {
- sum1 += bulei[mx1, my1];
- }
- }
- }
- //判断周围雷的个数
- for (mx = 0; mx < ls; mx++)
- {
- for (my = 0; my < hs; my++)
- {
- if (bulei[mx,my] != 9)
- {
- if (mx - 1 >= 0)
- {
- if (bulei[mx - 1, my] == 9)
- {
- bulei[mx, my]++;
- }
- if (my - 1 >= 0 && bulei[mx - 1, my - 1] == 9)
- {
- bulei[mx, my]++;
- }
- if ( my + 1 < hs && bulei[mx - 1, my + 1] == 9)
- {
- bulei[mx , my]++;
- }
- }
- if (mx +1
- {
- if (bulei[mx + 1, my] == 9)
- {
- bulei[mx, my]++;
- }
- if (my- 1 >= 0 && bulei[mx+ 1, my - 1] == 9)
- {
- bulei[mx, my]++;
- }
- if (my + 1 < hs && bulei[mx + 1, my + 1] == 9)
- {
- bulei[mx, my]++;
- }
- }
- if(my-1>=0 && bulei[mx,my-1]==9)
- {
- bulei[mx, my]++;
- }
- if (my +1
- {
- bulei[mx, my]++;
- }
- }
- }
- }
- }
- ///
- /// 右击的重绘
- ///
- /// >
- public void Rdraw(Graphics dline)
- {
- string text;
- int mx,my;
- int mx1, my1;
- for (mx = 0;mx < ls; mx++)
- {
- for (my = 0; my < hs; my++)
- {
- mx1 = mx * 2 + mx * 20 + 4;
- my1 = my * 2 + my * 20 + 4;
- if ( click[mx, my] == 11)
- {
- //第一次右击画旗
- dline.DrawLine(new Pen(Color.White), mx1, my1, mx1 + 20, my1 + 20);
- dline.DrawLine(new Pen(Color.White), mx1, my1, mx1, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);
- dline.FillRectangle(new SolidBrush(Color.FromArgb(224, 224, 224)), mx1 + 1, my1 + 1, 18, 18);
- text = "P";
- dline.DrawString(text, new Font("宋体", 15), new SolidBrush(Color.Red), mx1 + 2, my1 + 2);
- }
- if ( click[mx, my] == 12)
- {
- //第二次右击画问号
- dline.DrawLine(new Pen(Color.White), mx1, my1, mx1 + 20, my1 + 20);
- dline.DrawLine(new Pen(Color.White), mx1, my1, mx1, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);
- dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);
- dline.FillRectangle(new SolidBrush(Color.FromArgb(224, 224, 224)), mx1 + 1, my1 + 1, 18, 18);
- text = "?";
- dline.DrawString(text, new Font("宋体", 15), new SolidBrush(Color.Black), mx1 + 2, my1 + 2);
C#版扫雷游戏源代码