扫雷算法+c#实现代码

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
Number = 0, Thunder = 1
}
//枚举当前格子是否已被读取
public enum IsRead
{
Yes = 0 , No = 1
}
public class SweepGame
{
#region私有字段
//定义数组存储数字图片
private Bitmap[] _numberBmp = new Bitmap[8];
}
}
}
辅助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace MySweep
{
//定义游戏状态
public enum GameState
{
Start = 1, Close = 2
}
//定义枚举类表示右键的可能值
public enum ButtonRightType
{
Boom = 0, RedFlag = 1, UnKnown = 2
}
//定义枚举类型表示每个格子的可能值
public enum PieceType
_sweepGame.GameStart();
Invalidate();
}
private void DrawNone(int row,int col)
{
Graphics g = this.CreateGraphics();
for (int i = row - 1; i <= row + 1; i++)
}
//确定雷位置
for (int k = 0; k < _thunderNumber; k++)
{
//随机数定义雷所在的行和列
int first = _randPieces.Next(19);
int second = _randPieces.Next(19);
if (_sweepPieces[first, second] != PieceType.Thunder)
break;
//计算四周雷数
if (_sweepPieces[row, col] == PieceType.Thunder && _sweepPieces[row, col] != _sweepPieces[i, j])
count++;
}
}
if (_sweepPieces[i, j] == PieceType.Thunder)
#endregion
#region公共属性
public Random _RandPieces
{
get { return _randPieces; }
set { _randPieces = value; }
}
public int _ThunderNumber
{
get { return _thunderNumber; }
//定义当前游戏状态
private GameState _gameState = GameState.Close;
//定义一个数组存储地图上的所有格子
private PieceType[,] _sweepPieces = new PieceType[20, 20];
public IsRead[,] _SweepPiecesIsRead = new IsRead[20, 20];
for (int row = i - 1; row <= i + 1; row++)
{
if (row < 0)
continue;
if (row >= 20)
break;
for (int col = j - 1; col <= j + 1; col++)
{
if (col < 0)
continue;
if (col > 20)
//定义扫雷地图的左上角坐标
private Point _leftTop = new Point(30, 30);
//定义每个格子的宽度和高度
private int _rowHeight = 23;
private int _colWidth = 23;
//绘制地图背景
private Bitmap _bmgBg = new Bitmap("Images/背景.jpg");
{
//绘制出还未读取的格子,绘制后标记为已读
{
_mapDraw.DrawMap(e.Graphics);
_mapDraw.DrawPiece(e.Graphics);
}
private void buttonStart_Click(object sender, EventArgs e)
{
_sweepGame._GameState = GameState.Start;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
{
get { return _numberBmp; }
set { _numberBmp = value; }
}
public Boolean _EndFlag
{
get { return _endFlag; }
set { _endFlag = value; }
}
#endregion
//游戏开始
public void GameStart()
_sweepPieces[first, second] = PieceType.Thunder;
else
{
k--;
continue;
}
}
//开始计算
for (int i = 0; i < 19; i++)
for (int j = 0; j < 19; j++)
{
//雷数wenku.baidu.com志
int count = 0;
//绘制地图格子
private Bitmap _bmgPiece = new Bitmap("Images/8.jpg");
#endregion
#region公有屬性
public Point _LeftTop
{
get { return _leftTop; }
set { _leftTop = value; }
g.DrawLine(pen, new Point(_leftTop.X, _leftTop.Y + (i - 1) * _rowHeight), new Point(_leftTop.X + 20 * _colWidth, _leftTop.Y + (i - 1) * _rowHeight));
for (int i = 1; i <= 21; i++)
{
//初始化将地图全部设置为数字并且已读标志设为无
for (int i = 0; i < 19; i++)
for (int j = 0; j < 19; j++)
{
_sweepPieces[i, j] = PieceType.Number;
_SweepPiecesIsRead[i, j] = IsRead.No;
#endregion
//定义类成员方法绘制扫雷地图
public void DrawMap(Graphics g)
{
g.DrawImage(_bmgBg, new Point(0, 0));
Pen pen = new Pen(Color.Gray, 2);
for (int i = 1; i <= 21; i++)
g.DrawLine(pen, new Point(_leftTop.X + (i - 1) * _colWidth, _leftTop.Y), new Point(_leftTop.X + (i - 1) * _colWidth, _leftTop.Y + 20 * _colWidth));
}
//类成员方法将地图上每个格子覆盖上图片
ButtonRightType _buttonRightType = new ButtonRightType();
public FormMain()
{
InitializeComponent();
}
private void FormMain_Paint(object sender, PaintEventArgs e)
{
_endFlag = false;
}
}
if (_endFlag == true)
{
_gameState = GameState.Close;
MessageBox.Show("你太棒了,这都能找出来!!!", "确认", MessageBoxButtons.YesNo);
}
}
}
}
主程序类
using System;
//定义一个数组方便计算雷
private int[,] _sweepPieceCount = new int[20, 20];
private Random _randPieces = new Random();
private int _thunderNumber = 50;
private Boolean _endFlag = false;
set { _thunderNumber = value; }
}
public PieceType[,] _SweepPieces
{
get { return _sweepPieces; }
set { _sweepPieces = value; }
}
public int[,] _SweepPieceCount
_sweepPieceCount[i, j] = 8;
else
_sweepPieceCount[i, j] = count;
}
}
//判断是否结束函数
public void IsOver()
{
for(int i=0;i<19;i++)
for (int j = 0; j < 19; j++)
{
if (_SweepPiecesIsRead[i, j] == IsRead.No)
}
public int _RowHeight
{
get { return _rowHeight; }
set { _rowHeight = value; }
}
public int _ColWidth
{
get { return _colWidth; }
set { _colWidth = value; }
}
public void DrawPiece(Graphics g)
{
for (int i = 1; i <= 20; i++)
for (int j = 1; j <= 20; j++)
g.DrawImage(_bmgPiece, new Point(_leftTop.X + 1 + (j - 1) * _colWidth, _leftTop.Y + 1 + (i - 1) * _rowHeight));
{
if (i < 0)
continue;
if (i > 19)
break;
for (int j = col - 1; j <= col + 1; j++)
{
if (j < 0)
continue;
if (j > 19)
break;
if (_sweepGame._SweepPiecesIsRead[i, j] == IsRead.No)
绘制地图类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
namespace MySweep
{
public class MapDraw
{
#region私有字段
namespace MySweep
{
public partial class FormMain : Form
{
//定义是否已读取变量
IsRead _isRead = IsRead.Yes;
MapDraw _mapDraw = new MapDraw();
SweepGame _sweepGame = new SweepGame();
{
get { return _sweepPieceCount; }
set { _sweepPieceCount = value; }
}
public GameState _GameState
{
get { return _gameState; }
set { _gameState = value; }
}
public Bitmap[] _NumberBmp
相关文档
最新文档