熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

趣味編程:自創C#掃雷代碼

2022-06-13   來源: .NET編程 
    雖然不很好但是還可以玩絕對是原版代碼
    using System;
    using SystemDrawing;
    using SystemWindowsForms;
    namespace WindowsFormsApplication
    {
    public partial class Frm : Form
    {
    #region 變量
    public int qishu;
    public static int ls= hs=;
    public int lgs = ; //列數行數
    public int bl=; //是否重新布雷
    public int time ;
    public int[] bulei = new int[ls hs]; //bulei數組的值代表無雷代表雷的個數代表雷
    public int ceshi = ;
    public int[] click = new int[ls hs]; //表示要清除既是單擊的 表示右擊一次表示右擊兩次 表示以清除過了
    public int sum = ;
    public int timerEnable = ; //游戲所處的狀態 是游戲中
    #endregion
    public Frm()
    {
    InitializeComponent()
    }
    ///
    /// 標識雷的個數 和可插的旗數
    ///
    public void Qishu()
    {
    if (qishu <= lgs)
    {
    gamesourceText = + (lgs qishu)ToString()
    }
    else
    {
    gamesourceText = + (lgs qishu)ToString()
    }
    }
    ///
    /// 畫方格
    ///
    /// <實例對象>
    /// <要畫圖的位置>
    /// <要畫圖的位置>
    /// <畫圖使用的顏色>
    public void Dline(Graphics dlineint mxint myPen mypen)
    {
    dlineDrawLine(mypen mx my mx + my
    dlineDrawLine(mypen mx my mx my +
    dlineDrawLine(new Pen(ColorBlack) mx + my mx + my +
    dlineDrawLine(new Pen(ColorBlack) mx my + mx + my +
    }
    ///
    /// 看是否可以向周圍移動
    ///
    /// <移動的基本X坐標>
    /// <移動的基本Y坐標>


    public void Panjie(int xint y)
    {
    Pl(x y)
    if (y >=
    {
    Pl(xy
    if (x >=
    {
    Pl(xy
    }
    if (x +
    {
    Pl(x + y
    }
    }
    if (y + < hs)
    {
    Pl(xy+
    if (x >=
    {
    Pl(x y +
    }
    if (x + < ls)
    {
    Pl(x + y +
    }
    }
    if (x >=
    {
    Pl(x y)
    }
    if (x + < ls)
    {
    Pl(x + y)
    }
    }
    ///
    /// 判斷是否要清清除
    ///
    /// <要判斷的基本X坐標>
    /// <要判斷的基本Y坐標>
    public void Pl(int x int y)
    {
    if (bulei[x y] == && click[x y] != && click[x y] != && click[x y] !=
    {
    click[x y] = ;
    Panjie(xy)
    }
    if (bulei[x y] > && bulei[x y] < && click[x y] != && click[x y] != && click[x y] !=
    {
    click[x y] = ;
    }
    }
    ///
    /// 初始化數組布雷判斷周圍的雷數
    ///
    public void Blpl()
    {
    sum = ls * hs;
    qishu = ;
    int mxmy;
    //初始化數組 表示雷數
    int mxmy;
    int sum=;
    for (mx = ; mx < ls; mx++)
    {
    for (my = ; my
    {
    bulei[mx my] = ;
    click[mx my] = ;
    }
    }
    while(sum
    //決定雷的個數和雷德位置
    {
    sum= ;
    Random r = new Random((int)DateTimeNowTicks)
    mx = rNext(ls
    my = rNext(hs
    bulei[mxmy] = ;
    for (mx = ; mx < ls; mx++)
    {
    for (my = ; my < hs; my++)
    {
    sum += bulei[mx my];
    }
    }
    }
    //判斷周圍雷的個數
    for (mx = ; mx < ls; mx++)
    {
    for (my = ; my < hs; my++)
    {
    if (bulei[mxmy] !=
    {
    if (mx >=
    {
    if (bulei[mx my] ==
    {
    bulei[mx my]++;
    }
    if (my >= && bulei[mx my ] ==
    {
    bulei[mx my]++;
    }
    if ( my + < hs && bulei[mx my + ] ==
    {
    bulei[mx my]++;
    }
    }
    if (mx +
    {
    if (bulei[mx + my] ==
    {
    bulei[mx my]++;
    }
    if (my >= && bulei[mx+ my ] ==
    {
    bulei[mx my]++;
    }
    if (my + < hs && bulei[mx + my + ] ==
    {
    bulei[mx my]++;
    }
    }
    if(my>= && bulei[mxmy]==
    {
    bulei[mx my]++;
    }
    if (my +
    {
    bulei[mx my]++;
    }
    }
    }
    }
    }
    ///
    /// 右擊的重繪
    ///
    /// >
    public void Rdraw(Graphics dline)
    {
    string text;
    int mxmy;
    int mx my;
    for (mx = ;mx < ls; mx++)
    {
    for (my = ; my < hs; my++)
    {
    mx = mx * + mx * + ;
    my = my * + my * + ;
    if ( click[mx my] ==
    {
    //第一次右擊畫旗
    dlineDrawLine(new Pen(ColorWhite) mx my mx + my +
    dlineDrawLine(new Pen(ColorWhite) mx my mx my +
    dlineDrawLine(new Pen(ColorBlack) mx + my mx + my +
    dlineDrawLine(new Pen(ColorBlack) mx my + mx + my +
    dlineFillRectangle(new SolidBrush(ColorFromArgb( )) mx + my +
    text = P;
    dlineDrawString(text new Font(宋體 new SolidBrush(ColorRed) mx + my +
    }
    if ( click[mx my] ==
    {
    //第二次右擊畫問號
    dlineDrawLine(new Pen(ColorWhite) mx my mx + my +
    dlineDrawLine(new Pen(ColorWhite) mx my mx my +
    dlineDrawLine(new Pen(ColorBlack) mx + my mx + my +
    dlineDrawLine(new Pen(ColorBlack) mx my + mx + my +
    dlineFillRectangle(new SolidBrush(ColorFromArgb( )) mx + my +
    text = ?;
    dlineDrawString(text new Font(宋體 new SolidBrush(ColorBlack) mx + my +
    }
    if (click[mx my] ==
    {
    //第三次右擊 恢復原樣
    click[mx my] = ;
    dlineDrawLine(new Pen(ColorWhite) mx my mx + my +
    dlineDrawLine(new Pen(ColorWhite) mx my mx my +
    dlineDrawLine(new Pen(ColorBlack) mx + my mx + my +
    dlineDrawLine(new Pen(ColorBlack) mx my + mx + my +
    dlineFillRectangle(new SolidBrush(ColorFromArgb( )) mx + my +
    }
    }
    }
    }
    ///
    /// 初始化屏幕 (包還所有的)
    ///
    public void Startscr()
    {
    Graphics dline = labdrawCreateGraphics()
    time = ;
    Blpl()
    timerEnabled = false;
    Color c = ColorFromArgb(
    labdrawCreateGraphics()Clear(c)
    Drawscreen(dline)
    timerEnable = ;
    labtimeText = (
    }
    ///
    /// 畫界面
    ///
    /// >
    public void Drawscreen(Graphics dline)
    {
    sum = ; //得到沒清楚的格子數
    int mx my;
    int mx = my = ; //得到要畫圖的坐標
    string text;
    for (mx = ; mx < ls; mx++)
    {
    for (my = ; my < hs; my++)
    {
    //畫圖地位置 mxmy分別是屏幕xy軸
    mx = mx * + mx * + ;
    my = my * + my * + ;
    if (click[mx my] != && click[mx my] != && click[mx my] != && click[mx my] !=
    {
    //下面用於畫立體形矩形
    sum++;
    Pen mypen = new Pen(ColorGray)
    Dline(dline mx my mypen)
    dlineFillRectangle(new SolidBrush(ColorFromArgb( )) mx + my +
    }
    if ((click[mx my] == || click[mx my] == ))
    {
    click[mx my] = ; //清除的格子
    //提示周圍的雷數
    if (bulei[mx my] <= && bulei[mx my] >
    {
    text = bulei[mx my]ToString()
    dlineDrawString(text new Font(宋體 new SolidBrush(ColorBlack) mx + my +
    }
    //顯示雷
    if ((bulei[mx my] == || bulei[mx my] == ))
    {
    text = *;
    dlineDrawString(text new Font(宋體 new SolidBrush(ColorBlack) mx + my +
    if (bulei[mx my] ==
    {
    //被單擊的雷上畫上叉號
    dlineDrawLine(new Pen(ColorRed) mx my mx + my +
    dlineDrawLine(new Pen(ColorRed) mx my + mx + my
    }
    }
    }
    }
    //用於畫旗 和問號
    Rdraw(dline)
    }
    }
    ///
    /// 當為雷時的算法
    ///
    /// >
    /// >
    public void Panlei(int x int y)
    {
    if (bulei[x y] !=
    {
    if (bulei[x y] ==
    {
    timerEnabled = false; //使計時器停止
    timerEnable = ; //使游戲出游結束狀態
    bulei[x y] = ;
    int i j;
    for (i = ; i < ls; i++)
    {
    for (j = ; j < hs; j++)
    {
    if (bulei[i j] == || bulei[i j] ==
    {
    click[i j] = ; //顯示所有的雷
    }
    }
    }
    }
    if (bulei[x y] > && bulei[x y] <
    {
    click[x y] = ;
    }
    }
    else
    {
    Panjie(x y)
    }
    }
    ///
    /// 回到游戲開始的界面
    ///
    ///
    ///
    private void btnreplay_Click(object sender EventArgs e)
    {
    //初始化一切 包括布雷 界面 click數組
    Startscr()
    }
    ///
    /// 計算游戲所用的時間
    ///
    ///
    ///
    private void timer_Tick(object sender EventArgs e)
    {
    time++;
    if (time <=
    {
    if (time <
    {
    labtimeText = ( + timeToString())
    }
    else
    {
    labtimeText = ( + timeToString())
    }
    }
    else
    {
    if (time <
    {
    labtimeText = (timeToString())
    }
    else
    {
    timerEnabled = false;
    MessageBoxShow(RIME OVER
    time = ;
    timerEnable = ;
    }
    }
    }
    ///
    /// 在啟動的游戲時初始化界面
    ///
    ///
    ///
    private void labdraw_Paint(object sender PaintEventArgs e)
    {
    Graphics dline = eGraphics;
    if (bl ==
    {
    Blpl()
    Drawscreen(dline)
    }
    else
    {
    Drawscreen(dline)
    }
    }
    ///
    /// //單擊時觸發的事件
    ///
    ///
    ///
    private void labdraw_MouseClick(object sender MouseEventArgs e)
    {
    bl = ;
    int i= j=;
    if (timerEnable == ) //判斷游戲是否處於結束狀態
    {
    timerEnabled = true;
    Graphics dline = labdrawCreateGraphics() //將LAB建立成圖形對象
    int mx = my = ;
    int mx = my = ;
    int mx = my = ;
    //判斷鼠標所點位置
    mx = eX;
    my = eY;
    for (i = ; i < ls; i++)
    {
    for (j = ; j < hs; j++)
    {
    mx = + i * + i * ;
    my = + j * + j * ;
    //找到單擊位置代表的數組
    if (mx < mx && mx + + > mx && my < my && my < my + +
    {
    mx = i;
    my = j;
    break;
    }
    }
    if (j <
    {
    break;
    }
    }
    //判斷是左擊還是右擊
    if (eButton == MouseButtonsRight && click[mx my] != && mx >= && my >= && click[mx my] !=
    {
    //第次右擊
    if (click[mx my] == && click[mx my] !=
    {
    click[mx my] = ;
    qishu;
    }
    else
    {
    //第次右擊
    if (click[mx my] != && click[mx my] !=
    {
    if (qishu
    {
    click[mx my] = ;
    qishu++;
    }
    }
    if (click[mx my] == && click[mx my] !=
    {
    click[mx my] = ;
    }
    }
    //右擊的繪圖事件
    Rdraw(dline)
    Qishu()
    }
    else
    {
    //左擊
    if (click[mx my] != && click[mx my] !=
    {
    click[mx my] = ;
    Color c = ColorFromArgb(
    //清屏 用背景顏色
    labdrawCreateGraphics()Clear(c)
    Panlei (mx my
    Drawscreen(dline)
    }
    if (bulei[mx my] ==
    {
    MessageBoxShow(GAME OVER
    timerEnabled = false;
    timerEnable = ;
    }
    }
    if (sum == lgs)
    {
    MessageBoxShow(GAME WIN
    timerEnabled = false;
    timerEnable = ;
    }
    }
    }
    private void Frm_Load(object sender EventArgs e)
    {
    Qishu() //輸出雷的個數
    // thisHeight = hs * + ;
    // thisWidth = ls * + ;
    }
    }
    }


From:http://tw.wingwit.com/Article/program/net/201311/11988.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.