源码地址:http://download.csdn.net/detail/dong413876225/4294048

解决方案 »

  1.   

    ,,源码还要人下下来指导你?
    还要1资源分?
    我擦,,你就是要别人下你的资源
    这是别人写的public Game()
            {
               this.Load += new System.EventHandler(Form7_Load);
                InitializeComponent();
            }
            Point[,] ai ={{new Point(150,0),new Point(150,-30),new Point(120,-30),new Point(180,-30)},//T
                          {new Point(150,0),new Point(150,-30),new Point(150,-60),new Point(150,-90)},//长条
                          {new Point(150,0),new Point(150,-30),new Point(150,-60),new Point(120,-60)},//L
                          {new Point(150,0),new Point(180,0),new Point(150,-30),new Point(120,-30)},//Z
                          {new Point(150,0),new Point(180,0),new Point(150,-30),new Point(180,-30)}};//方块
            Label a = new Label();
            Label b = new Label();
            Label c = new Label();
            Label d = new Label();//用户控制的方块
            Random r = new Random();//随机种子
            int bi = 0;//方块的种类
            Timer tm = new Timer();//计时器        private void Form7_Load(object sender, EventArgs e)
            {
                Width = 300;
                Height = 360;
                Location = new Point(500, 150);
                Text = "俄罗斯方块";
                KeyPreview = true;
                KeyPress += new KeyPressEventHandler(press);//布局
                a.Size = b.Size = c.Size = d.Size = new Size(30, 30);
                a.BackColor = b.BackColor = c.BackColor = d.BackColor = Color.Red;
                Controls.Add(a);
                Controls.Add(b);
                Controls.Add(c);
                Controls.Add(d);//画方块    
                xuanze();
                //计时器
                tm.Enabled = true;
                tm.Interval = 700;
                tm.Tick += new EventHandler(jishi);
            }
            void xuanze()//选择种类
            {
                bi = r.Next(0, 5);
                a.Location = ai[bi, 0];
                b.Location = ai[bi, 1];
                c.Location = ai[bi, 2];
                d.Location = ai[bi, 3];
                jieshu();
            }
            void press(object sender, KeyPressEventArgs e)
            {
                int i = 0;
                string key = e.KeyChar.ToString();
                if (key == "a") i = xialuo(-30, 0);
                if (key == "d") i = xialuo(30, 0);
                if (key == "s") i = xialuo(0, 30);//移动碰撞判断
                if (key == "s" && (a.Top == 300 || b.Top == 300 || c.Top == 300 || d.Top == 300)) i = 1;//移动出界判断
                if (key == "a" && (a.Left == 0 || b.Left == 0 || c.Left == 0 || d.Left == 0)) i = 1;
                if (key == "d" && (a.Left == 270 || b.Left == 270 || c.Left == 270 || d.Left == 270)) i = 1;
                if (key == "w") i = xuanzhuan();//旋转碰撞判断
                if (i == 0)
                    switch (key)
                    {
                        case "a": a.Left -= 30; b.Left -= 30; c.Left -= 30; d.Left -= 30; break;
                        case "d": a.Left += 30; b.Left += 30; c.Left += 30; d.Left += 30; break;
                        case "s": a.Top += 30; b.Top += 30; c.Top += 30; d.Top += 30; break;
                        case "w":
                            if (bi < 4)//if里面是旋转的算法 
                            {
                                int m = b.Top - 30, n = b.Left - 30;
                                c.Location = new Point(c.Top - m + n, 60 - (c.Left - n) + m);
                                a.Location = new Point(a.Top - m + n, 60 - (a.Left - n) + m);
                                d.Location = new Point(d.Top - m + n, 60 - (d.Left - n) + m);
                            }
                            break;
                    }
            }
            void jishi(object sender, EventArgs e)
            {
                if (xialuo(0, 30) == 1) huahua();
                panduan();
                a.Top += 30; b.Top += 30; c.Top += 30; d.Top += 30;        }
            void panduan()////最下碰撞判断
            {
                if (a.Top == 300 || b.Top == 300 || c.Top == 300 || d.Top == 300)
                    huahua();
            }
            void huahua()//画画- -!
            {
                Point[] pp = { a.Location, b.Location, c.Location, d.Location };
                for (int i = 0; i < 4; i++)
                {
                    Label s = new Label();
                    s.BackColor = Color.Blue;
                    s.Size = new Size(30, 30);
                    s.Location = pp[i];
                    Controls.Add(s);
                }
                xiaotu();
                xuanze();
            }
            int xialuo(int x, int y)//移动碰撞判断
            {
                foreach (Control i in Controls)
                    if (i.BackColor == Color.Blue)
                        if (i.Location == new Point(a.Left + x, a.Top + y) || i.Location == new Point(b.Left + x, b.Top + y) || i.Location == new Point(c.Left + x, c.Top + y) || i.Location == new Point(d.Left + x, d.Top + y))
                            return 1;
                return 0;
            }
            int xuanzhuan()//旋转碰撞判断
            {
                Point[] pp = { a.Location, b.Location, c.Location, d.Location };
                int m = pp[1].Y - 30, n = pp[1].X - 30;
                pp[2] = new Point(pp[2].Y - m + n, 60 - (pp[2].X - n) + m);
                pp[0] = new Point(pp[0].Y - m + n, 60 - (pp[0].X - n) + m);
                pp[3] = new Point(pp[3].Y - m + n, 60 - (pp[3].X - n) + m);
                foreach (Control i in Controls)
                    if (i.BackColor == Color.Blue)
                        if (i.Location == pp[1] || i.Location == pp[0] || i.Location == pp[2] || i.Location == pp[3])
                            return 1;
                return 0;
            }
            void xiaotu()//消图
            {
                int k = 0;
                for (int m = 0; m < 4; m++)
                    for (int i = 0; i <= 300; i += 30)
                    {
                        k = 0;
                        foreach (Control l in Controls)
                            if (l.BackColor == Color.Blue && l.Top == i)
                                k++;
                        if (k > 9)
                            foreach (Control l in Controls)
                            {
                                if (l.Top == i)
                                    l.Location = new Point(-100, -100);
                                if (l.Top < i)
                                    l.Top += 30;
                            }
                    }
                foreach (Control l in Controls)
                    if (l.Location == new Point(-100, -100))
                        Controls.Remove(l);
            }
            void jieshu()//游戏结束判断
            {
                foreach (Control i in Controls)
                    if (i.BackColor == Color.Blue)
                        if (i.Location == a.Location || i.Location == b.Location || i.Location == c.Location || i.Location == d.Location)
                        {
                            tm.Stop();
                            MessageBox.Show("游戏结束");
                            Close();
                        }
            }    }
    }