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

📄 thdcalcq.cpp

📁 八皇后问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            frmQueen->pbBoard->Canvas->Unlock();
        }
        else
        {
            Grid.Y -= IMGLEN + 1;
            Grid.COLOR = Grid.COLOR==clGreen?clWhite:clGreen;

            while(Grid.Y != ToGrid.Y)
            {
                PutChessMan(Grid,QPOINT);
                Grid.Y -= IMGLEN + 1;
                Grid.COLOR = Grid.COLOR==clGreen?clWhite:clGreen;
                Sleep(AniSpeed);
            }
            
            TRect rect;
            rect.Left   = ToGrid.X;
            rect.Top    = ToGrid.Y;
            rect.Right  = rect.Left + IMGLEN;
            rect.Bottom = rect.Top  + IMGLEN;

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->Brush->Color = ToGrid.COLOR;
            frmQueen->pbBoard->Canvas->Unlock();

            for(int i=0;i<2;++i)
            {
                PutChessMan(ToGrid,ERRQUEEN);
                Sleep(AniSpeed);
                frmQueen->pbBoard->Canvas->Lock();
                frmQueen->pbBoard->Canvas->FillRect(rect);
                frmQueen->pbBoard->Canvas->Unlock();
                PutChessMan(ToGrid,QUEEN);
                Sleep(AniSpeed);
            }

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->FillRect(rect);

            while(rect.Top != FromGrid.Y)
            {
                rect.Top    += IMGLEN + 1;
                rect.Bottom += IMGLEN + 1;

                if(frmQueen->pbBoard->Canvas->Brush->Color == clGreen)
                    frmQueen->pbBoard->Canvas->Brush->Color = clWhite;
                else
                    frmQueen->pbBoard->Canvas->Brush->Color = clGreen;
                frmQueen->pbBoard->Canvas->FillRect(rect);
            }

            frmQueen->pbBoard->Update();
            frmQueen->pbBoard->Canvas->Unlock();
        }
    }
    else if(FromGrid.X < ToGrid.X)
    {
        if(FromGrid.Y < ToGrid.Y)
        {
            Grid.X += IMGLEN + 1;
            Grid.Y += IMGLEN + 1;

            while(Grid.Y != ToGrid.Y)
            {
                PutChessMan(Grid,QPOINT);
                Grid.X += IMGLEN + 1;
                Grid.Y += IMGLEN + 1;
                Sleep(AniSpeed);
            }

            TRect rect;
            rect.Left   = ToGrid.X;
            rect.Top    = ToGrid.Y;
            rect.Right  = rect.Left + IMGLEN;
            rect.Bottom = rect.Top  + IMGLEN;

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->Brush->Color = ToGrid.COLOR;
            frmQueen->pbBoard->Canvas->Unlock();

            for(int i=0;i<2;++i)
            {
                PutChessMan(ToGrid,ERRQUEEN);
                Sleep(AniSpeed);
                frmQueen->pbBoard->Canvas->Lock();
                frmQueen->pbBoard->Canvas->FillRect(rect);
                frmQueen->pbBoard->Canvas->Unlock();
                PutChessMan(ToGrid,QUEEN);
                Sleep(AniSpeed);
            }

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->FillRect(rect);

            while(rect.Top != FromGrid.Y)
            {
                rect.Left   -= IMGLEN + 1;
                rect.Top    -= IMGLEN + 1;
                rect.Right  -= IMGLEN + 1;
                rect.Bottom -= IMGLEN + 1;
                frmQueen->pbBoard->Canvas->FillRect(rect);
            }

            frmQueen->pbBoard->Update();
            frmQueen->pbBoard->Canvas->Unlock();
        }
        else
        {
            Grid.X += IMGLEN + 1;
            Grid.Y -= IMGLEN + 1;

            while(Grid.Y != ToGrid.Y)
            {
                PutChessMan(Grid,QPOINT);
                Grid.X += IMGLEN + 1;
                Grid.Y -= IMGLEN + 1;
                Sleep(AniSpeed);
            }

            TRect rect;
            rect.Left   = ToGrid.X;
            rect.Top    = ToGrid.Y;
            rect.Right  = rect.Left + IMGLEN;
            rect.Bottom = rect.Top  + IMGLEN;

            frmQueen->pbBoard->Canvas->Lock();
			frmQueen->pbBoard->Canvas->Brush->Color = ToGrid.COLOR;
            frmQueen->pbBoard->Canvas->Unlock();

            for(int i=0;i<2;++i)
            {
                PutChessMan(ToGrid,ERRQUEEN);
                Sleep(AniSpeed);
                frmQueen->pbBoard->Canvas->Lock();
                frmQueen->pbBoard->Canvas->FillRect(rect);
                frmQueen->pbBoard->Canvas->Unlock();
                PutChessMan(ToGrid,QUEEN);
                Sleep(AniSpeed);
            }

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->FillRect(rect);

            while(rect.Top != FromGrid.Y)
            {
                rect.Left   -= IMGLEN + 1;
                rect.Top    += IMGLEN + 1;
                rect.Right  -= IMGLEN + 1;
                rect.Bottom += IMGLEN + 1;
                frmQueen->pbBoard->Canvas->FillRect(rect);
            }

            frmQueen->pbBoard->Update();
            frmQueen->pbBoard->Canvas->Unlock();
        }
    }
    else
    {
        if(FromGrid.Y < ToGrid.Y)
        {
            Grid.X -= IMGLEN + 1;
            Grid.Y += IMGLEN + 1;

            while(Grid.Y != ToGrid.Y)
            {
                PutChessMan(Grid,QPOINT);
                Grid.X -= IMGLEN + 1;
                Grid.Y += IMGLEN + 1;
                Sleep(AniSpeed);
            }

            TRect rect;
            rect.Left   = ToGrid.X;
            rect.Top    = ToGrid.Y;
            rect.Right  = rect.Left + IMGLEN;
            rect.Bottom = rect.Top  + IMGLEN;

            frmQueen->pbBoard->Canvas->Lock();
			frmQueen->pbBoard->Canvas->Brush->Color = ToGrid.COLOR;
            frmQueen->pbBoard->Canvas->Unlock();

            for(int i=0;i<2;++i)
            {
                PutChessMan(ToGrid,ERRQUEEN);
                Sleep(AniSpeed);
                frmQueen->pbBoard->Canvas->Lock();
                frmQueen->pbBoard->Canvas->FillRect(rect);
                frmQueen->pbBoard->Canvas->Unlock();
                PutChessMan(ToGrid,QUEEN);
                Sleep(AniSpeed);
            }

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->FillRect(rect);

            while(rect.Top != FromGrid.Y)
            {
                rect.Left   += IMGLEN + 1;
                rect.Top    -= IMGLEN + 1;
                rect.Right  += IMGLEN + 1;
                rect.Bottom -= IMGLEN + 1;
                frmQueen->pbBoard->Canvas->FillRect(rect);
            }

            frmQueen->pbBoard->Update();
            frmQueen->pbBoard->Canvas->Unlock();
        }
        else
        {
            Grid.X -= IMGLEN + 1;
            Grid.Y -= IMGLEN + 1;

            while(Grid.Y != ToGrid.Y)
            {
                PutChessMan(Grid,QPOINT);
                Grid.X -= IMGLEN + 1;
                Grid.Y -= IMGLEN + 1;
                Sleep(AniSpeed);
            }

            TRect rect;
            rect.Left   = ToGrid.X;
            rect.Top    = ToGrid.Y;
            rect.Right  = rect.Left + IMGLEN;
            rect.Bottom = rect.Top  + IMGLEN;

            frmQueen->pbBoard->Canvas->Lock();
			frmQueen->pbBoard->Canvas->Brush->Color = ToGrid.COLOR;
            frmQueen->pbBoard->Canvas->Unlock();

            for(int i=0;i<2;++i)
            {
                PutChessMan(ToGrid,ERRQUEEN);
                Sleep(AniSpeed);
                frmQueen->pbBoard->Canvas->Lock();
                frmQueen->pbBoard->Canvas->FillRect(rect);
                frmQueen->pbBoard->Canvas->Unlock();
                PutChessMan(ToGrid,QUEEN);
                Sleep(AniSpeed);
            }

            frmQueen->pbBoard->Canvas->Lock();
            frmQueen->pbBoard->Canvas->FillRect(rect);

            while(rect.Top != FromGrid.Y)
            {
                rect.Left   += IMGLEN + 1;
                rect.Top    += IMGLEN + 1;
                rect.Right  += IMGLEN + 1;
                rect.Bottom += IMGLEN + 1;
                frmQueen->pbBoard->Canvas->FillRect(rect);
            }

            frmQueen->pbBoard->Update();
            frmQueen->pbBoard->Canvas->Unlock();
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TthdCalc::ShowChessMan(void)
{
    for(int i=1;i<=Queens.length();++i)
        PutChessMan(Queens[i],QUEEN);

    if(Queens.GetFQueenPos() != 0)
        PutChessMan(Queens.GetFQueen(),QUEEN,true);
}
//---------------------------------------------------------------------------
void __fastcall TthdCalc::EnableNewQueen(void)
{
    frmQueen->btnQueen->Caption = "摆皇后(&Q)";
    frmQueen->gpbOptions->Enabled = true;
    frmQueen->lblDescription->Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TthdCalc::CopyQueens()
{
    frmQueen->Queens = Queens;
}

⌨️ 快捷键说明

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