步骤一:定义一个单个方块的类
internal class CDrawRectangle : IDisposable
{
public int p_x = CCommon.X;
public int p_y = CCommon.Y;
public int p_h = CCommon.H;
public int p_w = CCommon.W;
public Brush b = Brushes.Blue;
public Pen p = Pens.White;
private Panel p_g = null;
public bool p_delete = false;
public Button p_btn = new Button();
public CDrawRectangle(Panel p, int x, int y, int h, int w)
{
p_x = x;
p_y = y;
p_h = h;
p_w = w;
p_g = p;
}
public CDrawRectangle(Panel p)
{
p_g = p;
}
public void DrawRectangle()
{
p_btn.Location = new Point(p_x, p_y);
p_btn.Size = new Size(p_h, p_w);
if (!p_g.Controls.Contains(p_btn))
{
p_g.Controls.Add(p_btn);
}
}
public void Dispose()
{
p_btn.Dispose();
b.Dispose();
}
}
步骤二:定义7中图形的类
class CDrawRectangleBase : IDrawRectangle,IDisposable
{
#region 变量定义
private int p_x = CCommon.X;
private int p_y = CCommon.Y;
private int p_h = CCommon.H;
private int p_w = CCommon.W;
private Panel p_g = null;
private CDrawRectangle cdr1 = null;
private CDrawRectangle cdr2 = null;
private CDrawRectangle cdr3 = null;
private CDrawRectangle cdr4 = null;
private int p_IType = 1;
private int iChangeFlag = 0;
#endregion
#region 属性
public CDrawRectangle Cdr1
{
get { return cdr1; }
set { cdr1 = value; }
}
public CDrawRectangle Cdr2
{
get { return cdr2; }
set { cdr2 = value; }
}
public CDrawRectangle Cdr3
{
get { return cdr3; }
set { cdr3 = value; }
}
public CDrawRectangle Cdr4
{
get { return cdr4; }
set { cdr4 = value; }
}
#endregion
#region CDrawRectangleBase
/// <summary>
/// CDrawRectangleChangTiao
/// </summary>
/// <param name="g"></param>
public CDrawRectangleBase(Panel p, int iType)
{
p_g = p;
p_IType = iType;
Initalize();
}
public CDrawRectangleBase(Panel p, int x, int y, int iType)
{
p_g = p;
p_IType = iType;
p_x = x;
p_y = y;
Initalize();
}
#endregion
#region Initalize
/// <summary>
/// Initalize
/// </summary>
private void Initalize()
{
switch (p_IType)
{
case 1:
//changtiao
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x, p_y + 3 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Red;
cdr2.p_btn.BackColor = Color.Red;
cdr3.p_btn.BackColor = Color.Red;
cdr4.p_btn.BackColor = Color.Red;
break;
case 2:
//FanL
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x - CCommon.SIZE, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.BurlyWood;
cdr2.p_btn.BackColor = Color.BurlyWood;
cdr3.p_btn.BackColor = Color.BurlyWood;
cdr4.p_btn.BackColor = Color.BurlyWood;
break;
case 3:
//FanZ
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x - CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x - CCommon.SIZE, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Yellow;
cdr2.p_btn.BackColor = Color.Yellow;
cdr3.p_btn.BackColor = Color.Yellow;
cdr4.p_btn.BackColor = Color.Yellow;
break;
case 4:
//shan
cdr1 = new CDrawRectangle(p_g, p_x - CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr1.p_btn.BackColor = Color.Magenta;
cdr2.p_btn.BackColor = Color.Magenta;
cdr3.p_btn.BackColor = Color.Magenta;
cdr4.p_btn.BackColor = Color.Magenta;
break;
case 5:
//Tian
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Green;
cdr2.p_btn.BackColor = Color.Green;
cdr3.p_btn.BackColor = Color.Green;
cdr4.p_btn.BackColor = Color.Green;
break;
case 6:
//ZhengL
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Orange;
cdr2.p_btn.BackColor = Color.Orange;
cdr3.p_btn.BackColor = Color.Orange;
cdr4.p_btn.BackColor = Color.Orange;
break;
case 7:
//ZhengZ
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Blue;
cdr2.p_btn.BackColor = Color.Blue;
cdr3.p_btn.BackColor = Color.Blue;
cdr4.p_btn.BackColor = Color.Blue;
break;
default:
//ZhengZ
cdr1 = new CDrawRectangle(p_g, p_x, p_y, p_h, p_w);
cdr2 = new CDrawRectangle(p_g, p_x, p_y + CCommon.SIZE, p_h, p_w);
cdr3 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + CCommon.SIZE, p_h, p_w);
cdr4 = new CDrawRectangle(p_g, p_x + CCommon.SIZE, p_y + 2 * CCommon.SIZE, p_h, p_w);
cdr1.p_btn.BackColor = Color.Blue;
cdr2.p_btn.BackColor = Color.Blue;
cdr3.p_btn.BackColor = Color.Blue;
cdr4.p_btn.BackColor = Color.Blue;
break;
}
}
#endregion
#region DrawRectangle
/// <summary>
/// DrawRectangle
/// </summary>
public void DrawRectangle()
{
if (!cdr1.p_delete)
{
cdr1.DrawRectangle();
}
if (!cdr2.p_delete)
{
cdr2.DrawRectangle();
}
if (!cdr3.p_delete)
{
cdr3.DrawRectangle();
}
if (!cdr4.p_delete)
{
cdr4.DrawRectangle();
}
}
#endregion
#region Down
/// <summary>
/// Down
/// </summary>
/// <param name="lst"></param>
/// <returns></returns>
public bool Down(List<CDrawRectangle> lst)
{
bool result = true;
if (CheckDown(lst))
{
cdr1.p_y = cdr1.p_y + CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr3.p_y = cdr3.p_y + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
}
else
{
result = false;
}
DrawRectangle();
return result;
}
#endregion
#region CheckDown
/// <summary>
/// CheckDown
/// </summary>
/// <param name="lst"></param>
/// <returns></returns>
private bool CheckDown(List<CDrawRectangle> lst)
{
bool result = true;
int x1 = cdr1.p_x;
int y1 = cdr1.p_y + CCommon.SIZE;
int x2 = cdr2.p_x;
int y2 = cdr2.p_y + CCommon.SIZE;
int x3 = cdr3.p_x;
int y3 = cdr3.p_y + CCommon.SIZE;
int x4 = cdr4.p_x;
int y4 = cdr4.p_y + CCommon.SIZE;
if (y1 >= CCommon.MAX_H)
{
result = false;
}
if (y2 >= CCommon.MAX_H)
{
result = false;
}
if (y3 >= CCommon.MAX_H)
{
result = false;
}
if (y4 >= CCommon.MAX_H)
{
result = false;
}
if (result)
{
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].p_x == x1 && lst[i].p_y == y1)
{
result = false;
break;
}
if (lst[i].p_x == x2 && lst[i].p_y == y2)
{
result = false;
break;
}
if (lst[i].p_x == x3 && lst[i].p_y == y3)
{
result = false;
break;
}
if (lst[i].p_x == x4 && lst[i].p_y == y4)
{
result = false;
break;
}
}
}
return result;
}
#endregion
#region Left
/// <summary>
/// Left
/// </summary>
/// <param name="lst"></param>
public void Left(List<CDrawRectangle> lst)
{
if (CheckLeft(lst))
{
cdr1.p_x = cdr1.p_x - CCommon.SIZE;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr3.p_x = cdr3.p_x - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
}
DrawRectangle();
}
#endregion
#region CheckLeft
/// <summary>
/// CheckLeft
/// </summary>
/// <param name="lst"></param>
/// <returns></returns>
private bool CheckLeft(List<CDrawRectangle> lst)
{
bool result = true;
int x1 = cdr1.p_x - CCommon.SIZE;
int y1 = cdr1.p_y ;
int x2 = cdr2.p_x - CCommon.SIZE;
int y2 = cdr2.p_y ;
int x3 = cdr3.p_x - CCommon.SIZE;
int y3 = cdr3.p_y ;
int x4 = cdr4.p_x - CCommon.SIZE;
int y4 = cdr4.p_y ;
if (x1 < 0)
{
result = false;
}
if (x2 < 0)
{
result = false;
}
if (x3 < 0)
{
result = false;
}
if (x4 < 0)
{
result = false;
}
if (result)
{
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].p_x == x1 && lst[i].p_y == y1)
{
result = false;
break;
}
if (lst[i].p_x == x2 && lst[i].p_y == y2)
{
result = false;
break;
}
if (lst[i].p_x == x3 && lst[i].p_y == y3)
{
result = false;
break;
}
if (lst[i].p_x == x4 && lst[i].p_y == y4)
{
result = false;
break;
}
}
}
return result;
}
#endregion
#region Right
/// <summary>
/// Right
/// </summary>
/// <param name="lst"></param>
public void Right(List<CDrawRectangle> lst)
{
if (CheckRight(lst))
{
cdr1.p_x = cdr1.p_x + CCommon.SIZE;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr3.p_x = cdr3.p_x + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
}
DrawRectangle();
}
#endregion
#region CheckRight
/// <summary>
/// CheckRight
/// </summary>
/// <param name="lst"></param>
/// <returns></returns>
private bool CheckRight(List<CDrawRectangle> lst)
{
bool result = true;
int x1 = cdr1.p_x + CCommon.SIZE;
int y1 = cdr1.p_y;
int x2 = cdr2.p_x + CCommon.SIZE;
int y2 = cdr2.p_y;
int x3 = cdr3.p_x + CCommon.SIZE;
int y3 = cdr3.p_y;
int x4 = cdr4.p_x + CCommon.SIZE;
int y4 = cdr4.p_y;
if (x1 >= CCommon.MAX_W)
{
result = false;
}
if (x2 >= CCommon.MAX_W)
{
result = false;
}
if (x3 >= CCommon.MAX_W)
{
result = false;
}
if (x4 >= CCommon.MAX_W)
{
result = false;
}
if (result)
{
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].p_x == x1 && lst[i].p_y == y1)
{
result = false;
break;
}
if (lst[i].p_x == x2 && lst[i].p_y == y2)
{
result = false;
break;
}
if (lst[i].p_x == x3 && lst[i].p_y == y3)
{
result = false;
break;
}
if (lst[i].p_x == x4 && lst[i].p_y == y4)
{
result = false;
break;
}
}
}
return result;
}
#endregion
#region Change
/// <summary>
/// Change
/// </summary>
/// <param name="lst"></param>
public void Change(List<CDrawRectangle> lst)
{
if (CheckChange(lst))
{
#region 变化选择
switch (p_IType)
{
case 1:
//changtiao
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x - CCommon.SIZE;
cdr1.p_y = cdr1.p_y + CCommon.SIZE;
cdr3.p_x = cdr3.p_x + CCommon.SIZE;
cdr3.p_y = cdr3.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x + 2 * CCommon.SIZE;
cdr4.p_y = cdr4.p_y - 2 * CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x + CCommon.SIZE;
cdr1.p_y = cdr1.p_y - CCommon.SIZE;
cdr3.p_x = cdr3.p_x - CCommon.SIZE;
cdr3.p_y = cdr3.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x - 2 * CCommon.SIZE;
cdr4.p_y = cdr4.p_y + 2 * CCommon.SIZE;
iChangeFlag = 0;
}
break;
case 2:
//FanL
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y + 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y + 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 2;
}
else if (iChangeFlag == 2)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y - 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 3;
}
else if (iChangeFlag == 3)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y - 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 0;
}
break;
case 3:
//FanZ
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 0;
}
break;
case 4:
//shan
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x + CCommon.SIZE;
cdr1.p_y = cdr1.p_y - CCommon.SIZE;
cdr3.p_x = cdr3.p_x - CCommon.SIZE;
cdr3.p_y = cdr3.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x + CCommon.SIZE;
cdr1.p_y = cdr1.p_y + CCommon.SIZE;
cdr3.p_x = cdr3.p_x - CCommon.SIZE;
cdr3.p_y = cdr3.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 2;
}
else if (iChangeFlag == 2)
{
cdr1.p_x = cdr1.p_x - CCommon.SIZE;
cdr1.p_y = cdr1.p_y + CCommon.SIZE;
cdr3.p_x = cdr3.p_x + CCommon.SIZE;
cdr3.p_y = cdr3.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 3;
}
else if (iChangeFlag == 3)
{
cdr1.p_x = cdr1.p_x - CCommon.SIZE;
cdr1.p_y = cdr1.p_y - CCommon.SIZE;
cdr3.p_x = cdr3.p_x + CCommon.SIZE;
cdr3.p_y = cdr3.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 0;
}
break;
case 5:
//Tian
break;
case 6:
//ZhengL
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y + 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y + 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 2;
}
else if (iChangeFlag == 2)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y - 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 3;
}
else if (iChangeFlag == 3)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y - 2 * CCommon.SIZE;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 0;
}
break;
case 7:
//ZhengZ
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 0;
}
break;
default:
//ZhengZ
if (iChangeFlag == 0)
{
cdr1.p_x = cdr1.p_x + 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x + CCommon.SIZE;
cdr2.p_y = cdr2.p_y - CCommon.SIZE;
cdr4.p_x = cdr4.p_x - CCommon.SIZE;
cdr4.p_y = cdr4.p_y - CCommon.SIZE;
iChangeFlag = 1;
}
else if (iChangeFlag == 1)
{
cdr1.p_x = cdr1.p_x - 2 * CCommon.SIZE;
cdr1.p_y = cdr1.p_y;
cdr2.p_x = cdr2.p_x - CCommon.SIZE;
cdr2.p_y = cdr2.p_y + CCommon.SIZE;
cdr4.p_x = cdr4.p_x + CCommon.SIZE;
cdr4.p_y = cdr4.p_y + CCommon.SIZE;
iChangeFlag = 0;
}
break;
}
#endregion
}
DrawRectangle();
}
#endregion
#region CheckChange
/// <summary>
/// CheckChange
/// </summary>
/// <param name="lst"></param>
/// <returns></returns>
private bool CheckChange(List<CDrawRectangle> lst)
{
bool result = true;
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
int x3 = 0;
int y3 = 0;
int x4 = 0;
int y4 = 0;
#region 变化赋值
switch (p_IType)
{
case 1:
//changtiao
if (iChangeFlag == 0)
{
x1 = cdr1.p_x - CCommon.SIZE;
y1 = cdr1.p_y + CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x + CCommon.SIZE;
y3 = cdr3.p_y - CCommon.SIZE;
x4 = cdr4.p_x + 2 * CCommon.SIZE;
y4 = cdr4.p_y - 2 * CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x + CCommon.SIZE;
y1 = cdr1.p_y - CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x - CCommon.SIZE;
y3 = cdr3.p_y + CCommon.SIZE;
x4 = cdr4.p_x - 2 * CCommon.SIZE;
y4 = cdr4.p_y + 2 * CCommon.SIZE;
}
break;
case 2:
//FanL
if (iChangeFlag == 0)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y + 2 * CCommon.SIZE;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y + 2 * CCommon.SIZE;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
else if (iChangeFlag == 2)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y - 2 * CCommon.SIZE;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
else if (iChangeFlag == 3)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y - 2 * CCommon.SIZE;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
break;
case 3:
//FanZ
if (iChangeFlag == 0)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
break;
case 4:
//shan
if (iChangeFlag == 0)
{
x1 = cdr1.p_x + CCommon.SIZE;
y1 = cdr1.p_y - CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x - CCommon.SIZE;
y3 = cdr3.p_y + CCommon.SIZE;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x + CCommon.SIZE;
y1 = cdr1.p_y + CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x - CCommon.SIZE;
y3 = cdr3.p_y - CCommon.SIZE;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
else if (iChangeFlag == 2)
{
x1 = cdr1.p_x - CCommon.SIZE;
y1 = cdr1.p_y + CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x + CCommon.SIZE;
y3 = cdr3.p_y - CCommon.SIZE;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 3)
{
x1 = cdr1.p_x - CCommon.SIZE;
y1 = cdr1.p_y - CCommon.SIZE;
x2 = cdr2.p_x;
y2 = cdr2.p_y;
x3 = cdr3.p_x + CCommon.SIZE;
y3 = cdr3.p_y + CCommon.SIZE;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
break;
case 5:
//Tian
break;
case 6:
//ZhengL
if (iChangeFlag == 0)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y + 2 * CCommon.SIZE;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y + 2 * CCommon.SIZE;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 2)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y - 2 * CCommon.SIZE;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 3)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y - 2 * CCommon.SIZE;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
break;
case 7:
//ZhengZ
if (iChangeFlag == 0)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
break;
default:
//ZhengZ
if (iChangeFlag == 0)
{
x1 = cdr1.p_x + 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x + CCommon.SIZE;
y2 = cdr2.p_y - CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x - CCommon.SIZE;
y4 = cdr4.p_y - CCommon.SIZE;
}
else if (iChangeFlag == 1)
{
x1 = cdr1.p_x - 2 * CCommon.SIZE;
y1 = cdr1.p_y;
x2 = cdr2.p_x - CCommon.SIZE;
y2 = cdr2.p_y + CCommon.SIZE;
x3 = cdr3.p_x;
y3 = cdr3.p_y;
x4 = cdr4.p_x + CCommon.SIZE;
y4 = cdr4.p_y + CCommon.SIZE;
}
break;
}
#endregion
if (x1 >= CCommon.MAX_W || x1 < 0)
{
result = false;
}
if (x2 >= CCommon.MAX_W || x2 < 0)
{
result = false;
}
if (x3 >= CCommon.MAX_W || x3 < 0)
{
result = false;
}
if (x4 >= CCommon.MAX_W || x4 < 0)
{
result = false;
}
if (y1 >= CCommon.MAX_H)
{
result = false;
}
if (y2 >= CCommon.MAX_H)
{
result = false;
}
if (y3 >= CCommon.MAX_H)
{
result = false;
}
if (y4 >= CCommon.MAX_H)
{
result = false;
}
if (result)
{
for (int i = 0; i < lst.Count; i++)
{
if (lst[i].p_x == x1 && lst[i].p_y == y1)
{
result = false;
break;
}
if (lst[i].p_x == x2 && lst[i].p_y == y2)
{
result = false;
break;
}
if (lst[i].p_x == x3 && lst[i].p_y == y3)
{
result = false;
break;
}
if (lst[i].p_x == x4 && lst[i].p_y == y4)
{
result = false;
break;
}
}
}
return result;
}
#endregion
public void Dispose()
{
cdr1.Dispose();
cdr1.Dispose();
cdr1.Dispose();
}
}
步骤三:更具上面的两个类,自定义一个Form,使用Timer控件定时来刷新。
步骤四:共通类定义
class CCommon
{
public const int X = 120;
public const int Y = 0;
public const int H = 20;
public const int W = 20;
public const int SIZE = 20;
public const int MAX_H = 600;
public const int MAX_W = 240;
}
总结:俄罗斯方块刚开始我使用在Panel绘图,但是有刷新,一闪一闪,最后我用了在Panel上添加Button控件的方法,这样就没有刷新的,闪屏的感觉。