连连看主程序

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 图像的总数
        /// </summary>
        private int PicCount;
        /// <summary>
        /// 方格的边长
        /// </summary>
        private int BoxWidth;
        /// <summary>
        /// 容器一行中方格的个数
        /// </summary>
        private int RowCount;
        /// <summary>
        /// 容器一列中方格的个数
        /// </summary>
        private int ColumnCount;
        /// <summary>
        /// 容器中第一个方格的X坐标
        /// </summary>
        private int BoxStarX;
        /// <summary>
        /// 容器中第一个方格的Y坐标
        /// </summary>
        private int BoxStarY;
        /// <summary>
        /// 主数组
        /// </summary>
        private int[,] ArrayPanel;
        /// <summary>
        /// 削除方格的类型
        /// </summary>
        private RemoveType RType;
        /// <summary>
        /// Coord队列 没有找到Count=0,找到为经历的关键 Coord队列
        /// </summary>
        Queue<Coord> qu = new Queue<Coord>();
        private void Form1_Load(object sender, EventArgs e)
        {
            PicCount=15;
            RowCount = 14;
            BoxWidth = 50;
            ColumnCount = 10;
            ArrayPanel = new int[RowCount + 2, ColumnCount + 2];
            BoxStarX = (panel1.Width - RowCount * BoxWidth) / 2;
            BoxStarY = (panel1.Height - ColumnCount * BoxWidth) / 2;
            DrowBox();
            Rand();
            FillArray();

            comboBox1.SelectedIndex = 0;
        }

        //提示
        private void button1_Click(object sender, EventArgs e)
        {
            Coord crd;
            foreach (llkBox llkbox in panel1.Controls)
            {
                crd = new Coord(llkbox.Name);
                AutoFind(crd, llkbox.Text);
                if (qu.Count != 0)
                {
                    break;
                }
            }
            while (qu.Count != 0)
            {
                crd = qu.Dequeue();
                if (panel1.Controls[crd.ToString()] != null)
                {
                    llkBox lk = (llkBox)panel1.Controls[crd.ToString()];
                    lk.IsClickTemp = true;
                }
                //crd = qu.Dequeue();
                //if (panel1.Controls[crd.ToString()] 
            }
        }
        //重新排列
        private void button2_Click(object sender, EventArgs e)
        {
            Rand();
            FillArray();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            panel1.Controls.Clear();
            DrowBox();
            Rand();
            FillArray();

            comboBox1.SelectedIndex = 0;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (comboBox1.Text)
            { 
                case "None":
                    RType = RemoveType.None;
                    break;
                case "X":
                    RType = RemoveType.X;
                    break;
                case "Y":
                    RType = RemoveType.Y;
                    break;
                case "XY":
                    RType = RemoveType.XY;
                    break;
                case "YX":
                    RType = RemoveType.YX;
                    break;
                //case "Diffuse":
                //    RType = RemoveType.YX;
                //    break;
                //case "Shrink":
                //    RType = RemoveType.YX;
                //    break;
            }
        }
        /// <summary>
        /// 左·右方格所对应的Coord
        /// </summary>
        Coord lcrd, rcrd;
        int count = 0;
        private void bt_Click(object sender, EventArgs e)
        {
            llkBox bt = (llkBox)sender;
            switch (count)
            {
                case 0:
                    bt.IsClick = true;
                    lcrd = new Coord(bt.Name);
//textBox1.Text = bt.Text + "--" + bt.Name + "---" + ArrayPanel[lcrd.Xcrd, lcrd.Ycrd].ToString();
                    count++;
                    break;
                case 1:
                    if (!bt.IsClick)
                    {
                        bt.IsClick = false;
                        count = 0;
                        lcrd = null;
                    }
                    else
                    {
                        count = 0;
                        bt.IsClick = true;
                        rcrd = new Coord(bt.Name);
                        //textBox1.Text = lcrd.ToString() + "---" + rcrd.ToString();
                        llkBox llkbox = (llkBox)panel1.Controls[lcrd.ToString()];

//textBox2.Text = llkbox.Text + "--" + llkbox.Name;
                        if (bt.Text == llkbox.Text)
                        {
                            //找到
                            AutoFind(lcrd, bt.Text, rcrd);
                            //找到移除
                            
                            if (qu.Count != 0)
                            {
                                //画路径//textBox3.Text += "--" + qu.Dequeue().ToString();//qu.Dequeue();
                                Coord crd;
                                int x, y;
                                Point[] points1 = new Point[qu.Count];
                                int i = 0;
                                while (qu.Count != 0)
                                {
                                    crd = qu.Dequeue();
                                    x = BoxStarX + crd.Xcrd * BoxWidth - BoxWidth / 2;
                                    y = BoxStarY + crd.Ycrd * BoxWidth - BoxWidth / 2;
                                    points1[i].X = x; points1[i].Y = y;
                                    i++;
                                }
                                using (Graphics g = this.panel1.CreateGraphics())
                                {
                                    g.DrawLines(new Pen(Color.Blue, 2), points1);
                                    System.Threading.Thread.Sleep(100); ;//程序暂停0.1秒
                                    g.Clear(this.panel1.BackColor);
                                }
                                //移除控件
                                RemoveBox(lcrd, rcrd, RType);


                                if (panel1.Controls.Count == 0)
                                {
                                    MessageBox.Show("游戏结束!");
                                    return;
                                }
                                //查看有没有可以消除的方格,如果没有刷新
                                while (!isrefresh()) ;
                            }
                        }
                        llkbox.IsClick = false;
                        lcrd = null;
                        bt.IsClick = false;
                        rcrd = null;
                    }
                    break;
            }
        }


        private void UnderMoveBox(Coord lcrd, Coord rcrd, int endmuber)
        {
            Coord crd;
            llkBox box;
            llkBox lbox = (llkBox)panel1.Controls[lcrd.ToString()];
            int x = lcrd.Xcrd;
            int y = lcrd.Ycrd;
            for (int l = y - 1; l > endmuber; l--)
            {
                crd = new Coord(x, l);
                if (crd == rcrd) continue;
                if (panel1.Controls[crd.ToString()] != null)
                {
                    box = (llkBox)panel1.Controls[crd.ToString()];
                    SwapBox(box, lbox);
                    lbox = (llkBox)panel1.Controls[crd.ToString()];
                }
                else
                    break;
            }
            crd = new Coord(lbox.Name);
            ArrayPanel[crd.Xcrd, crd.Ycrd] = 0;
            panel1.Controls.Remove(lbox);
        }

        private void UpMoveBox(Coord lcrd, Coord rcrd, int endmuber)
        {
            Coord crd;
            llkBox box;
            llkBox lbox = (llkBox)panel1.Controls[lcrd.ToString()];
            int x = lcrd.Xcrd;
            int y = lcrd.Ycrd;
            for (int l = y + 1; l <= endmuber; l++)
            {
                crd = new Coord(x, l);
                if (crd == rcrd) continue;
                if (panel1.Controls[crd.ToString()] != null)
                {
                    box = (llkBox)panel1.Controls[crd.ToString()];
                    SwapBox(box, lbox);
                    lbox = (llkBox)panel1.Controls[crd.ToString()];
                }
                else
                    break;
            }
            crd = new Coord(lbox.Name);
            ArrayPanel[crd.Xcrd, crd.Ycrd] = 0;
            panel1.Controls.Remove(lbox);
        }

        private void RightMoveBox(Coord lcrd, Coord rcrd, int endmuber)
        {
            Coord crd;
            llkBox box;
            llkBox lbox = (llkBox)panel1.Controls[lcrd.ToString()];
            int x = lcrd.Xcrd;
            int y = lcrd.Ycrd;
            for (int l = x - 1; l > endmuber; l--)
            {
                crd = new Coord(l, y);
                if (crd == rcrd) continue;
                if (panel1.Controls[crd.ToString()] != null)
                {
                    box = (llkBox)panel1.Controls[crd.ToString()];
                    SwapBox(box, lbox);
                    lbox = (llkBox)panel1.Controls[crd.ToString()];
                }
                else
                    break;
            }
            crd = new Coord(lbox.Name);
            ArrayPanel[crd.Xcrd, crd.Ycrd] = 0;
            panel1.Controls.Remove(lbox);
        }

        private void LeftMoveBox(Coord lcrd, Coord rcrd, int endmuber)
        {
            Coord crd;
            llkBox box;
            llkBox lbox = (llkBox)panel1.Controls[lcrd.ToString()];
            int x = lcrd.Xcrd;
            int y = lcrd.Ycrd;
            for (int l = x + 1; l <= endmuber; l++)
            {
                crd = new Coord(l, y);
                if (crd == rcrd) continue;
                if (panel1.Controls[crd.ToString()] != null)
                {
                    box = (llkBox)panel1.Controls[crd.ToString()];
                    SwapBox(box, lbox);
                    lbox = (llkBox)panel1.Controls[crd.ToString()];
                }
                else
                    break;
            }
            crd = new Coord(lbox.Name);
            ArrayPanel[crd.Xcrd, crd.Ycrd] = 0;
            panel1.Controls.Remove(lbox);
        }

        enum RemoveType { None, Y, X, XY, YX, Diffuse, Shrink };
        private void RemoveBox(Coord lcrd, Coord rcrd,RemoveType type)
        {
            Coord crd;
            llkBox box;
            int x, y;
            llkBox lbox = (llkBox)panel1.Controls[lcrd.ToString()];
            llkBox rbox = (llkBox)panel1.Controls[rcrd.ToString()];
            switch (type)
            {
                #region RemoveType.None
                case RemoveType.None:
                    panel1.Controls.Remove(panel1.Controls[lcrd.ToString()]);
                    ArrayPanel[lcrd.Xcrd, lcrd.Ycrd] = 0;
                    panel1.Controls.Remove(panel1.Controls[rcrd.ToString()]);
                    ArrayPanel[rcrd.Xcrd, rcrd.Ycrd] = 0;
                    break;
                #endregion
                #region RemoveType.Y
                case RemoveType.Y:
                    UnderMoveBox(lcrd, rcrd, 0);
                    UnderMoveBox(rcrd, lcrd, 0);
                    break;
                #endregion
                #region RemoveType.X
                case RemoveType.X:
                    LeftMoveBox(lcrd, rcrd, RowCount);
                    LeftMoveBox(rcrd, lcrd, RowCount);
                    break;
                #endregion
                #region RemoveType.XY
                case RemoveType.XY:
                    if (lcrd.Xcrd > RowCount / 2)
                        RightMoveBox(lcrd, rcrd, RowCount / 2);
                    else
                        LeftMoveBox(lcrd, rcrd, RowCount / 2);
                    if (rcrd.Xcrd > RowCount / 2)
                        RightMoveBox(rcrd, lcrd, RowCount / 2);
                    else
                        LeftMoveBox(rcrd, lcrd, RowCount / 2);
                    break;
                #endregion
                #region RemoveType.YX
                case RemoveType.YX:
                    if (lcrd.Ycrd > ColumnCount / 2)
                        UnderMoveBox(lcrd, rcrd, ColumnCount / 2);
                    else
                        UpMoveBox(lcrd, rcrd, ColumnCount / 2);
                    if (rcrd.Ycrd > ColumnCount / 2)
                        UnderMoveBox(rcrd, lcrd, ColumnCount / 2);
                    else
                        UpMoveBox(rcrd, lcrd, ColumnCount / 2);
                    break;
                #endregion
                //case RemoveType.Diffuse:
                //    LeftUpMoveBox(lcrd, rcrd);
                //    LeftUpMoveBox(rcrd, lcrd);
                //    break;
                //case RemoveType.Shrink:

                //    break;
                default :
                    break;
            }
        }

        //交换两个Box
        private void SwapBox(llkBox lbox,llkBox rbox)
        {
            llkBox boxtemp = new llkBox();
            Coord lcrd = new Coord(lbox.Name);
            Coord rcrd = new Coord(rbox.Name);

            
            boxtemp = lbox;

            int arr = ArrayPanel[lcrd.Xcrd, lcrd.Ycrd];
            ArrayPanel[lcrd.Xcrd, lcrd.Ycrd] = ArrayPanel[rcrd.Xcrd, rcrd.Ycrd];
            ArrayPanel[rcrd.Xcrd, rcrd.Ycrd] = arr;

            string text = lbox.Text;
            lbox.Text = rbox.Text;
            rbox.Text = text;

            bool isclick = lbox.IsClick;
            lbox.IsClick = rbox.IsClick;
            rbox.IsClick = isclick;

            bool isclicktemp = lbox.IsClickTemp;
            lbox.IsClickTemp = rbox.IsClickTemp;
            rbox.IsClickTemp = isclicktemp;
        }

        //是否需要刷新
        private bool isrefresh()
        {
            bool refresh = false;
            Coord crd;
            foreach (llkBox lbox in panel1.Controls)
            {
                crd = new Coord(lbox.Name);
                AutoFind(crd, lbox.Text);
                if (qu.Count != 0)
                {
                    refresh = true;
                    break;
                }
            }
            if (qu.Count != 0) qu.Clear();
            else
            {
                Rand();
                FillArray();
            }
            return refresh;
        }


        private void AutoFind(Coord crd, string name, Coord Aimcrd)
        {
            if (qu.Count != 0) qu.Clear();
            //1

            Coord crdqu;
            Queue<Coord> Xqu = new Queue<Coord>();
            Queue<Coord> Yqu = new Queue<Coord>();
            qu = FindCoord(crd, name, Xqu, Yqu, Aimcrd, Find.XY);
            if (qu.Count != 0)
                return;

            //2
            Queue<Coord> Xququ = new Queue<Coord>();
            Queue<Coord> Yququ = new Queue<Coord>();
            while (Xqu.Count != 0)
            {
                crdqu = Xqu.Dequeue();
                qu = FindCoord(crdqu, name, Xququ, Yququ, Aimcrd, Find.Y);
                if (qu.Count != 0)
                {
                    qu.Enqueue(crd);
                    return;
                }
            }
            while (Yqu.Count != 0)
            {
                crdqu = Yqu.Dequeue();
                qu = FindCoord(crdqu, name, Xququ, Yququ, Aimcrd, Find.X);
                if (qu.Count != 0)
                {
                    qu.Enqueue(crd);
                    return;
                }
            }

            //3
            Queue<Coord> Xquququ = new Queue<Coord>();
            Queue<Coord> Yquququ = new Queue<Coord>();
            while (Xququ.Count != 0)
            {
                crdqu = Xququ.Dequeue();
                qu = FindCoord(crdqu, name, Xquququ, Yquququ, Aimcrd, Find.Y);
                if (qu.Count != 0)
                {
                    Coord cd = new Coord(crd.Xcrd, crdqu.Ycrd);
                    qu.Enqueue(cd);
                    qu.Enqueue(crd);
                    return;
                }
            }
            while (Yququ.Count != 0)
            {
                crdqu = Yququ.Dequeue();
                qu = FindCoord(crdqu, name, Xquququ, Yquququ, Aimcrd, Find.X);
                if (qu.Count != 0)
                {
                    Coord cd = new Coord(crdqu.Xcrd, crd.Ycrd);
                    qu.Enqueue(cd);
                    qu.Enqueue(crd);
                    return;
                }
            }
        }

        private void AutoFind(Coord crd, string name)
        {
            if (qu.Count != 0) qu.Clear();
            //1

            Coord crdqu;
            Queue<Coord> Xqu = new Queue<Coord>();
            Queue<Coord> Yqu = new Queue<Coord>();
            qu = FindCoord(crd, name, Xqu, Yqu, Find.XY);
            if (qu.Count != 0)
                return;

            //2
            Queue<Coord> Xququ = new Queue<Coord>();
            Queue<Coord> Yququ = new Queue<Coord>();
            while (Xqu.Count != 0)
            {
                crdqu = Xqu.Dequeue();
                qu = FindCoord(crdqu, name, Xququ, Yququ, Find.Y);
                if (qu.Count != 0)
                {
                    qu.Enqueue(crd);
                    return;
                }
            }
            while (Yqu.Count != 0)
            {
                crdqu = Yqu.Dequeue();
                qu = FindCoord(crdqu, name, Xququ, Yququ, Find.X);
                if (qu.Count != 0)
                {
                    qu.Enqueue(crd);
                    return;
                }
            }

            //3
            Queue<Coord> Xquququ = new Queue<Coord>();
            Queue<Coord> Yquququ = new Queue<Coord>();
            while (Xququ.Count != 0)
            {
                crdqu = Xququ.Dequeue();
                qu = FindCoord(crdqu, name, Xquququ, Yquququ, Find.Y);
                if (qu.Count != 0)
                {
                    Coord cd = new Coord(crd.Xcrd, crdqu.Ycrd);
                    qu.Enqueue(cd);
                    qu.Enqueue(crd);
                    return;
                }
            }
            while (Yququ.Count != 0)
            {
                crdqu = Yququ.Dequeue();
                qu = FindCoord(crdqu, name, Xquququ, Yquququ, Find.X);
                if (qu.Count != 0)
                {
                    Coord cd = new Coord(crdqu.Xcrd, crd.Ycrd);
                    qu.Enqueue(cd);
                    qu.Enqueue(crd);
                    return;
                }
            }
        }


        enum Find { X, Y, XY };
        private Queue<Coord> FindCoord(Coord crd, string name, Queue<Coord> Xqu, Queue<Coord> Yqu, Coord Aimcrd, Find find)
        {
            if (find == Find.X || find == Find.XY)
            {
                if (LeftFindBox(crd, name, Xqu, Aimcrd))
                {
                    return Xqu;
                }
                if (RightFindBox(crd, name, Xqu, Aimcrd))
                {
                    return Xqu;
                }
            }
            if (find == Find.Y || find == Find.XY)
            {
                if (UpFindBox(crd, name, Yqu, Aimcrd))
                {
                    return Yqu;
                }
                if (UnderFindBox(crd, name, Yqu, Aimcrd))
                {
                    return Yqu;
                }
            }
            return new Queue<Coord>();
        }

        private Queue<Coord> FindCoord(Coord crd, string name, Queue<Coord> Xqu, Queue<Coord> Yqu, Find find)
        {
            if (find == Find.X || find == Find.XY)
            {
                if (LeftFindBox(crd, name, Xqu,null))
                {
                    return Xqu;
                }
                if (RightFindBox(crd, name, Xqu,null))
                {
                    return Xqu;
                }
            }
            if (find == Find.Y || find == Find.XY)
            {
                if (UpFindBox(crd, name, Yqu,null))
                {
                    return Yqu;
                }
                if (UnderFindBox(crd, name, Yqu,null))
                {
                    return Yqu;
                }
            }
            return new Queue<Coord>();
        }
        //向左搜索
        private bool LeftFindBox(Coord crd, string name, Queue<Coord> qu, Coord Aimcrd)
        {
            bool aimcrd;
            for (int i = crd.Xcrd - 1; i >= 0; i--)
            {
                Coord crdqu = new Coord(i, crd.Ycrd);

                if (object.Equals(Aimcrd,null))
                    aimcrd = (ArrayPanel[i, crd.Ycrd].ToString() == name);
                else
                    aimcrd = (ArrayPanel[i, crd.Ycrd].ToString() == name && crdqu == Aimcrd);

                if (aimcrd)
                {
                    qu.Clear();
                    qu.Enqueue(crdqu);
                    qu.Enqueue(crd);
                    return true;
                }
                else if (ArrayPanel[i, crd.Ycrd] != 0)
                {
                    return false;
                }
                else
                {
                    qu.Enqueue(crdqu);
                }
            }
            return false;
        }
        //向右搜索
        private bool RightFindBox(Coord crd, string name, Queue<Coord> qu, Coord Aimcrd)
        {
            bool aimcrd;
            for (int i = crd.Xcrd + 1; i < RowCount + 2; i++)
            {
                Coord crdqu = new Coord(i, crd.Ycrd);
                if (object.Equals(Aimcrd, null))
                    aimcrd = (ArrayPanel[i, crd.Ycrd].ToString() == name);
                else
                    aimcrd = (ArrayPanel[i, crd.Ycrd].ToString() == name && crdqu == Aimcrd);

                if (aimcrd)
                {
                    qu.Clear();
                    qu.Enqueue(crdqu);
                    qu.Enqueue(crd);
                    return true;
                }
                else if (ArrayPanel[i, crd.Ycrd] != 0)
                {
                    return false;
                }
                else
                {
                    qu.Enqueue(crdqu);
                }
            }
            return false;
        }
        //向上搜索
        private bool UpFindBox(Coord crd, string name, Queue<Coord> qu, Coord Aimcrd)
        {
            bool aimcrd;
            for (int i = crd.Ycrd - 1; i >= 0; i--)
            {
                Coord crdqu = new Coord(crd.Xcrd, i);
                if (object.Equals(Aimcrd, null))
                    aimcrd = (ArrayPanel[crd.Xcrd, i].ToString() == name);
                else
                    aimcrd = (ArrayPanel[crd.Xcrd, i].ToString() == name && crdqu == Aimcrd);

                if (aimcrd)
                {
                    qu.Clear();
                    qu.Enqueue(crdqu);
                    qu.Enqueue(crd);
                    return true;
                }
                else if (ArrayPanel[crd.Xcrd, i] != 0)
                {
                    return false;
                }
                else
                {
                    qu.Enqueue(crdqu);
                }
            }
            return false;
        }
        //向下搜索
        private bool UnderFindBox(Coord crd, string name, Queue<Coord> qu, Coord Aimcrd)
        {
            bool aimcrd;
            for (int i = crd.Ycrd + 1; i < ColumnCount + 2; i++)
            {
                Coord crdqu = new Coord(crd.Xcrd, i);
                if (object.Equals(Aimcrd, null))
                    aimcrd = (ArrayPanel[crd.Xcrd, i].ToString() == name);
                else
                    aimcrd = (ArrayPanel[crd.Xcrd, i].ToString() == name && crdqu == Aimcrd);

                if (aimcrd)
                {
                    qu.Clear();
                    qu.Enqueue(crdqu);
                    qu.Enqueue(crd);
                    return true;
                }
                else if (ArrayPanel[crd.Xcrd, i] != 0)
                {
                    return false;
                }
                else
                {
                    qu.Enqueue(crdqu);
                }
            }
            return false;
        }

        //画图,随即得到成对的方格
        private void DrowBox()
        {
            llkBox bt;
            Random rdom=new Random();
            string Boxstr;
            for (int i = 1; i < ColumnCount+1; i++)
            {
                for (int j = 1; j < RowCount+1; j++)
                {
                    Boxstr = rdom.Next(1, PicCount + 1).ToString();
                    bt = new llkBox();
                    bt.Name = "X" + (j).ToString() + "|Y" + (i).ToString();
                    bt.Location = new Point(BoxStarX + (j - 1) * BoxWidth, BoxStarY + (i - 1) * BoxWidth);
                    bt.Width = BoxWidth;
                    bt.Height = BoxWidth;
                    bt.Text = Boxstr; //bt.Name;
                    bt.Click +=new EventHandler(bt_Click);
                    panel1.Controls.Add(bt);

                    j++;
                    bt = new llkBox();
                    bt.Name = "X" + (j).ToString() + "|Y" + (i).ToString();
                    bt.Location = new Point(BoxStarX + (j - 1) * BoxWidth, BoxStarY + (i - 1) * BoxWidth);
                    bt.Width = BoxWidth;
                    bt.Height = BoxWidth;
                    bt.Text = Boxstr; //bt.Name;
                    bt.Click += new EventHandler(bt_Click);
                    panel1.Controls.Add(bt);
                }
            }

        }

        //随即变化
        private void Rand()
        {
            string Boxstr;
            Random rdom = new Random();
            llkBox rbt;
            foreach (llkBox bt in panel1.Controls)
            {
                bt.PicChang = true;
                Boxstr = bt.Text;
                rbt = (llkBox)panel1.Controls[rdom.Next(panel1.Controls.Count)];
                bt.Text = rbt.Text;
                rbt.Text = Boxstr;
            }
        }
        //填充数组
        private void FillArray()
        {
            ArrayPanel.Initialize();
            llkBox rbt;
            Coord crd;
            foreach (llkBox bt in panel1.Controls)
            {
                crd = new Coord(bt.Name);
                ArrayPanel[crd.Xcrd, crd.Ycrd] = Convert.ToInt32(bt.Text);
            }

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值