📄 towerview.cs
字号:
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 + -