创建Russia.cs类文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Drawing;
using System.Windows.Forms;namespace 俄罗斯方块
{class Russia{public Point firstPoi = 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;//方块落下后的最小位置bool[] tem_Array = { false, false, false, false };//记录方块组中那一块所在行中已满Color ConColor = Color.Coral;Point[] ArryPoi = new Point[4];//方块的数组Point[] Arryfront = new Point[4];//前一个方块的数组int Cake = 20;//定义方块的大小int Convertor = 0;//变换器Control Mycontrol = new Control();//实例化Controlpublic Label Label_Linage = new Label();//实例化Label,用于显示去除的行数public Label Label_Fraction = new Label();//实例化Label,用于显示分数public static int[] ArrayCent = new int[] { 2, 5, 9, 15 };//记录加分情况public Timer timer = new Timer();/// <summary>/// 设置方块的样式/// </summary>/// <param n="int">标识,方块的样式</param>public void CakeMode(int n){ArryPoi[0] = firstPoi;//记录方块的起始位置switch (n)//根据标识设置方块的样式{case 1://组合“L”方块{ArryPoi[1] = new Point(firstPoi.X, firstPoi.Y - Cake);//设置第二块方块的位置ArryPoi[2] = new Point(firstPoi.X, firstPoi.Y + Cake);//设置第三块方块的位置ArryPoi[3] = new Point(firstPoi.X + Cake, firstPoi.Y + Cake);//设置第四块方块的位置ConColor = Color.Fuchsia;//设置当前方块的颜色Convertor = 2;//记录方块的变换样式break;}case 2://组合“Z”方块{ArryPoi[1] = new Point(firstPoi.X, firstPoi.Y - Cake);ArryPoi[2] = new Point(firstPoi.X - Cake, firstPoi.Y - Cake);ArryPoi[3] = new Point(firstPoi.X + Cake, firstPoi.Y);ConColor = Color.Yellow;Convertor = 6;break;}case 3://组合倒“L”方块{ArryPoi[1] = new Point(firstPoi.X, firstPoi.Y - Cake);ArryPoi[2] = new Point(firstPoi.X, firstPoi.Y + Cake);ArryPoi[3] = new Point(firstPoi.X - Cake, firstPoi.Y + Cake);ConColor = Color.CornflowerBlue;Convertor = 8;break;}case 4://组合倒“Z”方块{ArryPoi[1] = new Point(firstPoi.X, firstPoi.Y - Cake);ArryPoi[2] = new Point(firstPoi.X + Cake, firstPoi.Y - Cake);ArryPoi[3] = new Point(firstPoi.X - Cake, firstPoi.Y);ConColor = Color.Blue;Convertor = 12;break;}case 5://组合“T”方块{ArryPoi[1] = new Point(firstPoi.X, firstPoi.Y - Cake);ArryPoi[2] = new Point(firstPoi.X + Cake, firstPoi.Y - Cake);ArryPoi[3] = new Point(firstPoi.X - Cake, firstPoi.Y - Cake);ConColor = Color.Silver;Convertor = 14;break;}case 6://组合“一”方块{ArryPoi[1] = new Point(firstPoi.X + Cake, firstPoi.Y);ArryPoi[2] = new Point(firstPoi.X - Cake, firstPoi.Y);ArryPoi[3] = new Point(firstPoi.X - Cake*2, firstPoi.Y);ConColor = Color.Red;Convertor = 18;break;}case 7://组合“田”方块{ArryPoi[1] = new Point(firstPoi.X - Cake, firstPoi.Y);ArryPoi[2] = new Point(firstPoi.X - Cake, firstPoi.Y - Cake);ArryPoi[3] = new Point(firstPoi.X, firstPoi.Y - Cake);ConColor = Color.LightGreen;Convertor = 19;break;}}}/// <summary>/// 清空游戏背景/// </summary>public void ConvertorClear(){if (Mycontrol != null)//如要已载入背景控件{Graphics g = Mycontrol.CreateGraphics();//创建背景控件的Graphics类Rectangle rect = new Rectangle(0, 0, Mycontrol.Width, Mycontrol.Height);//获取背景的区域MyPaint(g, new SolidBrush(Color.Black), rect);//用背景色填充背景}}/// <summary>/// 清空当前方块的区域/// </summary>public void ConvertorDelete(){Graphics g = Mycontrol.CreateGraphics();//创建背景控件的Graphics类for (int i = 0; i < ArryPoi.Length; i++)//遍历方块的各个子方块{Rectangle rect = new Rectangle(ArryPoi[i].X, ArryPoi[i].Y, 20, 20);//获取各子方块的区域MyPaint(g, new SolidBrush(Color.Black), rect);//用背景色填充背景}}/// <summary>/// 变换当前方块的样式/// </summary>public void MyConvertorMode(){ConvertorDelete();//清空当前方块的区域ConvertorMode(Convertor);//设置方块的变换样式Protract(Mycontrol);//绘制变换后的组合方块}/// <summary>/// 设置方块的变换样式/// </summary>/// <param n="int">标识,判断变换的样式</param>public void ConvertorMode(int n){Point[] tem_ArrayPoi = new Point[4];//定义一个临时数组Point tem_Poi = firstPoi;//获取方块的起始位置int tem_n = n;//记录方块的下一个变换样式//将当前方块的位置存入到临时数组中for (int i = 0; i < tem_ArrayPoi.Length; i++)tem_ArrayPoi[i] = ArryPoi[i];switch (n)//根据标识变换方块的样式{case 1://设置“L”方块的起始样式{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y + Cake);tem_n = 2;//记录变换样式的标志break;}case 2://“L”方块向旋转的样式{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y - Cake);tem_n = 3;break;}case 3://“L”方块向旋转的样式{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_n = 4;break;}case 4://“L”方块向旋转的样式{tem_ArrayPoi[1] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake, tem_Poi.Y + Cake);tem_n = 1;//返回方块的起始样式break;}case 5://Z{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_n = 6;break;}case 6:{tem_ArrayPoi[1] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_n = 5;break;}case 7://倒L{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake, tem_Poi.Y + Cake);tem_n = 8;break;}case 8:{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y + Cake);tem_n = 9;break;}case 9:{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y - Cake);tem_n = 10;break;}case 10:{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_n = 7;break;}case 11://倒Z{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_n = 12;break;}case 12:{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_n = 11;break;}case 13://T{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_n = 14;break;}case 14:{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_n = 15;break;}case 15:{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_n = 16;break;}case 16:{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_n = 13;break;}case 17://一{tem_ArrayPoi[1] = new Point(tem_Poi.X + Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[3] = new Point(tem_Poi.X - Cake * 2, tem_Poi.Y);tem_n = 18;break;}case 18:{tem_ArrayPoi[1] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_ArrayPoi[2] = new Point(tem_Poi.X, tem_Poi.Y + Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y + Cake * 2);tem_n = 17;break;}case 19://田{tem_ArrayPoi[1] = new Point(tem_Poi.X - Cake, tem_Poi.Y);tem_ArrayPoi[2] = new Point(tem_Poi.X - Cake, tem_Poi.Y - Cake);tem_ArrayPoi[3] = new Point(tem_Poi.X, tem_Poi.Y - Cake);tem_n = 19;break;}}bool tem_bool = true;//判断方块是否可变//遍历方块的各个子方块for (int i = 0; i < tem_ArrayPoi.Length; i++){if (tem_ArrayPoi[i].X / 20 < 0)//变换后是否超出左边界{tem_bool = false;//不变换break;}if (tem_ArrayPoi[i].X / 20 >= conWidth)//变换后是否超出右边界{tem_bool = false;break;}if (tem_ArrayPoi[i].Y / 20 >= conHeight)//变换后是否超出下边界{tem_bool = false;break;}if (Place[tem_ArrayPoi[i].X / 20, tem_ArrayPoi[i].Y / 20])//变换后是否与其他方块重叠{tem_bool = false;break;}}if (tem_bool)//如果当前方块可以变换{//改变当前方块的样式for (int i = 0; i < tem_ArrayPoi.Length; i++)ArryPoi[i] = tem_ArrayPoi[i];firstPoi = tem_Poi;//获取当前方块的起始位置Convertor = tem_n;//获取方块下一次的变换样式}}/// <summary>/// 绘制组合方块/// </summary>/// <param control="Control">控件</param>public void Protract(Control control){Mycontrol = control;Graphics g = control.CreateGraphics();//创建背景控件的Graphics类//绘制方块的各个子方块for (int i = 0; i < ArryPoi.Length; i++){Rectangle rect = new Rectangle(ArryPoi[i].X + 1, ArryPoi[i].Y + 1, 19, 19);//获取子方块的区域MyPaint(g, new SolidBrush(ConColor), rect);//绘制子方块}}/// <summary>/// 对方块的单个块进行绘制/// </summary>/// <param g="Graphics">封装一个绘图的类对象</param>/// <param SolidB="SolidBrush">画刷</param>/// <param rect="Rectangle">绘制区域</param>public void MyPaint(Graphics g, SolidBrush SolidB, Rectangle rect){g.FillRectangle(SolidB, rect);//填充一个矩形}/// <summary>/// 方块移动/// </summary>/// <param n="int">标识,对左右下进行判断</param>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 tem_bool = MoveStop(n);//记录方块移动后是否出边界if (tem_bool)//如果没有出边界{ConvertorDelete();//清空当前方块的区域//获取移动后方块的位置for (int i = 0; i < Arryfront.Length; i++)ArryPoi[i] = Arryfront[i];firstPoi = ArryPoi[0];//记录方块的起始位置Protract(Mycontrol);//绘制移动后方块}else//如果方块到达底部{if (!tem_bool && 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] = ConColor;//记录方块的颜芭if (ArryPoi[i].Y > conMax)//记录方块的顶端位置conMax = ArryPoi[i].Y;if (ArryPoi[i].Y < conMin)//记录方块的底端位置conMin = ArryPoi[i].Y;}if (firstPoi.X == 140 && firstPoi.Y == 20){timer.Stop();Form1.isbegin = false;return;}Random rand = new Random();//实例化Randomint CakeNO = rand.Next(1, 8);//获取随机数firstPoi = new Point(140, 20);//设置方块的起始位置CakeMode(Form1.CakeNO);//设置方块的样式Protract(Mycontrol);//绘制组合方块RefurbishRow(conMax,conMin);//去除已填满的行Form1.become = true;//标识,判断可以生成下一个方块}}}/// <summary>/// 去除已添满的行/// </summary>public void RefurbishRow(int Max,int Min){Graphics g = Mycontrol.CreateGraphics();//创建背景控件的Graphics类int tem_max = Max / 20;//获取方块的最大位置在多少行int tem_min = Min / 20;//获取方块的最小位置在多少行bool tem_bool = false;//初始化记录刷新行的数组for (int i = 0; i < tem_Array.Length; i++)tem_Array[i] = false;int tem_n = maxY;//记录最高行的位置for (int i = 0; i < 4; i++)//查找要刷新的行{if ((tem_min + i) > 19)//如果超出边界break;//退出本次操作tem_bool = false;//如果当前行中有空格for (int k = 0; k < conWidth; k++){if (!Place[k, tem_min + i])//如果当前位置为空{tem_bool = true;break;}}if (!tem_bool)//如要当行为满行{tem_Array[i] = true;//记录为刷新行}}int Progression = 0;//记录去除的几行if (tem_Array[0] == true || tem_Array[1] == true || tem_Array[2] == true || tem_Array[3] == true)//如果有刷新行{int Trow = 0;//记录最小行数for (int i = (tem_Array.Length - 1); i >= 0; i--)//遍历记录刷新行的数组{if (tem_Array[i])//如果是刷新行{Trow = Min / 20 + i;//记录最小行数//将刷新行到背景顶端的区域下移for (int j = Trow; 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;//记录方块的位置}Progression += 1;//记录刷新的行数}}//在背景中绘制刷新后的方块图案for (int i = 0; i < conWidth; i++){for (int j = 0; j <= Max / 20; j++){Rectangle rect = new Rectangle(i * Cake + 1, j * Cake + 1, 19, 19);//获取各方块的区域MyPaint(g, new SolidBrush(PlaceColor[i, j]), rect);//绘制已落下的方块}}//显示当前的刷新行数Label_Linage.Text = Convert.ToString(Convert.ToInt32(Label_Linage.Text) + Progression);//显示当前的得分情况Label_Fraction.Text = Convert.ToString(Convert.ToInt32(Label_Fraction.Text) + ArrayCent[Progression - 1]);}}/// <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;//记录方块的最大值}/// <summary>/// 判断方块移动时是否出边界/// </summary>public bool MoveStop(int n){bool tem_bool = true;int tem_width = 0;int tem_height = 0;switch (n){case 0://下移{//遍历方块中的各个子方块for (int i = 0; i < Arryfront.Length; i++){tem_width = Arryfront[i].X / 20;//获取方块的横向坐标值tem_height = Arryfront[i].Y / 20;//获取方块的纵向坐标值if (tem_height == conHeight || Place[tem_width, tem_height])//判断是否超出底边界,或是与其他方块重叠tem_bool = false;//超出边界}break;}case 1://左移{for (int i = 0; i < Arryfront.Length; i++){tem_width = Arryfront[i].X / 20;tem_height = Arryfront[i].Y / 20;if (tem_width == -1 || Place[tem_width, tem_height])//判断是否超出左边界,或是与其他方块重叠tem_bool = false;}break;}case 2://右移{for (int i = 0; i < Arryfront.Length; i++){tem_width = Arryfront[i].X / 20;tem_height = Arryfront[i].Y / 20;if (tem_width == conWidth || Place[tem_width, tem_height])//判断是否超出右边界,或是与其他方块重叠tem_bool = false;}break;}}return tem_bool;}}
}

  

主题调用,操作

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace 俄罗斯方块
{public partial class Form1 : Form{public Form1(){InitializeComponent();}Russia MyRussia = new Russia();//实例化Russia类,用于操作游戏Russia TemRussia = new Russia();//实例化Russia类,用于生成下一个方块样式public static int CakeNO = 0;//记录下一个方块样式的标识public static bool become = false;//判断是否生成下一个方块的样式public static bool isbegin = false;//判断当前游戏是否开始public bool ispause = true;//判断是否暂停游戏public Timer timer = new Timer();private void button1_Click(object sender, EventArgs e){MyRussia.ConvertorClear();//清空整个控件MyRussia.firstPoi = new Point(140, 20);//设置方块的起始位置label3.Text = "0";//显示去除的行数label4.Text = "0";//显示分数MyRussia.Label_Linage = label3;//将label3控件加载到Russia类中MyRussia.Label_Fraction = label4;//将label4控件加载到Russia类中timer1.Interval = 500;//下移的速度timer1.Enabled = false;//停止计时timer1.Enabled = true;//开始计时Random rand = new Random();//实例化RandomCakeNO = rand.Next(1, 8);//获取随机数MyRussia.CakeMode(CakeNO);//设置方块的样式MyRussia.Protract(panel1);//绘制组合方块beforehand();//生成下一个方块的样式MyRussia.PlaceInitialization();//初始化Random类中的信息isbegin = true;//判断是否开始ispause = true;MyRussia.timer = timer1;button2.Text = "暂停";ispause = true;textBox1.Focus();//获取焦点}/// <summary>/// 生成下一个方块的样式/// </summary>public void beforehand(){Graphics P3 = panel3.CreateGraphics();P3.FillRectangle(new SolidBrush(Color.Black), 0, 0, panel3.Width, panel3.Height);Random rand = new Random();//实例化RandomCakeNO = rand.Next(1, 8);//获取随机数TemRussia.firstPoi = new Point(50, 30);//设置方块的起始位置TemRussia.CakeMode(CakeNO);//设置方块的样式TemRussia.Protract(panel3);//绘制组合方块}private void Form1_KeyDown(object sender, KeyEventArgs e){if (!isbegin)//如果没有开始游戏return;if (!ispause)//如果游戏暂停return;if (e.KeyCode == Keys.Up)//如果当前按下的是↑键MyRussia.MyConvertorMode();//变换当前方块的样式if (e.KeyCode == Keys.Down)//如果当前按下的是↓键{timer1.Interval = 300;//增加下移的速度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 (become)//如果显示新的方块{beforehand();//生成下一个方块become = false;}textBox1.Focus();//获取焦点}private void Form1_KeyUp(object sender, KeyEventArgs e){if (!isbegin)//如果游戏没有开始return;if (!ispause)//如果暂停游戏return;if (e.KeyCode == Keys.Down)//如果当前松开的是↓键{timer1.Interval = 500;//恢复下移的速度}textBox1.Focus();//获取焦点}private void button2_Click(object sender, EventArgs e){if (timer1.Enabled == true){timer1.Stop();//暂停button2.Text = "继续";ispause = false;textBox1.Focus();//获取焦点}else{timer1.Start();//继续button2.Text = "暂停";ispause = 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.firstPoi = new Point(50, 30);//设置方块的起始位置TemRussia.CakeMode(CakeNO);//设置方块的样式TemRussia.Protract(panel3);//绘制组合方块}}}
}

  

转载于:https://www.cnblogs.com/ROCKyou/p/4958659.html

Winform 俄罗斯方块儿练习相关推荐

  1. 【普通玩家VS高手玩家】一带传奇游戏《俄罗斯方块儿》新作—实现AI自动玩游戏~

    导语 提到<俄罗斯方块>(Tetris),那真是几乎无人不知无人不晓. ​ 其历史之悠久,可玩性之持久,能手轻轻一挥,吊打一大波游戏. 对于绝大多数小友而言,<俄罗斯方块>的规 ...

  2. 【Pygame实战】妈耶~这款经典的《俄罗斯方块儿》竟这么厉害......

    前言 哈喽!小伙伴儿下午好

  3. 教你用C语言编写万年历,程序员超乎你的想象!

    学了C语言的小编闲来无事就想搞点事情做,发现可以用C语言做万年历,计算器,俄罗斯方块儿游戏之类的,就从万年历开始玩耍啦. Step 1. 新建一个程序 制作一个应用当然必不可少的就是新建程序啦,小编这 ...

  4. 实训课俄罗斯方块之二授课计划总体规划

    视频:https://edu.csdn.net/course/detail/27107 授课时间 上午1-2节 上午3-4节 下午5-6节 下午7 -8节 主题思想 第一天 1.玩俄罗斯方块. 2.根 ...

  5. 还是俄罗斯方块之android版

    前面的,口水话 请直接跳过. 虽然现在不比以前了 也没多少人气了,放到首页 都不到几百的点击量.也许博客园整体水平也是在往水的方向发展.不谈那些了,哥也曾经辉煌过 有过一天上千的点击量 ,哥也曾经有过 ...

  6. WinForm 随手记

    从今天开始咱们正式进入WinForm开发模式 首先很官方的介绍下什么是winform:客户端应用程序:C/S 这就是winform 有什么特别特别重要的特点呢:可以操作用户电脑上的文件 举个简单的例子 ...

  7. python winform开发框架_winform引用网络上的图

    Database2Sharp代码生成工具使用心得 Database2Sharp是一款主要用于C#代码以及数据库文档生成的工具,软件支持Oracle.SqlServer.MySql.Access.Sql ...

  8. winform制作音乐播放器

    winform制作音乐播放器 本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windo ...

  9. C#游戏介绍大全,包括不限于(连连看、扫雷、推箱子、贪吃蛇、汉诺塔、消消乐、俄罗斯方块、飞机大战、坦克大战...)

    文章目录 题目 WPF贪吃蛇(彩色版) 飞机大战 象棋 五子棋 1 连连看 2 黑白棋 3 汉诺塔 4 推箱子 5 扫雷 6七巧板 8 人物拼图1 9 人物拼图2 10 停车场游戏 11 坦克大战 1 ...

最新文章

  1. windows下安装和配置Redis
  2. Dcloud课程1 APP的架构有哪些
  3. 关于 ElesticSearch 安装
  4. CPlus的简单线程的制作
  5. Java常见面试题及答案汇总
  6. 练习图200例图纸讲解_【宅家数学课23】经典微课6:苏教版六年级下册比例尺典型例题选讲及练习(含答案)...
  7. Java JDBC DriverManager类
  8. 置入式模型inclusion model和显示具现化
  9. 基于 OpenCV 的图像阴影去除,你会吗?
  10. Youtube Links
  11. java 二级联动实现
  12. 溯源项目(全套源码)
  13. 闫令琪图形学入门笔记(光栅化篇)
  14. 程序员面试的注意事项(一):面试的流程
  15. 电赛专题 |国一作品_线路负载及故障检测装置
  16. Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)
  17. php项目素材,PHP素材资源解析平台源码V8.0(thinkPHP框架内核)
  18. 【hive】beeline常用操作指令
  19. 注册码方式注册多可系统
  20. 拥有资源的多少并不重要,如果不懂得利用,永远是不够的

热门文章

  1. 埃拉托色尼筛选法c语言求最大公约数,用埃拉托色尼筛算法求两个数最大公约数C++的实现...
  2. 罗技 连点 脚本_走心分享!当评测罗技MASTER 3遇上ANYWHERE 3
  3. 跳转到新页面并清除当前页面的history记录
  4. 召回率(Recall)
  5. iOS实现网速实时监测
  6. Ajax与分页的实现
  7. 计算机里FC方式,谁知道头文字D里提到的FD,FR,FC,FF指的是什么驱动方式的车?...
  8. iOS wkWebview调整html文字大小以及文字两端对齐
  9. 移动云瞄准“一流云商”焕新出发
  10. mysql查看数据库状态