当前位置:K88软件开发文章中心编程语言.NET.NET01 → 文章内容

C#版扫雷游戏源代码

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2018-12-31 11:51:00

:2011-04-18 21:10:02

很多人都喜欢Windows附带的扫雷游戏,从上学的学生到上班一族,都在玩扫雷游戏,现在在网上找到了C#版得扫雷游戏,放到下面供需要者参考。

  1.     using System;  
  2.     using System.Drawing;  
  3.     using System.Windows.Forms;  
  4.     namespace WindowsFormsApplication1  
  5.     {  
  6.     public partial class Frm1 : Form  
  7.     {  
  8.     #region 变量  
  9.     public int qishu;  
  10.     public static int ls=20, hs=11;  
  11.     public int lgs = 30; //列数,行数。  
  12.     public int bl=0; //是否重新布雷  
  13.     public int time ;  
  14.     public int[,] bulei = new int[ls, hs]; //bulei数组的值0代表无雷,1-8代表雷的个数,9代表雷  
  15.     public int ceshi = 0;  
  16.     public int[,] click = new int[ls, hs]; //10表示要清除既是单击的 11表示右击一次,12表示右击两次 16表示以清除过了  
  17.     public int sum = 0;  
  18.     public int timerEnable = 0; //游戏所处的状态 0是游戏中  
  19.     #endregion  
  20.     public Frm1()  
  21.     {  
  22.     InitializeComponent();  
  23.     }  
  24.     ///  
  25.     /// 标识雷的个数 和可插的旗数  
  26.     ///  
  27.     public void Qishu()  
  28.     {  
  29.     if (qishu <= lgs)  
  30.     {  
  31.     gamesource.Text = "00" + (lgs - qishu)。ToString();  
  32.     }  
  33.     else 
  34.     {  
  35.     gamesource.Text = "00" + (lgs - qishu)。ToString();  
  36.     }  
  37.     }  
  38.     ///  
  39.     /// 画方格  
  40.     ///  
  41.     /// <实例对象>  
  42.     /// <要画图的位置>  
  43.     /// <要画图的位置>  
  44.     /// <画图使用的颜色>  
  45.     public void Dline(Graphics dline,int mx1,int my1,Pen mypen)  
  46.     {  
  47.     dline.DrawLine(mypen , mx1, my1, mx1 + 20, my1);  
  48.     dline.DrawLine(mypen, mx1, my1, mx1, my1 + 20);  
  49.     dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);  
  50.     dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);  
  51.     }  
  52.     ///  
  53.     /// 看是否可以向周围移动  
  54.     ///  
  55.     /// <移动的基本X坐标>  
  56.     /// <移动的基本Y坐标>  
  57.     public void Panjie(int x,int y)  
  58.     {  
  59.     Pl(x, y);  
  60.     if (y - 1 >= 0)  
  61.     {  
  62.     Pl(x,y-1);  
  63.     if (x - 1 >= 0)  
  64.     {  
  65.     Pl(x-1,y-1);  
  66.     }  
  67.     if (x + 1  
  68.     {  
  69.     Pl(x + 1, y - 1);  
  70.     }  
  71.     }  
  72.     if (y + 1 < hs)  
  73.     {  
  74.     Pl(x,y+1);  
  75.     if (x - 1 >= 0)  
  76.     {  
  77.     Pl(x - 1, y + 1);  
  78.     }  
  79.     if (x + 1 < ls)  
  80.     {  
  81.     Pl(x + 1, y +1);  
  82.     }  
  83.     }  
  84.     if (x - 1 >= 0)  
  85.     {  
  86.     Pl(x - 1 ,y);  
  87.     }  
  88.     if (x + 1 < ls)  
  89.     {  
  90.     Pl(x + 1,y);  
  91.     }  
  92.     }  
  93.     ///  
  94.     /// 判断是否要清清除  
  95.     ///  
  96.     /// <要判断的基本X坐标>  
  97.     /// <要判断的基本Y坐标>  
  98.     public void Pl(int x, int y)  
  99.     {  
  100.     if (bulei[x, y] == 0 && click[x, y] != 10 && click[x, y] != 11 && click[x, y] != 16)  
  101.     {  
  102.     click[x, y] = 10;  
  103.     Panjie(x,y);  
  104.     }  
  105.     if (bulei[x, y] > 0 && bulei[x, y] < 9 && click[x, y] != 10 && click[x, y] != 11 && click[x, y] != 16)  
  106.     {  
  107.     click[x, y] = 10;  
  108.     }  
  109.     }  
  110.     ///  
  111.     /// 初始化数组,布雷,判断周围的雷数  
  112.     ///  
  113.     public void Blpl()  
  114.     {  
  115.     sum = ls * hs;  
  116.     qishu = 0;  
  117.     int mx,my;  
  118.     //初始化数组 9表示雷数  
  119.     int mx1,my1;  
  120.     int sum1=0;  
  121.     for (mx = 0; mx < ls; mx++)  
  122.     {  
  123.     for (my = 0; my  
  124.     {  
  125.     bulei[mx, my] = 0;  
  126.     click[mx, my] = 0;  
  127.     }  
  128.     }  
  129.     while(sum1  
  130.     //决定雷的个数和雷德位置  
  131.     {  
  132.     sum1= 0;  
  133.     Random r = new Random((int)DateTime.Now.Ticks);  
  134.     mx = r.Next(ls-1);  
  135.     my = r.Next(hs-1);  
  136.     bulei[mx,my] = 9;  
  137.     for (mx1 = 0; mx1 < ls; mx1++)  
  138.     {  
  139.     for (my1 = 0; my1 < hs; my1++)  
  140.     {  
  141.     sum1 += bulei[mx1, my1];  
  142.     }  
  143.     }  
  144.     }  
  145.     //判断周围雷的个数  
  146.     for (mx = 0; mx < ls; mx++)  
  147.     {  
  148.     for (my = 0; my < hs; my++)  
  149.     {  
  150.     if (bulei[mx,my] != 9)  
  151.     {  
  152.     if (mx - 1 >= 0)  
  153.     {  
  154.     if (bulei[mx - 1, my] == 9)  
  155.     {  
  156.     bulei[mx, my]++;  
  157.     }  
  158.     if (my - 1 >= 0 && bulei[mx - 1, my - 1] == 9)  
  159.     {  
  160.     bulei[mx, my]++;  
  161.     }  
  162.     if ( my + 1 < hs && bulei[mx - 1, my + 1] == 9)  
  163.     {  
  164.     bulei[mx , my]++;  
  165.     }  
  166.     }  
  167.     if (mx +1  
  168.     {  
  169.     if (bulei[mx + 1, my] == 9)  
  170.     {  
  171.     bulei[mx, my]++;  
  172.     }  
  173.     if (my- 1 >= 0 && bulei[mx+ 1, my - 1] == 9)  
  174.     {  
  175.     bulei[mx, my]++;  
  176.     }  
  177.     if (my + 1 < hs && bulei[mx + 1, my + 1] == 9)  
  178.     {  
  179.     bulei[mx, my]++;  
  180.     }  
  181.     }  
  182.     if(my-1>=0 && bulei[mx,my-1]==9)  
  183.     {  
  184.     bulei[mx, my]++;  
  185.     }  
  186.     if (my +1  
  187.     {  
  188.     bulei[mx, my]++;  
  189.     }  
  190.     }  
  191.     }  
  192.     }  
  193.     }  
  194.     ///  
  195.     /// 右击的重绘  
  196.     ///  
  197.     /// >  
  198.     public void Rdraw(Graphics dline)  
  199.     {  
  200.     string text;  
  201.     int mx,my;  
  202.     int mx1, my1;  
  203.     for (mx = 0;mx < ls; mx++)  
  204.     {  
  205.     for (my = 0; my < hs; my++)  
  206.     {  
  207.     mx1 = mx * 2 + mx * 20 + 4;  
  208.     my1 = my * 2 + my * 20 + 4;  
  209.     if ( click[mx, my] == 11)  
  210.     {  
  211.     //第一次右击画旗  
  212.     dline.DrawLine(new Pen(Color.White), mx1, my1, mx1 + 20, my1 + 20);  
  213.     dline.DrawLine(new Pen(Color.White), mx1, my1, mx1, my1 + 20);  
  214.     dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);  
  215.     dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);  
  216.     dline.FillRectangle(new SolidBrush(Color.FromArgb(224, 224, 224)), mx1 + 1, my1 + 1, 18, 18);  
  217.     text = "P";  
  218.     dline.DrawString(text, new Font("宋体", 15), new SolidBrush(Color.Red), mx1 + 2, my1 + 2);  
  219.     }  
  220.     if ( click[mx, my] == 12)  
  221.     {  
  222.     //第二次右击画问号  
  223.     dline.DrawLine(new Pen(Color.White), mx1, my1, mx1 + 20, my1 + 20);  
  224.     dline.DrawLine(new Pen(Color.White), mx1, my1, mx1, my1 + 20);  
  225.     dline.DrawLine(new Pen(Color.Black), mx1 + 20, my1, mx1 + 20, my1 + 20);  
  226.     dline.DrawLine(new Pen(Color.Black), mx1, my1 + 20, mx1 + 20, my1 + 20);  
  227.     dline.FillRectangle(new SolidBrush(Color.FromArgb(224, 224, 224)), mx1 + 1, my1 + 1, 18, 18);  
  228.     text = "?";  
  229.     dline.DrawString(text, new Font("宋体", 15), new SolidBrush(Color.Black), mx1 + 2, my1 + 2);  

[1] [2] [3]  下一页


C#版扫雷游戏源代码