📄 minesarea.cs
字号:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
namespace MinesWeeper
{
public class MinesArea : System.Windows.Forms.UserControl,IMineDisplay
{
bool isMouseLeftDown = false;
bool isFailed = false;
private IMineEngine mineEngine;
private IDrawSetting drawSetting;
private System.ComponentModel.Container components = null;
public MinesArea()
{
drawSetting = new DefaultDrawSetting();
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region InitializeComponent
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
if(null != MineEngine && null != MineEngine.MinesRank)
{
for(int i=0;i<MineEngine.X;i++)
{
for(int j=0;j<MineEngine.Y;j++)
{
if(isFailed)
{
DrawMineWhenFailed(e.Graphics,i,j,MineEngine.MinesRank[i,j]);
}
else
{
DrawMine(e.Graphics,i,j,MineEngine.MinesRank[i,j]);
}
}
}
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown (e);
doMouseDown(MineEngine,e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp (e);
doMouseUp(MineEngine,e);
}
void doMouseDown(IMineEngine memento,MouseEventArgs e)
{
if(null == memento)
return;
switch(e.Button)
{
case MouseButtons.Right:
memento.Flag(e.X/drawSetting.Width,e.Y/drawSetting.Width);
break;
case MouseButtons.Left:
isMouseLeftDown = true;
break;
default:
return;
}
}
void doMouseUp(IMineEngine memento,MouseEventArgs e)
{
if(null == memento)
return;
switch(e.Button)
{
case MouseButtons.Right:
if(isMouseLeftDown)
{
memento.Clear(e.X/drawSetting.Width,e.Y/drawSetting.Width);
}
break;
case MouseButtons.Left:
isMouseLeftDown = false;
memento.Open(e.X/drawSetting.Width,e.Y/drawSetting.Width);
break;
default:
return;
}
}
void DrawMine(Graphics g,int x,int y,byte val)
{
Border3DStyle style = DrawSetting.GetBorderStyle(MineUtils.IsOpened(val));
ControlPaint.DrawBorder3D(g,x*drawSetting.Width,y*drawSetting.Width,drawSetting.Width-1,drawSetting.Width-1,style);
PointF pointF = new PointF(x*drawSetting.Width+3,y*drawSetting.Width+3);
String display = getDrawString(val);
drawSetting.DisplayBrush.Color = drawSetting.GetColorByString(display);
g.DrawString(display,drawSetting.DisplayFont,drawSetting.DisplayBrush,pointF);
}
void DrawMineWhenFailed(Graphics g,int x,int y,byte val)
{
Border3DStyle style = Border3DStyle.SunkenInner;
ControlPaint.DrawBorder3D(g,x*drawSetting.Width,y*drawSetting.Width,drawSetting.Width-1,drawSetting.Width-1,style);
PointF pointF = new PointF(x*drawSetting.Width+3,y*drawSetting.Width+3);
String display = getDrawStringIgnoreStatus(val);
drawSetting.DisplayBrush.Color = drawSetting.GetColorByString(display);
g.DrawString(display,drawSetting.DisplayFont,drawSetting.DisplayBrush,pointF);
}
String getDrawStringIgnoreStatus(byte mine)
{
int inside = MineUtils.getInside(mine);
if(inside == 0)
return String.Empty;
return (inside == MineUtils.mineVal) ? drawSetting.MineDisplay : inside.ToString();
}
String getDrawString(byte mine)
{
if(MineUtils.IsOpened(mine))
{
return getDrawStringIgnoreStatus(mine);
}
return MineUtils.getFlgString(mine);
}
void OnMementoWorked(object sender, WorkEventArgs arg)
{
if(null == arg)
return;
switch(arg.Works)
{
case WorkType.Refresh:
this.Refresh();
break;
case WorkType.Start:
isFailed = false;
Width = drawSetting.Width * MineEngine.X;
Height = drawSetting.Width * MineEngine.Y;
this.Refresh();
break;
case WorkType.Faile:
isFailed = true;
this.Refresh();
break;
case WorkType.Done:
MessageBox.Show("You are successful in:"+arg.UseTimes);
break;
default:
return;
}
}
public IMineEngine MineEngine
{
get{ return mineEngine; }
set
{
mineEngine = value;
if(null != value)
{
mineEngine.Worked += new WorkEventHandler(OnMementoWorked);
}
}
}
public IDrawSetting DrawSetting
{
get
{
return drawSetting;
}
set
{
drawSetting = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -