📄 unit1.~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 + -