1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| /// <summary>
/// 绘制游戏区
/// </summary>
private void PaintGame(Graphics g)
{
g.Clear(Color.White); // 清空绘图区
// 我们需要使雷区在用户显示的区域上下左右保持 6px 的偏移量,使得整体看起来更加协调
int nOffsetX = 6; // X 方向偏移量
int nOffsetY = 6 + MenuStrip_Main.Height; // Y 方向偏移量
for (int i = 1; i <= nWidth; i++) // 绘制行
{
for (int j = 1; j <= nHeight; j++) // 绘制列
{
// 第一个参数为笔刷,这里采用内置笔刷 SandyBrown
// 第二个参数为方块的参数,这里采用左上角坐标以及长宽的形式给出
// 34 表示每个雷区的大小,再加上偏移量就是我们当前雷区的起始位置,由于要空出 1px 的间隔,因此还需要加 1
// 由此可以得到每个方块在雷区中的位置,然后利用循环绘制出来
if(pState[i, j] == 0) // 未点开
{
// 绘制背景
if(i == MouseFocus.X && j == MouseFocus.Y) // 是否为高亮点
{
g.FillRectangle(Brushes.SolidBrush(Color.FromArgb(100, Color.SandyBrown)), new Rectangle(nOffsetX + 34 * (i - 1) + 1, nOffsetY + 34 * (j - 1) + 1, 32, 32));
}
else
{
g.FillRectangle(Brushes.SandyBrown, new Rectangle(nOffsetX + 34 * (i - 1) + 1, nOffsetY + 34 * (j - 1) + 1, 32, 32)); // 绘制雷区方块
}
// 绘制标记
if(pState[i, j] == 2)
{
g.DrawImage(Properties.Resources.Flag, nOffsetX + 34 * (i - 1) + 1 + 4, nOffsetY + 34 * (j - 1) + 1 + 2); // 绘制红旗
}
if(pState[i, j] == 3)
{
g.DrawImage(Properties.Resources.Doubt, nOffsetX + 34 * (i - 1) + 1 + 4, nOffsetY + 34 * (j - 1) + 1 + 2); // 绘制问号
}
}
else if(pState[i, j] == 1) // 点开
{
if(pMine[i, j] != -1) // 非地雷
{
// 绘制背景
if(MouseFocus.X == i && MouseFocus.Y == j)
{
g.FillRectangle(Brushes.SolidBrush(Color.FromArgb(100, Color.LightGray)), new Rectangle(nOffsetX + 34 * (i - 1) + 1, nOffsetY + 34 * (j - 1) + 1, 32, 32));
}
else
{
g.FillRectangle(Brushes.LightGray, new Rectangle(nOffsetX + 34 * (i - 1) + 1, nOffsetY + 34 * (j - 1) + 1, 32, 32));
}
// 绘制数字
if(pMine[i, j] != 0)
{
Brush DrawBrush = new SolidBrush(Color.Blue); // 定义钢笔
// 各个地雷数目的颜色
if (pMine[i, j] == 2) { DrawBrush = new SolidBrush(Color.Green); }
if (pMine[i, j] == 3) { DrawBrush = new SolidBrush(Color.Red); }
if (pMine[i, j] == 4) { DrawBrush = new SolidBrush(Color.DarkBlue); }
if (pMine[i, j] == 5) { DrawBrush = new SolidBrush(Color.DarkRed); }
if (pMine[i, j] == 6) { DrawBrush = new SolidBrush(Color.DarkSeaGreen); }
if (pMine[i, j] == 7) { DrawBrush = new SolidBrush(Color.Black); }
if (pMine[i, j] == 8) { DrawBrush = new SolidBrush(Color.DarkGray); }
SizeF Size = g.MeasureString(pMine[i, j].ToString(), new Font("Consolas", 16));
g.DrawString(pMine[i, j].ToString(), new Font("Consolas", 16), DrawBrush, nOffsetX + 34 * (i - 1) + 1 + (32 - Size.Width) / 2, nOffsetY + 34 * (j - 1) + 1 + (32 - Size.Height) / 2);
}
}
}
}
}
}
|