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

📄 unit1.~cpp

📁 自编的华容道小游戏
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 PrepareMove=FALSE;
 
 Position[0][0]= 6;  //将军1 Left
 Position[0][1]= 6;  //将军1Top
 Position[1][0]= 80; //曹操
 Position[1][1]= 6;
 Position[2][0]= 228; //将军2
 Position[2][1]= 6;
 Position[3][0]= 6;   //将军3
 Position[3][1]= 148;
 Position[4][0]= 80;   //关羽
 Position[4][1]= 148;
 Position[5][0]= 228;  //将军4
 Position[5][1]= 148;
 Position[6][0]= 80;   //小兵1
 Position[6][1]= 219;
 Position[7][0]= 154;  //小兵2
 Position[7][1]= 219;
 Position[8][0]= 6;     //小兵3
 Position[8][1]= 290;
 Position[9][0]= 228;   //小兵4
 Position[9][1]= 290;

 WidthHeight[0][0]= 74;
 WidthHeight[0][1]= 142;
 WidthHeight[1][0]= 148;
 WidthHeight[1][1]= 142;
 WidthHeight[2][0]= 74;
 WidthHeight[2][1]= 142;
 WidthHeight[3][0]= 74;
 WidthHeight[3][1]= 142;
 WidthHeight[4][0]= 148;
 WidthHeight[4][1]= 71;
 WidthHeight[5][0]= 74;
 WidthHeight[5][1]= 142;
 WidthHeight[6][0]= 74;
 WidthHeight[6][1]= 71;
 WidthHeight[7][0]= 74;
 WidthHeight[7][1]= 71;
 WidthHeight[8][0]= 74;
 WidthHeight[8][1]= 71;
 WidthHeight[9][0]= 74;
 WidthHeight[9][1]= 71;

 for(int i=0;i<10;i++)
   {
    BitBtn[i]=new TBitBtn(Panel1);
    BitBtn[i]->Parent=Panel1;
    BitBtn[i]->Left=Position[i][0];
    BitBtn[i]->Top=Position[i][1];
    BitBtn[i]->Width=WidthHeight[i][0];
    BitBtn[i]->Height=WidthHeight[i][1];
    BitBtn[i]->Tag=i;
    BitBtn[i]->OnMouseDown=BitBtnMouseDown;
    BitBtn[i]->OnMouseUp=BitBtnMouseUp;
   }

 BitBtn[0]->Glyph->LoadFromFile("general1.bmp");
 BitBtn[1]->Glyph->LoadFromFile("caocao.bmp");
 BitBtn[2]->Glyph->LoadFromFile("general2.bmp");
 BitBtn[3]->Glyph->LoadFromFile("general3.bmp");
 BitBtn[4]->Glyph->LoadFromFile("guanyu.bmp");
 BitBtn[5]->Glyph->LoadFromFile("general4.bmp");
 BitBtn[6]->Glyph->LoadFromFile("soldier1.bmp");
 BitBtn[7]->Glyph->LoadFromFile("soldier2.bmp");
 BitBtn[8]->Glyph->LoadFromFile("soldier3.bmp");
 BitBtn[9]->Glyph->LoadFromFile("soldier4.bmp");
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Position[0][0]= 6;  //将军1 Left
 Position[0][1]= 6;  //将军1Top
 Position[1][0]= 80; //曹操
 Position[1][1]= 6;
 Position[2][0]= 228; //将军2
 Position[2][1]= 6;
 Position[3][0]= 6;   //将军3
 Position[3][1]= 148;
 Position[4][0]= 80;   //关羽
 Position[4][1]= 148;
 Position[5][0]= 228;  //将军4
 Position[5][1]= 148;
 Position[6][0]= 80;   //小兵1
 Position[6][1]= 219;
 Position[7][0]= 154;  //小兵2
 Position[7][1]= 219;
 Position[8][0]= 6;     //小兵3
 Position[8][1]= 290;
 Position[9][0]= 228;   //小兵4
 Position[9][1]= 290;

 for(int i=0;i<10;i++)
   {
    BitBtn[i]->Left=Position[i][0];
    BitBtn[i]->Top=Position[i][1];
   }

 Timer1->Enabled=true;
 SpendTime=0;

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtnMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 PrepareMove=TRUE;
 BeginPosition.x=X;
 BeginPosition.y=Y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtnMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  //判断移动方向
  if(PrepareMove)
   {
    if(X>BeginPosition.x)//如果向右拖
      {
       if(Y>BeginPosition.y)//如果向下拖
         {
          if((X-BeginPosition.x)>(Y-BeginPosition.y))//如果向右拖的量比向下拖的量大
            Moveward=Drag_Rightward; //确定为向右拖
          else
            Moveward=Drag_Downward; //确定为向下拖
         }
       else //如果向上拖
         {
          if((X-BeginPosition.x)>(BeginPosition.y-Y)) //如果向右拖的量比向上拖的量大
            Moveward=Drag_Rightward; //确定为向右拖
          else
            Moveward=Drag_Upward;   //确定为向上拖
         }
      }
    else   //如果为向左拖
      {
       if(Y>BeginPosition.y)  //如果为向下拖
         {
          if((BeginPosition.x-X)>(Y-BeginPosition.y)) //如果向左拖的量比向下拖的量大
            Moveward=Drag_Leftward;    //确定为向左拖
          else
            Moveward=Drag_Downward;
         }
       else         //如果向上拖
         {
          if((BeginPosition.x-X)>(BeginPosition.y-Y)) //如果向左拖的量比向上拖的量大
            Moveward=Drag_Leftward;   //确定为向左拖
          else
            Moveward=Drag_Upward;
         }
      }

    //判断当前拖动是否有效
    if(InvalidMove(((TBitBtn*)Sender)->Left+((TBitBtn*)Sender)->Width/2,
                   ((TBitBtn*)Sender)->Top+((TBitBtn*)Sender)->Height/2,
                   ((TBitBtn*)Sender)->Tag))
      {
       if(Moveward==Drag_Upward) //如果向上移动
         {
          BitBtn[((TBitBtn*)Sender)->Tag]->Top-=71;
          Position[((TBitBtn*)Sender)->Tag][1]-=71;
         }
       else if(Moveward==Drag_Downward)//如果向下移动
         {
          BitBtn[((TBitBtn*)Sender)->Tag]->Top+=71;
          Position[((TBitBtn*)Sender)->Tag][1]+=71;
         }
       else if(Moveward==Drag_Leftward) //如果向左移动
         {
          BitBtn[((TBitBtn*)Sender)->Tag]->Left-=74;
          Position[((TBitBtn*)Sender)->Tag][0]-=74;
         }
       else  //如果向右移动
         {
          BitBtn[((TBitBtn*)Sender)->Tag]->Left+=74;
          Position[((TBitBtn*)Sender)->Tag][0]+=74;
         }
      }
   }

  if(Position[1][0]==80  && Position[1][1]==219)
    {
     MessageBox(NULL,"你胜利了!你真行!","恭喜",MB_OK);
    }

  if(Position[1][0]== 80 && Position[1][1]==219)
    {
     Timer1->Enabled=false;
     AnsiString Message="你胜利了!你真行!,你所花时间为:"+IntToStr(SpendTime)+"秒";
     MessageBox(NULL,Message.c_str(),"恭喜",MB_OK);
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 SpendTime++;
 Label12->Caption="所花时间:"+IntToStr(SpendTime)+"秒";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
bool TForm1::InvalidMove(int X, int Y,int ButtonNumber)
{
 if(Moveward==Drag_Upward)
   {
    int tempY=Y-71;
    int tempX=X;
    //判断上一个单位格中是否有方块,如果有则返回false,表示不能移动
    for(int i=0;i<10;i++)
      {
       if(i==ButtonNumber)
         continue;
       if(tempY>=Position[i][1] && tempY<=Position[i][1]+ WidthHeight[i][1]
          &&
          tempX>=Position[i][0] && tempX<=Position[i][0]+ WidthHeight[i][0])
         return false;
      }

    //防止从顶部出去
    if(Position[ButtonNumber][1]==6)
      return false;

    return true;
   }
 else if(Moveward==Drag_Downward)
   {
    int tempY=Y+71;
    int tempX=X;
    //判断下一个单位格中是否有方块,如果有则返回false,表示不能移动
    for(int i=0;i<10;i++)
      {
       if(i==ButtonNumber)
         continue;
       if(tempY>=Position[i][1] && tempY<=Position[i][1]+ WidthHeight[i][1]
          &&
          tempX>=Position[i][0] && tempX<=Position[i][0]+ WidthHeight[i][0])
         return false;
      }

    //防止从底部出去
    if(Position[ButtonNumber][1]+WidthHeight[ButtonNumber][1]==361)
      return false;

    return true;
   }
 else if(Moveward==Drag_Rightward)
   {
    int tempY=Y;
    int tempX=X+74;
    //判断下一个单位格中是否有方块,如果有则返回false,表示不能移动
    for(int i=0;i<10;i++)
      {
       if(i==ButtonNumber)
         continue;

       if(tempY>=Position[i][1] && tempY<=Position[i][1]+ WidthHeight[i][1]
          &&
          tempX>=Position[i][0] && tempX<=Position[i][0]+ WidthHeight[i][0])
         return false;
      }

    //防止从右部出去
    if(Position[ButtonNumber][0]+WidthHeight[ButtonNumber][0]==302)
      return false;

    return true;
   }
 else
   {
    int tempY=Y;
    int tempX=X-74;
    //判断下一个单位格中是否有方块,如果有则返回false,表示不能移动
    for(int i=0;i<10;i++)
      {
       if(i==ButtonNumber)
         continue;

       if(tempY>=Position[i][1] && tempY<=Position[i][1]+ WidthHeight[i][1]
          &&
          tempX>=Position[i][0] && tempX<=Position[i][0]+ WidthHeight[i][0])
         return false;
      }

    //防止从左部出去
    if(Position[ButtonNumber][0]==6)
      return false;
    return true;
   }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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