俄罗斯方块速度怎么搞,我设的速度都没有用,而且我把速度都删了方块还能运行
using System;using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 俄罗斯方块
{
public partial class Form1 : Form
{
Russia MyRussia = new Russia();
Russia TemRussia = new Russia();//生成下一个方块样式
public static int Crand = 0;//记录下一个方块样式的标识
public static bool b = false;//判断是否生成下一个方块的样式
public static bool isbegin = false;//判断当前游戏是否开始
public bool stop = true;//判断是否暂停游戏
public Timer timer = new Timer();
public Form1()
{
InitializeComponent();
}
private void 结束游戏ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}
private void 开始游戏ToolStripMenuItem_Click(object sender, EventArgs e)
{
MyRussia.GameBackClear();
MyRussia.firstcake = new Point(140, 20);
MyRussia.hang = labhang;
MyRussia.fenshu = labfenshu;
timer1.Enabled = true;//开始计时
if (Convert.ToInt32(labfenshu.Text) < 7)
{
timer1.Interval = 300;
}
else if (Convert.ToInt32(labfenshu.Text) > 7)
{
timer1.Interval = 30;
}
Random rand = new Random();
Crand= rand.Next(1, 8);
MyRussia.CakeMode(Crand);
MyRussia.ProtractCake(panel1);
nextcake();
MyRussia.PlaceInitialization();
isbegin = true;
//stop = false;
MyRussia.time = timer1;
暂停游戏ToolStripMenuItem.Text = "暂停";
stop = true;
textBox1.Focus();//获取焦点
}
public void nextcake()//提示下个方块的方法
{
Graphics P3 = panel3.CreateGraphics();
P3.FillRectangle(new SolidBrush(Color.Black), 0, 0, panel3.Width, panel3.Height);
Random rand = new Random();
Crand = rand.Next(1, 8);
TemRussia.firstcake = new Point(50, 30);//设置方块的起始位置
TemRussia.CakeMode(Crand);//设置方块的样式
TemRussia.ProtractCake(panel3);//绘制组合方块
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (!isbegin)
return;
if (!stop)
return;
if (e.KeyCode == Keys.Up)//↑键
{ MyRussia.MyConvertorMode(); }
if (e.KeyCode == Keys.Down)//↓键
{
timer1.Interval = 150;
MyRussia.ConvertorMove(0);
}
if (e.KeyCode == Keys.Left)//←键
MyRussia.ConvertorMove(1);
if (e.KeyCode == Keys.Right)//→键
MyRussia.ConvertorMove(2);
}
private void timer1_Tick(object sender, EventArgs e)
{
MyRussia.ConvertorMove(0);//方块下移
if (b)
{
nextcake();//生成下一个方块
b = false;
}
textBox1.Focus();//获取焦点
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (!isbegin)
return;
if (!stop)
return;
if (e.KeyCode == Keys.Down)
{
timer1.Interval = 200;
}
textBox1.Focus();//获取焦点
}
private void 暂停游戏ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (timer1.Enabled == true)
{
timer1.Stop();//暂停
暂停游戏ToolStripMenuItem.Text = "继续";
stop = false;
textBox1.Focus();//获取焦点
}
else
{
timer1.Start();//继续
暂停游戏ToolStripMenuItem.Text = "暂停";
stop = true;
textBox1.Focus();//获取焦点
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
if (isbegin)
{
for (int i = 0; i <= (panel1.Width / 20 - 1); i++)
{
for (int j = 0; j <= (panel1.Height / 20 - 1); j++)
{
Rectangle rect = new Rectangle(i * 20 + 1, j * 20 + 1, 19, 19);//获取各方块的绘制区域
e.Graphics.FillRectangle(new SolidBrush(Russia.PlaceColor[i, j]), rect);
}
}
}
}
private void panel3_Paint(object sender, PaintEventArgs e)
{
if (isbegin)
{
TemRussia.firstcake = new Point(50, 30);
TemRussia.CakeMode(Crand);//设置方块的样式
TemRussia.ProtractCake(panel3);//绘制组合方块
}
}
}
}
类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace 俄罗斯方块
{
public class Russia
{
public Point firstcake = new Point(140, 20);//定义方块的起始位置
public static Color[,] PlaceColor;
public static bool[,] Place;//方块位置
public static int conWidth = 0;//记录列数
public static int conHeight = 0;//记录行数
public static int maxY = 0;//方块在行中的最小高度
public static int conMax = 0;//方块落下后的最大位置
public static int conMin = 0;//方块落下后的最小位置
Point[] ArryPoi = new Point[4];//方块的数组
Point[] Arryfront = new Point[4];//前一个方块的数组
int Cake = 20;//定义方块的大小
int Con = 0;//方块变换变量
Control Mycontrol = new Control();
public Timer time = new Timer();
Color CakeColor;
public int line;
bool[] tem_Array = { false, false, false, false };//记录方块组中那一块所在行中已满
public Label hang = new Label();
public Label fenshu = new Label();
public static int[] ArrayCent = new int[] { 5, 7, 9 ,11};
/// <summary>
/// 设置方块的样式
/// n是方块的样式
/// </summary>
public void CakeMode(int n)
{
ArryPoi[0] = firstcake;//记录方块的起始位置,即第一块
switch (n)
{
case 1://“L”方块
{
ArryPoi[1] = new Point(firstcake.X, firstcake.Y - Cake);//第二块方块的位置
ArryPoi[2] = new Point(firstcake.X, firstcake.Y + Cake);//第三块方块的位置
ArryPoi[3] = new Point(firstcake.X + Cake, firstcake.Y + Cake);//第四块方块的位置
CakeColor = Color.Yellow;
Con= 2;//方块变化
break;
}
case 2://组合“Z”方块
{
ArryPoi[1] = new Point(firstcake.X, firstcake.Y - Cake);
ArryPoi[2] = new Point(firstcake.X - Cake, firstcake.Y - Cake);
ArryPoi[3] = new Point(firstcake.X + Cake, firstcake.Y);
CakeColor = Color.Green;
Con = 6;
break;
}
case 3://组合“T”方块
{
ArryPoi[1] = new Point(firstcake.X, firstcake.Y - Cake);
ArryPoi[2] = new Point(firstcake.X + Cake, firstcake.Y - Cake);
ArryPoi[3] = new Point(firstcake.X - Cake, firstcake.Y - Cake);
CakeColor = Color.Silver;
Con = 8;
break;
}
case 4://组合“一”方块
{
ArryPoi[1] = new Point(firstcake.X + Cake, firstcake.Y);
ArryPoi[2] = new Point(firstcake.X - Cake, firstcake.Y);
ArryPoi[3] = new Point(firstcake.X - Cake * 2, firstcake.Y);
CakeColor = Color.Red;
Con = 12;
break;
}
case 5://组合“田”方块
{
ArryPoi[1] = new Point(firstcake.X - Cake, firstcake.Y);
ArryPoi[2] = new Point(firstcake.X - Cake, firstcake.Y - Cake);
ArryPoi[3] = new Point(firstcake.X, firstcake.Y - Cake);
CakeColor = Color.LightCoral;
Con = 13;
break;
}
case 6://组合倒“L”方块
{
ArryPoi[1] = new Point(firstcake.X, firstcake.Y - Cake);
ArryPoi[2] = new Point(firstcake.X, firstcake.Y + Cake);
ArryPoi[3] = new Point(firstcake.X - Cake, firstcake.Y + Cake);
CakeColor = Color.CornflowerBlue;
Con = 15;
break;
}
case 7://组合倒“Z”方块
{
ArryPoi[1] = new Point(firstcake.X, firstcake.Y - Cake);
ArryPoi[2] = new Point(firstcake.X + Cake, firstcake.Y - Cake);
ArryPoi[3] = new Point(firstcake.X - Cake, firstcake.Y);
CakeColor = Color.Blue;
Con = 19;
break;
}
}
}
/// <summary>
/// 设置方块的变换样式
/// n是判断变换的样式
/// </summary>
public void ConvertorMode(int n)
{
Point[] temporaryArray = new Point[4];//定义一个数组用于记录当前方块
Point cake_Poi = firstcake;//获取方块的起始位置
int w = n;//记录方块的下一个变换样式
for (int i = 0; i < temporaryArray.Length; i++)
temporaryArray[i] = ArryPoi[i];
switch (n)
{
case 1://设置“L”方块的起始样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y + Cake);
w = 2;//记录变换样式的标志
break;
}
case 2://L样式
{
temporaryArray[1] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X - Cake, cake_Poi.Y + Cake);
w = 3;
break;
}
case 3://L样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
w = 4;
break;
}
case 4://L样式
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y - Cake);
w = 1;//返回方块的起始样式
break;
}
case 5://Z
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
w = 6;
break;
}
case 6://Z样式,只有一种
{
temporaryArray[1] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
w = 5;
break;
}
case 7://T
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
w = 8;
break;
}
case 8://T样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
w = 9;
break;
}
case 9://T样式
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
w = 10;
break;
}
case 10://T样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
w = 8;
break;
}
case 11://一
{
temporaryArray[1] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X - Cake * 2, cake_Poi.Y);
w = 12;
break;
}
case 12://一样式,只有一种
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y + Cake * 2);
w = 11;
break;
}
case 13://田,无旋转
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
w = 19;
break;
}
case 14://倒L
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y + Cake);
w = 15;
break;
}
case 15://倒L样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
temporaryArray[3] = new Point(cake_Poi.X - Cake, cake_Poi.Y + Cake);
w = 16;
break;
}
case 16://倒L样式
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y);
temporaryArray[3] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
w = 17;
break;
}
case 17://倒L样式
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
temporaryArray[3] = new Point(cake_Poi.X + Cake, cake_Poi.Y - Cake);
w = 14;
break;
}
case 18://倒Z
{
temporaryArray[1] = new Point(cake_Poi.X, cake_Poi.Y - Cake);
temporaryArray[2] = new Point(cake_Poi.X + Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
w = 19;
break;
}
case 19://倒Z样式
{
temporaryArray[1] = new Point(cake_Poi.X - Cake, cake_Poi.Y);
temporaryArray[2] = new Point(cake_Poi.X - Cake, cake_Poi.Y - Cake);
temporaryArray[3] = new Point(cake_Poi.X, cake_Poi.Y + Cake);
w = 18;
break;
}
}
bool a = true;//判断方块是否可变
for (int i = 0; i < temporaryArray.Length; i++)
{
if (temporaryArray[i].X / 20 < 0)//变换后是否超出左边界
{
a = false;//不变换
break;
}
if (temporaryArray[i].X / 20 >= conWidth)//变换后是否超出右边界
{
a = false;
break;
}
if (temporaryArray[i].Y / 20 >= conHeight)//变换后是否超出下边界
{
a = false;
break;
}
if (Place[temporaryArray[i].X / 20, temporaryArray[i].Y / 20])//变换后是否与其他方块重叠
{
a = false;
break;
}
}
if (a)//如果当前方块可以变换
{
//改变当前方块的样式
for (int i = 0; i < temporaryArray.Length; i++)
{
ArryPoi[i] = temporaryArray[i];
firstcake = cake_Poi;//获取当前方块的起始位置
Con = w;//获取方块下一次的变换样式
}
}
}
/// <summary>
/// 绘制出一块方块
/// g=Graphics封装一个绘图的类对象
/// SolidB=SolidBrush画刷
/// rect= Rectangle 绘制区域
/// 详情查看课本14章
/// </summary>
public void CakePaint(Graphics g, SolidBrush SolidB, Rectangle rect)
{
g.FillRectangle(SolidB, rect);//填充矩形
}
/// <summary>
/// 清空游戏背景
/// </summary>
public void GameBackClear()
{
if (Mycontrol != null)//如要已载入背景控件
{
Graphics g = Mycontrol.CreateGraphics();
Rectangle rect = new Rectangle(0, 0, Mycontrol.Width, Mycontrol.Height);//获取背景的区域
CakePaint(g, new SolidBrush(Color.Black), rect);//用背景色填充背景
}
}
/// <summary>
/// 清除方块运行时的痕迹
/// </summary>
public void GameSportDelete()
{
Graphics g = Mycontrol.CreateGraphics();
for (int i = 0; i < ArryPoi.Length; i++)
{
Rectangle rect = new Rectangle(ArryPoi[i].X, ArryPoi[i].Y, 20, 20);//获取各子方块的区域
CakePaint(g, new SolidBrush(Color.Black), rect);//用背景色填充背景
}
}
/// <summary>
/// 绘制组合方块
/// </summary>
public void ProtractCake(Control control)
{
Mycontrol = control;
Graphics g = control.CreateGraphics();//背景控件
//绘制方块的各个子方块
for (int i = 0; i < ArryPoi.Length; i++)
{
Rectangle rect = new Rectangle(ArryPoi[i].X + 1, ArryPoi[i].Y + 1, 18, 18);
CakePaint(g, new SolidBrush(CakeColor), rect);//绘制子方块
}
}
/// <summary>
/// 去除已添满的行
/// </summary>
public void MoveRow(int max, int min)
{
Graphics g = Mycontrol.CreateGraphics();
int t_max = max / 20;
int t_min = min / 20;//获取方块的最小位置在多少行
bool a = false;//初始化记录刷新行的数组
for (int i = 0; i < 4; i++)
{
tem_Array[i] = false;
}
int tem_n = maxY;//记录最高行的位置
for (int i = 0; i < 4; i++)//查找要刷新的行
{
if ((t_min + i) > 19)//如果超出边界20
break;//退出本次操作
a = false;
for (int k = 0; k < conWidth; k++)//如果当前行中有空格
{
if (!Place[k, t_min + i])//如果当前位置为空
{
a = true;
break;
}
}
if (!a)//如要当行为满行
{
tem_Array[i] = true;//记录为刷新行
}
}
int dele = 0;//记录去除的几行
if (tem_Array[0] == true || tem_Array[1] == true || tem_Array[2] == true || tem_Array[3] == true)//如果有刷新行
{
int minrow = 0;//记录最小行数
for (int i = (tem_Array.Length - 1); i >= 0; i--)//遍历记录刷新行的数组
{
if (tem_Array[i])//如果是刷新行
{
minrow = min / 20 + i;//记录最小行数
//将刷新行到背景顶端的区域下移
for (int j = minrow; j >= 1; j--)
{
for (int k = 0; k < conWidth; k++)
{
PlaceColor[k, j] = PlaceColor[k, j - 1];//记录方块的位置
Place[k, j] = Place[k, j - 1];//记录方块的位置
}
}
min += 20;//方块的最小位置下移一个方块位
for (int k = 0; k < conWidth; k++)
{
PlaceColor[k, 0] = Color.Black;//记录方块的位置
Place[k, 0] = false;//记录方块的位置
}
dele += 1;//记录刷新的行数
}
}
//在背景中绘制刷新后的方块图案
for (int i = 0; i < conWidth; i++)//conWidth为记录列数
{
for (int j = 0; j <= max / 20; j++)
{
Rectangle r = new Rectangle(i * Cake + 1, j * Cake + 1, 19, 19);//获取各方块的区域
CakePaint(g, new SolidBrush(PlaceColor[i, j]), r);//绘制已落下的方块
}
}
hang.Text = Convert.ToString(Convert.ToInt32(hang.Text) + dele);
fenshu.Text = Convert.ToString(Convert.ToInt32(fenshu.Text) + ArrayCent[dele]);
}
}
///<summary>
///判断方块移动时是否出边界
/// 判断移动停止
///</summary>
public bool MoveStop(int n)
{
bool a = true;
int width = 0;
int height = 0;
switch (n)
{
case 0://下移
{
for (int i = 0; i < Arryfront.Length; i++)
{
width = Arryfront[i].X / 20;//获取横向坐标
height = Arryfront[i].Y / 20;//获取纵向坐标
if (height == conHeight || Place[width, height])//判断是否超出底边界,或是与其他方块重叠
{ a = false; }//超出边界
}
break;
}
case 1://左移
{
for (int i = 0; i < Arryfront.Length; i++)
{
width = Arryfront[i].X / 20;
height = Arryfront[i].Y / 20;
if (width == -1 || Place[width, height])//是否超出左边界,或是与其他方块重叠
{ a = false; }
}
break;
}
case 2://右移
{
for (int i = 0; i < Arryfront.Length; i++)
{
width = Arryfront[i].X / 20;
height = Arryfront[i].Y / 20;
if (width == conWidth || Place[width, height])//判断是否超出右边界,或是与其他方块重叠
{ a = false; }
}
break;
}
}
return a;
}
///<summary>
///方块的移动
///</summary>
public void ConvertorMove(int n)
{
//记录方块移动前的位置
for (int i = 0; i < Arryfront.Length; i++)
{ Arryfront[i] = ArryPoi[i]; }
switch (n)
{
case 0://下移
{
for (int i = 0; i < Arryfront.Length; i++)
{
Arryfront[i] = new Point(Arryfront[i].X, Arryfront[i].Y + Cake);
}
break;
}
case 1://左移
{
for (int i = 0; i < Arryfront.Length; i++)
{
Arryfront[i] = new Point(Arryfront[i].X - Cake, Arryfront[i].Y);
}
break;
}
case 2://右移
{
for (int i = 0; i < Arryfront.Length; i++)
{
Arryfront[i] = new Point(Arryfront[i].X + Cake, Arryfront[i].Y);
}
break;
}
}
bool a = MoveStop(n);//记录方块移动后是否出边界
if (a)//没有
{
GameSportDelete();
for (int i = 0; i < Arryfront.Length; i++)//获取移动后方块的位置
ArryPoi[i] = Arryfront[i];
firstcake = ArryPoi[0];
ProtractCake(Mycontrol);//绘制移动后方块
}
else//方块到底
{
if (!a && n == 0)//如果当前方块是下移
{
conMax = 0;//方块落下后的顶端位置
conMin = Mycontrol.Height;//记录方块落下后的底端位置
for (int i = 0; i < ArryPoi.Length; i++)
{
if (ArryPoi[i].Y < maxY)//记方块的顶端位置
maxY = ArryPoi[i].Y;
Place[ArryPoi[i].X / 20, ArryPoi[i].Y / 20] = true;//记录指定的位置已存在方块
PlaceColor[ArryPoi[i].X / 20, ArryPoi[i].Y / 20] = CakeColor;
if (ArryPoi[i].Y > conMax)
conMax = ArryPoi[i].Y;
if (ArryPoi[i].Y < conMin)
conMin = ArryPoi[i].Y;
}
if (firstcake.X == 140 && firstcake.Y == 20)
{
time.Stop();
Form1.isbegin = false;
MessageBox.Show("游戏结束");
return;
}
Random rand = new Random();//实例化Random
int cakerand = rand.Next(1, 8);//获取随机数
firstcake = new Point(140, 20);//设置方块的起始位置
CakeMode(Form1.Crand);//设置方块的样式
ProtractCake(Mycontrol);//绘制组合方块
MoveRow(conMax, conMin);//去除已填满的行
Form1.b = true;//标识,判断可以生成下一个方块
}
}
}
/// <summary>
/// 变换当前方块的样式
/// </summary>
public void MyConvertorMode()
{
GameSportDelete();
ConvertorMode(Con);
ProtractCake(Mycontrol);//变换后的方块
}
/// <summary>
/// 对信息进行初始化
/// </summary>
public void PlaceInitialization()
{
conWidth = Mycontrol.Width / 20;//布局总行数
conHeight = Mycontrol.Height / 20;//总列数
Place = new bool[conWidth, conHeight];//定义记录各方块位置的数组
PlaceColor = new Color[conWidth, conHeight];//记录各方块颜色的数组
//对各方块的信息进行初始化
for (int i = 0; i < conWidth; i++)
{
for (int j = 0; j < conHeight; j++)
{
Place[i, j] = false;//方块为空
PlaceColor[i, j] = Color.Black;//与背景色相同
}
}
maxY = conHeight * Cake;//记录方块的最大值
}
}
}