#pragma package(smart_init)
#pragma link "LMDCustomBevelPanel"
#pragma link "LMDCustomControl"
#pragma link "LMDCustomPanel"
#pragma link "LMDSimplePanel"
#pragma link "LMDBackPanel"
#pragma link "LMDCustomParentPanel"
#pragma link "LMDBaseControl"
#pragma link "LMDBaseGraphicControl"
#pragma link "LMDBaseLabel"
#pragma link "LMDControl"
#pragma link "LMDCustomSimpleLabel"
#pragma link "LMDSimpleLabel"
#pragma link "lmdcont"
#pragma link "LMDCustomComponent"
#pragma link "LMDCustomStatusBar"
#pragma link "LMDStatusBar"
#pragma link "LMDCustomPanelFill"
#pragma link "LMDPanelFill"
#pragma link "LMDCustomScrollBox"
#pragma link "LMDListBox"
#pragma link "LMDCustomFormFill"
#pragma link "LMDFormFill"
#pragma link "LMDWndProcComponent"
#pragma link "LMDBaseShape"
#pragma link "LMDShapeControl"
#pragma link "LMDCustomLabel"
#pragma link "LMDDrawEdge"
#pragma link "LMDLabel"
#pragma link "LMDBaseImage"
#pragma link "LMDCustomGroupBox"
#pragma link "LMDCustomLImage"
#pragma link "LMDGraphicControl"
#pragma link "LMDGroupBox"
#pragma link "LMDLImage"
#pragma link "LMDBaseGraphicButton"
#pragma link "LMDCustomShapeButton"
#pragma link "LMDShapeButton"
#pragma resource "*.dfm"
TMainForm *MainForm;
extern bool IsServer;
extern AnsiString Protocoli[];
extern int KolKub;
extern int MaxOch;
extern int choosenProt;
extern AnsiString ServerHostName;
extern AnsiString ServerHostIP;
extern bool IsHostName;
extern bool IsIgrayut;
extern int NomHoda;
extern int MyCurOch;
extern int MyWholeOch;
extern int HisWholeOch;
extern bool IsYaFixed;
extern bool IsHeFixed;
extern int HisWinPoPartiam;
extern int MyWinPoPartiam;
extern int NomPartia;
int *MasPriem;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TMainForm::FormCreate(TObject *Sender)
FirstTimeShow=true;
IsVisitApplicationBox=false;
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();
case 2:
NetBiosConnect();
case 3:
MailSlotConnect();
case 4:
PipeConnect();
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[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[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);
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(1);
else if (MasPriem[0]==2) //соперник зафиксировал
IsHeFixed=true;
shapeFixed->Brush->Color=0x000000CE;
DannieForTabl=hefixed;
if(IsYaFixed && MyWholeOch==HisWholeOch)
Nichia();
else if(MyWholeOch>HisWholeOch)
else if (MasPriem[0]==3) //соперник разорвал соединение
Application->MessageBoxA("Ваш соперник разорвал соединение.\nИгра окончена.","Разрыв соединения",MB_OK);
IPXCloseConnection();
TCPIPCloseConnection();
NetBiosCloseConnection();
MailSlotCloseConnection();
PipeCloseConnection();
for (int i=0;i<KolKub;i++)
delete Kubiki1[i];
delete Kubiki2[i];
IsIgrayut=false;
delete [] MasPriem;
//----------------процедура заполнения таблицы----------------------------------
void __fastcall TMainForm::ZapolnTabl(enum TypeDannihForTabl DannieForTabl)
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");
else if (DannieForTabl==hebrosil)
listboxOchki->SetItemPart(NomHoda-1,2," "+IntToStr(MasPriem[1]));
listboxOchki->SetItemPart(NomHoda-1,2," 0");
listboxOchki->SetItemPart(NomHoda-1,1," "+IntToStr(MyCurOch));
listboxOchki->SetItemPart(NomHoda-1,1," 0");
listboxOchki->Items->Add(" "+ IntToStr(NomHoda)+";; "+IntToStr(MasPriem[1]));
listboxOchki->Items->Add(" "+ IntToStr(NomHoda)+";; 0");
//------------------------------Результаты--------------------------------------
void __fastcall TMainForm::ViProigrali(void)
HisWinPoPartiam++;
Application->MessageBoxA("Вы проиграли!\nИграем дальше!","Поражение",MB_OK+MB_ICONEXCLAMATION);
InterfaceIgraemDalshe();
//---------------------------------
void __fastcall TMainForm::ViViigrali(void)
MyWinPoPartiam++;
Application->MessageBoxA("Вы выиграли!\nИграем дальше!","Победа!!",MB_OK+MB_ICONEXCLAMATION);
//----------------------------------
void __fastcall TMainForm::Nichia(void)
Application->MessageBoxA("Вы сыграли вничью!\nИграем дальше!","Ничья",MB_OK+MB_ICONEXCLAMATION);
//----------------------------------------------------------------------------
void __fastcall TMainForm::menuOProgrClick(TObject *Sender)
FormAbout->ShowModal();
//----------------------------Интерфейсы---------------------------------------
void __fastcall TMainForm::InterfaceBezIgri(void)
MyWholeOch=0;
HisWholeOch=0;
MyCurOch=0;
NomHoda=0;
IsYaFixed=false;
IsHeFixed=false;
NomPartia=0;
MyWinPoPartiam=0;
HisWinPoPartiam=0;
ServerHostName="";
ServerHostIP="";
menuStop->Enabled=false;
panParam->Visible=false;
lbNomPartia->Visible=false;
panSchetPoPartiam->Visible=false;
gbPole1->Top=15;
gbPole2->Top=15;
gbTabl->Top=15;
this->Height=400;
this->Caption="Игровое поле";
btBrosit->Enabled=false;
btFix->Enabled=false;
btBrosit->Color=clCream;
btFix->Color=clCream;
shapeBrosil->Brush->Color=clSilver;
shapeFixed->Brush->Color=clSilver;
shapeBrosil->Caption->Font->Color=clWhite;
shapeFixed->Caption->Font->Color=clWhite;
lbMyWholeOch->Caption="0";
lbHisWholeOch->Caption="0";
lbMaxOch2->Caption="";
listboxOchki->Clear();
listboxOchki->Width=218;
listboxOchki->Left=23;
AnsiString tmp=AnsiQuotedStr("Игра->Начать новую игру",'"');
lbStat->Caption="Для начала новой игры выберете пункт меню "+tmp;
//--------------------------------------------------------------
void __fastcall TMainForm::InterfaceBeginNewGame(void)
menuStop->Enabled=true;
Caption=Caption+" Сервер";
imStolServer->Parent=panPole1;
imStolClient->Parent=panPole2;
Caption=Caption+" Клиент";
imStolClient->Parent=panPole1;
imStolServer->Parent=panPole2;
Kubiki1[i] = new TImage(this);
Kubiki1[i]->Parent=panPole1;
Kubiki1[i]->Transparent=true;
Kubiki2[i] = new TImage(this);
Kubiki2[i]->Parent=panPole2;
Kubiki2[i]->Transparent=true;
panParam->Visible=true;
lbNomPartia->Visible=true;
panSchetPoPartiam->Visible=true;
gbPole1->Top=80;
gbTabl->Top=80;
gbPole2->Top=80;
this->Height=470;
lbKolKub->Caption=IntToStr(KolKub);
lbMaxOch->Caption=IntToStr(MaxOch);
lbMaxOch2->Caption=IntToStr(MaxOch);
lbNomPartia->Caption="Партия № 1";
lbSchetPoPartiam->Caption="0 : 0";
NomPartia=1;
IsIgrayut=true;
//---------------------------------------------------------
void __fastcall TMainForm::ChangeInterfacePerehodHoda(bool HozhuYa)
if(HozhuYa)
btBrosit->Enabled=true;
btFix->Enabled=true;
lbStat->Caption="Твой ход...";
if (MyWholeOch>MaxOch-KolKub)
Application->MessageBoxA("Единственно верный вариант для Вас сейчас - зафиксировать очки!","Предупреждение",MB_OK+MB_ICONEXCLAMATION);
shapeBrosil->Caption->Font->Color=clBlack;
shapeFixed->Caption->Font->Color=clBlack;
lbStat->Caption="Ход соперника...";
//--------------------------------------------------------------------------
Страницы: 1, 2, 3, 4