public partial class Form1 : Form
{
private Rules rules;
public Form1()
{
InitializeComponent();
timer1.Enabled = true;
timer1.Interval = 50;
} private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (rules != null) rules.DrawMain(e.Graphics);
} private void pictureBox2_Paint(object sender, PaintEventArgs e)
{
if (rules != null) rules.DrawMain(e.Graphics);
} private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
if (rules != null)
{
rules.Close();
rules = null;
}
MyList array = new MyList();
array.Add_Brick("0000001000011100000000000", Color.Blue);
array.Add_Brick("0000000000111100000000000", Color.Chocolate);
array.Add_Brick("0000001000011000010000000", Color.Green);
array.Add_Brick("0000000100011100000000000", Color.Coral);
array.Add_Brick("0000000100011000100000000", Color.HotPink);
array.Add_Brick("0000000000011100100000000", Color.YellowGreen);
array.Add_Brick("0000000000011000110000000", Color.Violet);
rules = new Rules(15, 20, array, 20, Color.Black, pictureBox1.CreateGraphics(), pictureBox2.CreateGraphics(), 0, Color.Blue, false);
rules.Start();
}
else
{
if (rules == null || rules.GameOver())
return;
else if (e.KeyCode == Keys.Left) rules.Left();
else if (e.KeyCode == Keys.Right) rules.Right();
else if (e.KeyCode == Keys.Up) rules.Rotate();
else if (e.KeyCode == Keys.Down) rules.Down();
else if (e.KeyCode == Keys.Space) rules.DropDown();
}
} class Brick //方块基本元素
{
private Point[] brick_point; //方块坐标数组
private Color brick_color; //方块
private Color backgroud_color; //背景颜色
private int size; //像素
private SolidBrush brick_brush; //着色刷 public Brick(Point[] brick_point, Color brick_color, Color backgroud_color, int size)
{
this.brick_point = brick_point;
this.brick_color = brick_color;
this.backgroud_color = backgroud_color;
this.size = size;
this.brick_brush = new SolidBrush(this.brick_color);
}
public int X
{
get { return 0; }
set
{
for (int i = 0; i < brick_point.Length; i++)
{ brick_point[i].X = brick_point[i].X + value;
}
}
}
public int Y //用于从外部获取点的坐标并修改
{
get { return 0; }
set
{
for (int i = 0; i < brick_point.Length; i++)
{ brick_point[i].Y = brick_point[i].Y + value;
}
}
}
public Point[] Points { get { return brick_point; } } //用于外部获取point坐标
public Color Colors { get { return brick_color; } }
public void Clockwise( ) //顺时针旋转90°
{
int temp, i;
int a = brick_point[2].X;
int b = brick_point[2].Y;
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X - a;
brick_point[i].Y = brick_point[i].Y - b;
}
for ( i = 0; i < brick_point.Length; i++)
{
temp = brick_point[i].X;
brick_point[i].X = -brick_point[i].Y;
brick_point[i].Y = temp;
}
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X + a;
brick_point[i].Y = brick_point[i].Y + b;
} }
public void Anticlockwise() //逆时针旋转90°
{
int temp, i;
int a = brick_point[2].X;
int b = brick_point[2].Y;
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X - a;
brick_point[i].Y = brick_point[i].Y - b;
}
for (i = 0; i < brick_point.Length; i++)
{
temp = brick_point[i].Y;
brick_point[i].Y = -brick_point[i].X;
brick_point[i].X = temp;
}
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X + a;
brick_point[i].Y = brick_point[i].Y + b;
} }
public void Draw(Graphics photo) //画俄罗斯方块
{
foreach (Point p in brick_point)
{
lock (photo)
{
photo.FillRectangle(brick_brush, ToRectangle(p));
}
}
}
public void Erase(Graphics photo) //擦俄罗斯方块
{
using (SolidBrush sb = new SolidBrush(backgroud_color))
{
foreach (Point p in brick_point)
{
lock (photo)
{
photo.FillRectangle(sb, ToRectangle(p));
}
}
}
}
private Rectangle ToRectangle(Point p) //生成矩形
{
Rectangle a = new Rectangle( p.X * size + 1, p.Y * size + 1, size - 2, size - 2);
return a;
}
}
class Template //方块样式信息
{
private String brick_code;
private Color brick_color;
public Template(String brick_code, Color brick_color)
{
this.brick_code = brick_code;
this.brick_color = brick_color;
}
public String Brick_Code() { return brick_code; }
public Color Brick_Color() { return brick_color; }
}
class MyList //方块列表信息
{
private ArrayList list = new ArrayList(); //大小可改变的动态数组
public int Sum() { return list.Count; } //获取ArrayList的元素个数
public Template this[int i] { get { return (Template)list[i]; } } //获取方块的模板信息
public void Add_Brick(String brick_code, Color brick_color)
{
list.Add(new Template(brick_code, brick_color));
}
public void Clear_Brick() { list.Clear(); }
{
private Rules rules;
public Form1()
{
InitializeComponent();
timer1.Enabled = true;
timer1.Interval = 50;
} private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (rules != null) rules.DrawMain(e.Graphics);
} private void pictureBox2_Paint(object sender, PaintEventArgs e)
{
if (rules != null) rules.DrawMain(e.Graphics);
} private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
if (rules != null)
{
rules.Close();
rules = null;
}
MyList array = new MyList();
array.Add_Brick("0000001000011100000000000", Color.Blue);
array.Add_Brick("0000000000111100000000000", Color.Chocolate);
array.Add_Brick("0000001000011000010000000", Color.Green);
array.Add_Brick("0000000100011100000000000", Color.Coral);
array.Add_Brick("0000000100011000100000000", Color.HotPink);
array.Add_Brick("0000000000011100100000000", Color.YellowGreen);
array.Add_Brick("0000000000011000110000000", Color.Violet);
rules = new Rules(15, 20, array, 20, Color.Black, pictureBox1.CreateGraphics(), pictureBox2.CreateGraphics(), 0, Color.Blue, false);
rules.Start();
}
else
{
if (rules == null || rules.GameOver())
return;
else if (e.KeyCode == Keys.Left) rules.Left();
else if (e.KeyCode == Keys.Right) rules.Right();
else if (e.KeyCode == Keys.Up) rules.Rotate();
else if (e.KeyCode == Keys.Down) rules.Down();
else if (e.KeyCode == Keys.Space) rules.DropDown();
}
} class Brick //方块基本元素
{
private Point[] brick_point; //方块坐标数组
private Color brick_color; //方块
private Color backgroud_color; //背景颜色
private int size; //像素
private SolidBrush brick_brush; //着色刷 public Brick(Point[] brick_point, Color brick_color, Color backgroud_color, int size)
{
this.brick_point = brick_point;
this.brick_color = brick_color;
this.backgroud_color = backgroud_color;
this.size = size;
this.brick_brush = new SolidBrush(this.brick_color);
}
public int X
{
get { return 0; }
set
{
for (int i = 0; i < brick_point.Length; i++)
{ brick_point[i].X = brick_point[i].X + value;
}
}
}
public int Y //用于从外部获取点的坐标并修改
{
get { return 0; }
set
{
for (int i = 0; i < brick_point.Length; i++)
{ brick_point[i].Y = brick_point[i].Y + value;
}
}
}
public Point[] Points { get { return brick_point; } } //用于外部获取point坐标
public Color Colors { get { return brick_color; } }
public void Clockwise( ) //顺时针旋转90°
{
int temp, i;
int a = brick_point[2].X;
int b = brick_point[2].Y;
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X - a;
brick_point[i].Y = brick_point[i].Y - b;
}
for ( i = 0; i < brick_point.Length; i++)
{
temp = brick_point[i].X;
brick_point[i].X = -brick_point[i].Y;
brick_point[i].Y = temp;
}
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X + a;
brick_point[i].Y = brick_point[i].Y + b;
} }
public void Anticlockwise() //逆时针旋转90°
{
int temp, i;
int a = brick_point[2].X;
int b = brick_point[2].Y;
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X - a;
brick_point[i].Y = brick_point[i].Y - b;
}
for (i = 0; i < brick_point.Length; i++)
{
temp = brick_point[i].Y;
brick_point[i].Y = -brick_point[i].X;
brick_point[i].X = temp;
}
for (i = 0; i < brick_point.Length; i++)
{
brick_point[i].X = brick_point[i].X + a;
brick_point[i].Y = brick_point[i].Y + b;
} }
public void Draw(Graphics photo) //画俄罗斯方块
{
foreach (Point p in brick_point)
{
lock (photo)
{
photo.FillRectangle(brick_brush, ToRectangle(p));
}
}
}
public void Erase(Graphics photo) //擦俄罗斯方块
{
using (SolidBrush sb = new SolidBrush(backgroud_color))
{
foreach (Point p in brick_point)
{
lock (photo)
{
photo.FillRectangle(sb, ToRectangle(p));
}
}
}
}
private Rectangle ToRectangle(Point p) //生成矩形
{
Rectangle a = new Rectangle( p.X * size + 1, p.Y * size + 1, size - 2, size - 2);
return a;
}
}
class Template //方块样式信息
{
private String brick_code;
private Color brick_color;
public Template(String brick_code, Color brick_color)
{
this.brick_code = brick_code;
this.brick_color = brick_color;
}
public String Brick_Code() { return brick_code; }
public Color Brick_Color() { return brick_color; }
}
class MyList //方块列表信息
{
private ArrayList list = new ArrayList(); //大小可改变的动态数组
public int Sum() { return list.Count; } //获取ArrayList的元素个数
public Template this[int i] { get { return (Template)list[i]; } } //获取方块的模板信息
public void Add_Brick(String brick_code, Color brick_color)
{
list.Add(new Template(brick_code, brick_color));
}
public void Clear_Brick() { list.Clear(); }
class Produce //产生方块
{
private MyList mylist_list;
private Color backgroud_color;
private int size;
public Produce(MyList mylist_list, Color backgroud_color, int size)
{
this.mylist_list = mylist_list;
this.backgroud_color = backgroud_color;
this.size = size;
}
public Brick Creat()
{
Random i = new Random();
int j = i.Next(mylist_list.Sum());
String code = mylist_list[j].Brick_Code(); //随机获取一个方块模板的编码
List<Point> list = new List<Point>();
for (int a = 0; a < code.Length; a++)
{
if (code[a] == '1')
{
Point p = new Point(a % 5, a / 5); //根据下表计算坐标
list.Add(p);
}
}
Brick brick = new Brick(list.ToArray(), mylist_list[j].Brick_Color(), backgroud_color, size);
//if (i.Next(2) == 1) brick.Clockwise(); //如果两个形状一样,随机旋转。
return brick;
}
}
class Rules
{
#region 常量属性
private readonly Color[] colors = new Color[] { Color.Violet, Color.Tomato, Color.Red, Color.Green };//闪烁颜色
private readonly int[] speed = new int[] { 700, 600, 550, 500, 450, 400, 350, 300, 250, 200 }; //速度
private readonly int[] score = new int[] { 100, 300, 500, 1000, 1500 }; //得分
#endregion #region 可变属性
private Produce a_produce; //产生方块
private int a_height = 15, a_width = 25; //画板尺寸
private Color[,] a_brickarray; //固定砖块颜色数组
private Color a_backgroud, a_gridcolor; //背景和网格颜色
private int a_size; //单元格像素
private int a_score = 0, a_level = 0; //分数等级初始化
private bool a_gameover = false, a_go = false, a_pause = false, a_gridon = false; //游戏运行指令
private Graphics a_maincanvas, a_nextcanvas; //主屏幕和辅屏幕
private Brick a_movebrick, a_nextbrick; //正在操作的方块和下一个方块
private System.Timers.Timer a_timer; //定时器
#endregion public Rules(int a_width, int a_height, MyList a_mylist, int a_size, Color a_backgroud, Graphics a_maincanvas, Graphics a_nextcanvas, int a_level, Color a_gridcolor, bool a_gridon)
{
this.a_width = a_width;
this.a_height = a_height;
this.a_brickarray = new Color[a_width, a_height];
this.a_backgroud = a_backgroud;
this.a_maincanvas = a_maincanvas;
this.a_nextcanvas = a_nextcanvas;
this.a_size = a_size;
this.a_level = a_level;
this.a_gridcolor = a_gridcolor;
this.a_produce = new Produce(a_mylist, a_backgroud, a_size); RanndomBrick();
}
public void Start()
{
a_movebrick = a_produce.Creat();
a_movebrick.X = 5; //保证出现的方块在屏幕中间
a_movebrick.Y = a_movebrick.Y;
DrawMain(a_maincanvas);
int y = 0;
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].Y < y)
y = a_movebrick.Points[i].Y;
}
a_movebrick.Y = -y; //保证完整显示方块
Thread.Sleep(20);
a_nextbrick = a_produce.Creat();
DrawNext(a_nextcanvas);
a_timer = new System.Timers.Timer(speed[a_level]);
a_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
a_timer.AutoReset = true;
a_timer.Start();
}
public void Close()
{
if (a_timer != null)
{
a_timer.Close();
a_timer.Dispose();
a_maincanvas.Dispose();
a_nextcanvas.Dispose();
} }
public bool GameOver()
{
return a_gameover;
}
public bool Down()
{
if (a_movebrick == null) return true;
for (int i = 0; i < a_movebrick.Points.Length; i++) //检测方块下一个坐标是否合法
{
if (a_movebrick.Points[i].Y >= a_height - 1)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X,a_movebrick.Points[i].Y+1].IsEmpty)
return false; //检测方块下方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.Y++;
a_movebrick.Draw(a_maincanvas);
return true;
}
public void DropDown() //方块直接沉底
{
a_timer.Stop();
while (Down()) ;
a_timer.Start();
}
public bool Rotate()
{
if (a_movebrick == null) return true;
a_movebrick.Erase(a_maincanvas);
a_movebrick.Clockwise();
for (int i = 0; i < a_movebrick.Points.Length; i++) //检测方块下一个坐标是否合法
{ if (a_movebrick.Points[i].X > a_width - 1 || a_movebrick.Points[i].Y >= a_height - 1 || a_movebrick.Points[i].X < 0)
{
a_movebrick.Anticlockwise();
break;
} }
a_movebrick.Draw(a_maincanvas);
return true;
}
public bool Right()
{
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].X >= a_width - 1)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X+1, a_movebrick.Points[i].Y].IsEmpty)
return false; //检测方块右方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.X++;
a_movebrick.Draw(a_maincanvas);
return true;
}
public bool Left()
{
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].X <= 0)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X - 1, a_movebrick.Points[i].Y].IsEmpty)
return false; //检测方块左方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.X--;
a_movebrick.Draw(a_maincanvas);
return true;
}
public void DrawMain(Graphics photo)
{
lock (photo)
{
photo.Clear(a_backgroud);
}
if (a_gridon) DrawLines(photo);
DrawBrick(photo);
if (a_movebrick != null) a_movebrick.Draw(photo);
}
public void DrawNext(Graphics photo)
{
lock (photo)
{
photo.Clear(a_backgroud);
}
if (a_nextbrick != null) a_nextbrick.Draw(photo);
}
private void OnTimedEvent(object source,ElapsedEventArgs e) //时时更新方块
{
if (a_pause || a_gameover)
{
if (a_gameover) DrawGameOver();
return;
}
if (a_go)
{
if(!Down()) Check();
}
}
private void DrawLines(Graphics photo) //画网格
{
lock(photo)
{
using (Pen p = new Pen(a_gridcolor, 1))
{
int i;
for (i = 1; i < a_width; i++)
photo.DrawLine(p, i * a_size - 1, 0, i * a_size - 1, a_height * a_size);
for (i = 1; i < a_height; i++)
photo.DrawLine(p, 0, i * a_size, a_width * a_size, i * a_size);
}
}
}
private void DrawBrick(Graphics photo) //画已有砖块
{
lock(photo)
{
int row,column;
for (row = 0; row < a_height; row++)
{
for (column = 0; column < a_width; column++)
{
Color c = a_brickarray[column, row];
if (c.IsEmpty) c = a_backgroud;
using (SolidBrush sb = new SolidBrush(c))
{
photo.FillRectangle(sb, column * a_size + 1, row * a_size + 1, a_size - 2, a_size - 2);
}
}
}
}
}
}
class Produce //产生方块
{
private MyList mylist_list;
private Color backgroud_color;
private int size;
public Produce(MyList mylist_list, Color backgroud_color, int size)
{
this.mylist_list = mylist_list;
this.backgroud_color = backgroud_color;
this.size = size;
}
public Brick Creat()
{
Random i = new Random();
int j = i.Next(mylist_list.Sum());
String code = mylist_list[j].Brick_Code(); //随机获取一个方块模板的编码
List<Point> list = new List<Point>();
for (int a = 0; a < code.Length; a++)
{
if (code[a] == '1')
{
Point p = new Point(a % 5, a / 5); //根据下表计算坐标
list.Add(p);
}
}
Brick brick = new Brick(list.ToArray(), mylist_list[j].Brick_Color(), backgroud_color, size);
//if (i.Next(2) == 1) brick.Clockwise(); //如果两个形状一样,随机旋转。
return brick;
}
}
class Rules
{
#region 常量属性
private readonly Color[] colors = new Color[] { Color.Violet, Color.Tomato, Color.Red, Color.Green };//闪烁颜色
private readonly int[] speed = new int[] { 700, 600, 550, 500, 450, 400, 350, 300, 250, 200 }; //速度
private readonly int[] score = new int[] { 100, 300, 500, 1000, 1500 }; //得分
#endregion #region 可变属性
private Produce a_produce; //产生方块
private int a_height = 15, a_width = 25; //画板尺寸
private Color[,] a_brickarray; //固定砖块颜色数组
private Color a_backgroud, a_gridcolor; //背景和网格颜色
private int a_size; //单元格像素
private int a_score = 0, a_level = 0; //分数等级初始化
private bool a_gameover = false, a_go = false, a_pause = false, a_gridon = false; //游戏运行指令
private Graphics a_maincanvas, a_nextcanvas; //主屏幕和辅屏幕
private Brick a_movebrick, a_nextbrick; //正在操作的方块和下一个方块
private System.Timers.Timer a_timer; //定时器
#endregion public Rules(int a_width, int a_height, MyList a_mylist, int a_size, Color a_backgroud, Graphics a_maincanvas, Graphics a_nextcanvas, int a_level, Color a_gridcolor, bool a_gridon)
{
this.a_width = a_width;
this.a_height = a_height;
this.a_brickarray = new Color[a_width, a_height];
this.a_backgroud = a_backgroud;
this.a_maincanvas = a_maincanvas;
this.a_nextcanvas = a_nextcanvas;
this.a_size = a_size;
this.a_level = a_level;
this.a_gridcolor = a_gridcolor;
this.a_produce = new Produce(a_mylist, a_backgroud, a_size); RanndomBrick();
}
public void Start()
{
a_movebrick = a_produce.Creat();
a_movebrick.X = 5; //保证出现的方块在屏幕中间
a_movebrick.Y = a_movebrick.Y;
DrawMain(a_maincanvas);
int y = 0;
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].Y < y)
y = a_movebrick.Points[i].Y;
}
a_movebrick.Y = -y; //保证完整显示方块
Thread.Sleep(20);
a_nextbrick = a_produce.Creat();
DrawNext(a_nextcanvas);
a_timer = new System.Timers.Timer(speed[a_level]);
a_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
a_timer.AutoReset = true;
a_timer.Start();
}
public void Close()
{
if (a_timer != null)
{
a_timer.Close();
a_timer.Dispose();
a_maincanvas.Dispose();
a_nextcanvas.Dispose();
} }
public bool GameOver()
{
return a_gameover;
}
public bool Down()
{
if (a_movebrick == null) return true;
for (int i = 0; i < a_movebrick.Points.Length; i++) //检测方块下一个坐标是否合法
{
if (a_movebrick.Points[i].Y >= a_height - 1)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X,a_movebrick.Points[i].Y+1].IsEmpty)
return false; //检测方块下方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.Y++;
a_movebrick.Draw(a_maincanvas);
return true;
}
public void DropDown() //方块直接沉底
{
a_timer.Stop();
while (Down()) ;
a_timer.Start();
}
public bool Rotate()
{
if (a_movebrick == null) return true;
a_movebrick.Erase(a_maincanvas);
a_movebrick.Clockwise();
for (int i = 0; i < a_movebrick.Points.Length; i++) //检测方块下一个坐标是否合法
{ if (a_movebrick.Points[i].X > a_width - 1 || a_movebrick.Points[i].Y >= a_height - 1 || a_movebrick.Points[i].X < 0)
{
a_movebrick.Anticlockwise();
break;
} }
a_movebrick.Draw(a_maincanvas);
return true;
}
public bool Right()
{
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].X >= a_width - 1)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X+1, a_movebrick.Points[i].Y].IsEmpty)
return false; //检测方块右方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.X++;
a_movebrick.Draw(a_maincanvas);
return true;
}
public bool Left()
{
for (int i = 0; i < a_movebrick.Points.Length; i++)
{
if (a_movebrick.Points[i].X <= 0)
return false;//检测方块下一个坐标是否超出范围
if (!a_brickarray[a_movebrick.Points[i].X - 1, a_movebrick.Points[i].Y].IsEmpty)
return false; //检测方块左方是否有方块
}
a_movebrick.Erase(a_maincanvas);
a_movebrick.X--;
a_movebrick.Draw(a_maincanvas);
return true;
}
public void DrawMain(Graphics photo)
{
lock (photo)
{
photo.Clear(a_backgroud);
}
if (a_gridon) DrawLines(photo);
DrawBrick(photo);
if (a_movebrick != null) a_movebrick.Draw(photo);
}
public void DrawNext(Graphics photo)
{
lock (photo)
{
photo.Clear(a_backgroud);
}
if (a_nextbrick != null) a_nextbrick.Draw(photo);
}
private void OnTimedEvent(object source,ElapsedEventArgs e) //时时更新方块
{
if (a_pause || a_gameover)
{
if (a_gameover) DrawGameOver();
return;
}
if (a_go)
{
if(!Down()) Check();
}
}
private void DrawLines(Graphics photo) //画网格
{
lock(photo)
{
using (Pen p = new Pen(a_gridcolor, 1))
{
int i;
for (i = 1; i < a_width; i++)
photo.DrawLine(p, i * a_size - 1, 0, i * a_size - 1, a_height * a_size);
for (i = 1; i < a_height; i++)
photo.DrawLine(p, 0, i * a_size, a_width * a_size, i * a_size);
}
}
}
private void DrawBrick(Graphics photo) //画已有砖块
{
lock(photo)
{
int row,column;
for (row = 0; row < a_height; row++)
{
for (column = 0; column < a_width; column++)
{
Color c = a_brickarray[column, row];
if (c.IsEmpty) c = a_backgroud;
using (SolidBrush sb = new SolidBrush(c))
{
photo.FillRectangle(sb, column * a_size + 1, row * a_size + 1, a_size - 2, a_size - 2);
}
}
}
}
}
http://download.csdn.net/detail/zhenjinsuo/385072