⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 towerview.cs

📁 暑假学习文件希望可以借鉴!文件在修改中!
💻 CS
📖 第 1 页 / 共 2 页
字号:
            SpeedUp.Enabled = flag;
            SpeedDown.Enabled = flag;
        }

        //每移动一次所要进行的操作
        private void timer1_Tick(object sender, EventArgs e)
        {
            twrCtnPbx[stkTop[srcStkRng[movCnt]]--, srcStkRng[movCnt]].Image = null;
            twrCtnPbx[++stkTop[dstStkRng[movCnt]], dstStkRng[movCnt]].Image =
                                                        blkImg[blknbr - blkIDRng[movCnt] - 1];
            MoveTime.Text = "Move Time: " + ++movCnt;

            if (blkIDRng.Length == movCnt)
            {
                timer1.Stop();

                SetProcessControl(false, false,true,true);
                SetSpeedControl(false);
            }
        }

        //释放物快
        private void toolStripExcute_Click(object sender, EventArgs e)
        {
            blknbr = int.Parse(blkComboBox.Text);

            srcStkRng = new int[(int)Math.Pow(2, blknbr) - 1];
            dstStkRng = new int[(int)Math.Pow(2, blknbr) - 1];
            blkIDRng = new int[(int)Math.Pow(2, blknbr) - 1];

            InitializeMoveBlock();

            int counter = 0;
            InitializeBlockOrder(blknbr, stkLocMod[sltdStkLocMod, 0], 
                 stkLocMod[sltdStkLocMod, 1], stkLocMod[sltdStkLocMod, 2], ref counter);

            SetBlockFigureControl(false);
            SetProcessControl(!sltdMovMod, false, sltdMovMod,true);
            status.Enabled = true;
        }

        //开始移动
        private void toolStripStart_Click(object sender, EventArgs e)
        {
            timer1.Interval = 220;
            speedLabel.Text = "Speed: Level 4";
            timer1.Start();

            SetProcessControl(false,true, true,false);
            SetSpeedControl(true);
        }

        //暂停移动,可继续
        private void toolStripPause_Click(object sender, EventArgs e)
        {
            timer1.Enabled = !timer1.Enabled;
        }

        //停止移动,不可继续
        private void toolStripStop_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            InitializeMoveBlock();

            SetProcessControl(!sltdMovMod, false, sltdMovMod, true);
            SetSpeedControl(false);
            MoveTime.Text = "Move Time: ";
        }

        //重置
        private void toolStripClear_Click(object sender, EventArgs e)
        {
            InitializeLayOut();

            srcStkRng = null;
            dstStkRng = null;
            blkIDRng = null;
            GC.Collect();

            SetBlockFigureControl(true);

        }

        //Speed Up and Speed Down
        private void toolStripSpeedUp_Click(object sender, EventArgs e)
        {
            timer1.Interval -= 40;

            speedLabel.Text = "Speed: Level " + (9 - timer1.Interval / 40);

            SpeedUp.Enabled = (timer1.Interval > 20);
            SpeedDown.Enabled = true;
        }

        private void toolStripSpeedDown_Click(object sender, EventArgs e)
        {
            timer1.Interval += 40;

            speedLabel.Text = "Speed: Level " + (9 - timer1.Interval / 40);

            SpeedDown.Enabled = (timer1.Interval < 380);
            SpeedUp.Enabled = true;
        }

        //选择源列与目标列
        private void SltSrcDst_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            sltdStkLocMod = (byte)SltSrcDst.DropDownItems.IndexOf(e.ClickedItem);
            SltSrcDst.Image = stkLocModImg[sltdStkLocMod];
        }

        //File菜单操作
        private void fileToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs                                                                    e)
        {
            if(e.ClickedItem.Name == "exit")
                Application.Exit();

            if (e.ClickedItem.Name == "gameMode")
                sltdMovMod = true;
            else
                sltdMovMod = false;

            InitializeLayOut();
            SetBlockFigureControl(true);
        }

        //显示About窗体
        private void towerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            child.Show();
        }

        //图片拖放
        private void Pbx_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                PictureBox pic = (PictureBox)(sender);
                srcPnt = IndexOf(pic);
                
                if( pic.Image != null && srcPnt.X == stkTop[srcPnt.Y])                              
                    pic.DoDragDrop(pic.Image, DragDropEffects.Move);
            }
        }

        private void Pbx_DragEnter(object sender, DragEventArgs e)
        {
            int dstStk = IndexOf((PictureBox)sender).Y;
            int srcImgIndex,dstImgIndex;

            //得出srcImgIndex,dstImgIndex
            for (srcImgIndex = 0; srcImgIndex < 12; srcImgIndex++)
                if (blkImg[srcImgIndex] == twrCtnPbx[srcPnt.X, srcPnt.Y].Image)
                    break;
            for (dstImgIndex = 0; dstImgIndex < 12; dstImgIndex++)
            {
                if (stkTop[dstStk] == -1)
                {
                    dstImgIndex = -1;
                    break;
                }
                else if (blkImg[dstImgIndex] == twrCtnPbx[stkTop[dstStk], dstStk].Image)
                    break;
            }           
            
            //检查被拖曳资料的类型是否适用于目标控件
            //源栈与目标栈不能相同
            //大物块必须在小物块之下,否则禁止拖放
            if (e.Data.GetDataPresent(DataFormats.Bitmap) && srcPnt.Y != dstStk && 
                srcImgIndex > dstImgIndex )
                e.Effect = DragDropEffects.Move;
            else
                e.Effect = DragDropEffects.None;
        }

        private void Pbx_DragDrop(object sender, DragEventArgs e)
        {
            Point dstPnt = IndexOf((PictureBox)(sender));

            twrCtnPbx[++stkTop[dstPnt.Y], dstPnt.Y].Image = twrCtnPbx[srcPnt.X, srcPnt.Y].Image;
            twrCtnPbx[srcPnt.X, srcPnt.Y].Image = null;
            stkTop[srcPnt.Y]--;

            MoveTime.Text = "Move Time: " + ++movCnt;

            //触发该事件后,检查是否将所有物块挪到指定的栈中
            if (twrCtnPbx[blknbr - 1, stkLocMod[sltdStkLocMod, 1]].Image == blkImg[blknbr - 1])
            {
                MessageBox.Show("Success!! Well Done!!\n\nYou Have Moved " + movCnt + " Times!!",                                           "Congratulations!", MessageBoxButtons.OK,MessageBoxIcon.Information);
                toolStripStop_Click(sender, e);
            }
        }

        //内部函数,返回PickureBox在twrCtnPbx中的横纵坐标
        private Point IndexOf(PictureBox pb)
        {
            Point temp = new Point(-1, -1);

            for( int i = 0 ; i < blknbr ; i++ )
                for( int j = 0 ; j < 3 ; j++)
                    if (twrCtnPbx[i, j] == pb)
                    {
                        temp.X = i;
                        temp.Y = j;
                        return temp;
                    }

            //search error
            return temp;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -