void __fastcall TMainForm::FormActivate(TObject *Sender)
{
if(FirstTimeShow)
{
FirstTimeShow=false;
InterfaceBezIgri();
menuBeginClick(this);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::menuBeginClick(TObject *Sender)
{
if (IsIgrayut)
{
menuStopClick(this);
if (IsIgrayut) return;
}
if (UstanParametrov()) //вызов 2-х форм для установки параметров
{
//----подключение----
switch(choosenProt)
{
case 0:
IPXConnect();
break;
case 1:
TCPIPConnect();
break;
case 2:
NetBiosConnect();
break;
case 3:
MailSlotConnect();
break;
case 4:
PipeConnect();
break;
}
if(IsServer) lbStat->Caption="Ожидается соединение с клиентом...";
}
}
//---------------------------------------------------------------------------
bool __fastcall TMainForm::UstanParametrov(void)
{
int md1,md2;
for(;;)
{
md1=FormParamConnect->ShowModal();
FormParamConnect->Close();
if (md1==mrOk)
{
if (IsServer)
{
md2=FormGameParam->ShowModal();
if (md2==mrOk) return 1;
else continue;
}
else return 1;
}
else return 0;
}
}
void __fastcall TMainForm::OtobrazhDannihSopernika(int *MasPriem)
{
Graphics::TBitmap *Bitmap2 = new Graphics::TBitmap();
AnsiString strCat;
if(IsServer)
{
strCat="_2";
}
else
{
strCat="";
}
if(KolKub==1)
{
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Kubiki2[0]->Left=MasPriem[4];
Kubiki2[0]->Top=MasPriem[5];
Kubiki2[0]->Visible=true;
}
else if (KolKub==2)
{
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Kubiki2[0]->Left=MasPriem[4];
Kubiki2[0]->Top=MasPriem[5];
Kubiki2[0]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Kubiki2[1]->Left=MasPriem[7];
Kubiki2[1]->Top=MasPriem[8];
Kubiki2[1]->Visible=true;
}
else if (KolKub==3)
{
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Kubiki2[0]->Left=MasPriem[4];
Kubiki2[0]->Top=MasPriem[5];
Kubiki2[0]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Kubiki2[1]->Left=MasPriem[7];
Kubiki2[1]->Top=MasPriem[8];
Kubiki2[1]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[9])+strCat);
Kubiki2[2]->Picture->Bitmap=Bitmap2;
Kubiki2[2]->Left=MasPriem[10];
Kubiki2[2]->Top=MasPriem[11];
Kubiki2[2]->Visible=true;
}
else
{
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[3])+strCat);
Kubiki2[0]->Picture->Bitmap=Bitmap2;
Kubiki2[0]->Left=MasPriem[4];
Kubiki2[0]->Top=MasPriem[5];
Kubiki2[0]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[6])+strCat);
Kubiki2[1]->Picture->Bitmap=Bitmap2;
Kubiki2[1]->Left=MasPriem[7];
Kubiki2[1]->Top=MasPriem[8];
Kubiki2[1]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[9])+strCat);
Kubiki2[2]->Picture->Bitmap=Bitmap2;
Kubiki2[2]->Left=MasPriem[10];
Kubiki2[2]->Top=MasPriem[11];
Kubiki2[2]->Visible=true;
Bitmap2->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(MasPriem[12])+strCat);
Kubiki2[3]->Picture->Bitmap=Bitmap2;
Kubiki2[3]->Left=MasPriem[13];
Kubiki2[3]->Top=MasPriem[14];
Kubiki2[3]->Visible=true;
}
HisWholeOch=MasPriem[2];
lbHisWholeOch->Caption=IntToStr(MasPriem[2]);
delete Bitmap2;
}
//-----------пришли данные соперника--------------------------------------------
void __fastcall TMainForm::Priem(int *MasPriem)
{
if(MasPriem[0]==0) //первый ответ сервера клиенту
{
AnsiString mess;
mess="Ваш соперник выбрал следующие параметры игры:\nКоличество кубиков: "+IntToStr(MasPriem[1])+"\nМаксимальное количество очков: "+IntToStr(MasPriem[2]);
IsVisitApplicationBox=true;
Application->MessageBoxA(mess.c_str(),"Параметры игры",MB_OK);
KolKub=MasPriem[1];
MaxOch=MasPriem[2];
InterfaceBeginNewGame();
ChangeInterfacePerehodHoda(0);
IsVisitApplicationBox=false;
}
else if (MasPriem[0]==1) //соперник бросил
{
shapeBrosil->Brush->Color=0x0000CE00;
OtobrazhDannihSopernika(MasPriem);
if(!IsServer)
{
NomHoda++;
}
enum TypeDannihForTabl DannieForTabl;
DannieForTabl=hebrosil;
ZapolnTabl(DannieForTabl);
if(IsYaFixed && HisWholeOch>MyWholeOch && HisWholeOch<=MaxOch)
{
ViProigrali();
}
else if (HisWholeOch>MaxOch)
{
lbHisWholeOch->Font->Color=clRed;
ViViigrali();
}
else if(IsYaFixed && HisWholeOch<=MyWholeOch)
{
ChangeInterfacePerehodHoda(0);
}
else
{
ChangeInterfacePerehodHoda(1);
}
}
else if (MasPriem[0]==2) //соперник зафиксировал
{
IsHeFixed=true;
lbHisWholeOch->Font->Color=clRed;
shapeFixed->Brush->Color=0x000000CE;
if(!IsServer)
{
NomHoda++;
}
enum TypeDannihForTabl DannieForTabl;
DannieForTabl=hefixed;
ZapolnTabl(DannieForTabl);
if(IsYaFixed && MyWholeOch==HisWholeOch)
{
Nichia();
}
else if(MyWholeOch>HisWholeOch)
{
ViViigrali();
}
else
{
ChangeInterfacePerehodHoda(1);
}
}
else if (MasPriem[0]==3) //соперник разорвал соединение
{
IsVisitApplicationBox=true;
Application->MessageBoxA("Ваш соперник разорвал соединение.\nИгра окончена.","Разрыв соединения",MB_OK);
switch(choosenProt)
{
case 0:
IPXCloseConnection();
break;
case 1:
TCPIPCloseConnection();
break;
case 2:
NetBiosCloseConnection();
break;
case 3:
MailSlotCloseConnection();
break;
case 4:
PipeCloseConnection();
break;
}
for (int i=0;i<KolKub;i++)
{
delete Kubiki1[i];
delete Kubiki2[i];
}
IsIgrayut=false;
InterfaceBezIgri();
IsVisitApplicationBox=false;
}
delete [] MasPriem;
}
//----------------процедура заполнения таблицы----------------------------------
void __fastcall TMainForm::ZapolnTabl(enum TypeDannihForTabl DannieForTabl)
{
if(IsServer)
{
if(DannieForTabl==yabrosil)
{
listboxOchki->Items->Add(" "+IntToStr(NomHoda)+"; "+IntToStr(MyCurOch));
listboxOchki->TopIndex=NomHoda-1;
if(NomHoda==9)
{
listboxOchki->Width=236;
listboxOchki->Left=14;
}
}
else if (DannieForTabl==yafixed)
{
listboxOchki->Items->Add(" "+IntToStr(NomHoda)+"; 0");
listboxOchki->TopIndex=NomHoda-1;
if(NomHoda==9)
{
listboxOchki->Width=236;
listboxOchki->Left=14;
}
}
else if (DannieForTabl==hebrosil)
{
listboxOchki->SetItemPart(NomHoda-1,2," "+IntToStr(MasPriem[1]));
listboxOchki->TopIndex=NomHoda-1;
}
else
{
listboxOchki->SetItemPart(NomHoda-1,2," 0");
listboxOchki->TopIndex=NomHoda-1;
}
}
else
{
if(DannieForTabl==yabrosil)
{
listboxOchki->SetItemPart(NomHoda-1,1," "+IntToStr(MyCurOch));
listboxOchki->TopIndex=NomHoda-1;
}
else if (DannieForTabl==yafixed)
{
listboxOchki->SetItemPart(NomHoda-1,1," 0");
listboxOchki->TopIndex=NomHoda-1;
}
else if (DannieForTabl==hebrosil)
{
listboxOchki->Items->Add(" "+ IntToStr(NomHoda)+";; "+IntToStr(MasPriem[1]));