基本信息
源码名称:俄罗斯方块C#源码
源码大小:4.62M
文件格式:.rar
开发语言:C#
更新时间:2014-05-09
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
一个不错的C#源码,有需要的朋友可以去下载看看

public FrmConfig()
        {
            InitializeComponent();
        }

        private bool[,] struArr = new bool[5, 5];//声明一个bool类型的二维数组存放每个方块的信息
        //如果为0,表示这个矩形的颜色没有改变,如果为1,表示颜色改变
        private Color blockColor = Color.Red;//声明一个颜色类型的变量,设为红色,当bool值为1的时候显示红色
        private Config config = new Config();

        private void lblMode_Paint(object sender, PaintEventArgs e)//砖块上色去色,窗口变化事件
        {
            Graphics gp = e.Graphics;//创建一个本身的画板,e表示该事件本身所带的参数
            gp.Clear(Color.Black);//把画板上所有画清除后的底色是黑色
            Pen p = new Pen(Color.White);//定义一支笔,定义它的颜色是白色
            for (int i = 31; i < 156; i = 31)//画横白线 4条
                gp.DrawLine(p, 1, i, 155, i);//(pen,x1,y1,x2,y2)p是画笔类,x1,y1是起点像素坐标,x2,y2终点像素坐标
            for (int i = 31; i < 156; i = 31)//画竖白线 4条
                gp.DrawLine(p,i,1,i,155);
            //这样就把图形分割成一个5行5列的矩阵

            //填充矩阵中的方块
            SolidBrush s = new SolidBrush( blockColor );//创建红色刷子
            for (int x = 0; x < 5; x )
                for (int y = 0; y < 5; y )
                    if (struArr[x, y])//当数组为真就刷成红色
                        gp.FillRectangle(s,31*x 1,31*y 1,30,30);//把下标值转换成屏幕坐标值
        }

        private void lblMode_MouseClick(object sender, MouseEventArgs e)//砖块单击事件
        {
            if (e.Button != MouseButtons.Left)//判断是否点击了鼠标左键
                return;
            int xpos, ypos;//xpos表示数组第一个下标,ypos表示数组第二个下标,这是自定义坐标:每个方块的坐标值
            xpos = e.X / 31;//e.X表示当前鼠标点击的横坐标位置,把屏幕像素转换为数组下标值
            ypos = e.Y / 31;//同上e.X,e.Y是整形
            struArr[xpos, ypos] = !struArr[xpos, ypos];//点击一个方块,如果点击前为真则点击后为假
            bool b = struArr[xpos, ypos];//如果鼠标点击在矩形范围内则为真[0,0]-[4,4]
            Graphics gp = lblMode.CreateGraphics();//新建一个lblMode的画板
            SolidBrush s = new SolidBrush(b ? blockColor : Color.Black);//创建一个刷子,确定它的颜色,当b为真时使用红色刷子,假时使用黑色刷子
            gp.FillRectangle(s, 31 * xpos 1, 31 * ypos 1, 30, 30);//矩形刷颜色,(Brush,x,y,width,height)s表示刷子,x,y表示像素坐标值,width,height表示图形的宽度和高度
            //
            gp.Dispose();//释放画板
        }

        private void lblColor_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();//打开颜色对话框
            blockColor = colorDialog1.Color;//把选择的颜色赋给变量
            lblColor.BackColor = colorDialog1.Color;//把选择的颜色赋给标签的背景颜色
            lblMode.Invalidate();//使lblMode重画,即执行它的Paint事件
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            bool isEmpty = false;//首先查找图案是否为空
            foreach (bool i in struArr)
            {
                if (i)
                {
                    isEmpty = true;
                    break;
                }
            }
            if (!isEmpty)
            {
                MessageBox.Show("图案为空,请先用鼠标点击左边窗口绘制图案!", "提示窗口",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            StringBuilder sb = new StringBuilder(25);
            foreach (bool i in struArr)
            {
                sb.Append(i ? "1" : "0");
            }
            String blockString = sb.ToString();
            //再检查是否有重复图案
            foreach(ListViewItem item in lsvBlockSet.Items)
            {
                if (item.SubItems[0].Text == blockString)
                {
                    MessageBox.Show("该图案已经存在!", "提示窗口",
                        MessageBoxButtons.OK,MessageBoxIcon.Information);
                    return;
                }   
            }
            //把新砖块图案信息添加到ListView
            ListViewItem myItem = new ListViewItem();
            myItem = lsvBlockSet.Items.Add(blockString);
            myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb()));

            MessageBox.Show("添加成功", "提示信息", MessageBoxButtons.OK);
        }

        private void lsvBlockSet_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (e.IsSelected)//避免重复执行事件
            {
                blockColor = Color.FromArgb(int.Parse(e.Item.SubItems[1].Text));//把字符串信息转换为颜色类
                lblColor.BackColor = blockColor;
                string s = e.Item.SubItems[0].Text;//取砖块的样式信息
                for (int i = 0; i < s.Length; i )//把砖块样式从字符串转换成二维数组
                {
                    struArr[i/5,i%5]=(s[i]=='1')?true:false;
                }
                lblMode.Invalidate();
            }
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            if (lsvBlockSet.SelectedItems.Count == 0)//没有项目被选中
            {
                MessageBox.Show("请在右边窗口选择一个条目进行删除!", "提示窗口",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                return;
            }
            lsvBlockSet.Items.Remove(lsvBlockSet.SelectedItems[0]);//删除被选中的项目
            btnClear.PerformClick();
            MessageBox.Show("删除成功", "提示信息", MessageBoxButtons.OK);
        }

        private void btnClear_Click(object sender, EventArgs e)//清空
        {
            for (int x = 0; x < 5; x )
                for (int y = 0; y < 5; y )
                    struArr[x, y] = false;
            lblMode.Invalidate();
        }

        private void btnUpdate_Click(object sender, EventArgs e)//修改
        {
            if (lsvBlockSet.SelectedItems.Count == 0)//没有项目被选中
            {
                MessageBox.Show("请在右边窗口选择一个条目进行修改!", "提示窗口",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                return;
            }
            bool isEmpty = false;//判断图案是否为空
            foreach (bool i in struArr)
            {
                if (i)
                {
                    isEmpty = true;
                    break;
                }
            }
            if (!isEmpty)
            {
                MessageBox.Show("图案为空,请先用鼠标点击左边窗口绘制图案再进行修改!", "提示窗口",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            StringBuilder sb = new StringBuilder(25);
            foreach (bool i in struArr)
            {
                sb.Append(i ? "1" : "0");
            }
            lsvBlockSet.SelectedItems[0].SubItems[0].Text = sb.ToString();//改变图案信息
            lsvBlockSet.SelectedItems[0].SubItems[1].Text = Convert.ToString(blockColor.ToArgb());//改变颜色信息
            MessageBox.Show("修改成功", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void txtContra_KeyDown(object sender, KeyEventArgs e)
        {
            //首先排除一些不适合的键值
            if ((e.KeyValue >= 33 && e.KeyValue <= 36) || (e.KeyValue >= 45 && e.KeyValue <= 46) ||
               (e.KeyValue >= 48 && e.KeyValue <= 57) || (e.KeyValue >= 65 && e.KeyValue <= 90) ||
               (e.KeyValue >= 96 && e.KeyValue <= 107) || (e.KeyValue >= 109 && e.KeyValue <= 111) ||
               (e.KeyValue >= 186 && e.KeyValue <= 192) ||
               (e.KeyValue >= 219 && e.KeyValue <= 212))
            {   
                //检查是否存在冲突的快捷键
                foreach (Control c in gbKeySet.Controls)
                {
                    Control TempC = c as TextBox;
                    if (TempC != null)
                    {
                        if(((int)((TextBox)TempC).Tag)==e.KeyValue)
                        {
                            ((TextBox)TempC).Text = "";
                            ((TextBox)TempC).Tag = Keys.None;
                        }
                    }
                }
                ((TextBox)sender).Text = e.KeyCode.ToString();
                ((TextBox)sender).Tag = (Keys)e.KeyValue;
            }
        }

        private void lblBackColor_Click(object sender, EventArgs e)
        {
            colorDialog1.ShowDialog();
            lblBackColor.BackColor = colorDialog1.Color;
        }

        private void FrmConfig_Load(object sender, EventArgs e)//读取保存在xml文件中的默认的信息
        {
            config.LoadFromXmlFile();//读取xml文件
            InfoArr info = config.Info;

            //读取块样式,并存储到listview
            ListViewItem myItem = new ListViewItem();
            for (int i = 0; i < info.Length; i )
            {
                myItem = lsvBlockSet.Items.Add(info[i].GetIdStr());
                myItem.SubItems.Add(info[i].GetColorStr());
            }

            //读取快捷键
            txtDown.Text = ((Keys)config.DownKey).ToString();
            txtDown.Tag = config.DownKey;
            txtDrop.Text = ((Keys)config.DropKey).ToString();
            txtDrop.Tag = config.DropKey;
            txtLeft.Text = ((Keys)config.MoveLeftKey).ToString();
            txtLeft.Tag = config.MoveLeftKey;
            txtRight.Text = ((Keys)config.MoveRightKey).ToString();
            txtRight.Tag = config.MoveRightKey;
            txtDeasil.Text = ((Keys)config.DeasilRotateKey).ToString();
            txtDeasil.Tag = config.DeasilRotateKey;
            txtContra.Text = ((Keys)config.ContraRotateKey).ToString();
            txtContra.Tag = config.ContraRotateKey;

            //读环境设置参数
            txtCoorWidth.Text = config.CoorWidth.ToString();
            txtCoorHeight.Text = config.CoorHeight.ToString();
            txtRectPix.Text = config.RectPix.ToString();
            lblBackColor.BackColor = config.BackColor;

        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            InfoArr info = new InfoArr();//实例化一个infoArr类
            foreach (ListViewItem item in lsvBlockSet.Items)//从lsvBlockSet中读取砖块信息并存入info内
            {
                info.Add(item.SubItems[0].Text, item.SubItems[1].Text);
            }
            config.Info = info;//把info赋给config对象的Info属性
            config.DownKey = (Keys)txtDown.Tag;
            config.DropKey = (Keys)txtDrop.Tag;
            config.MoveLeftKey = (Keys)txtLeft.Tag;
            config.MoveRightKey = (Keys)txtRight.Tag;
            config.DeasilRotateKey = (Keys)txtDeasil.Tag;
            config.ContraRotateKey = (Keys)txtContra.Tag;
            config.CoorWidth = int.Parse(txtCoorWidth.Text);
            config.CoorHeight = int.Parse(txtCoorHeight.Text);
            config.RectPix = int.Parse(txtRectPix.Text);
            config.BackColor = lblBackColor.BackColor;

            config.SaveToXmlFile();//保存成xml文件
            MessageBox.Show("保存成功", "提示窗口", MessageBoxButtons.OK);
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void lsvBlockSet_SelectedIndexChanged(object sender, EventArgs e)
        {

        }