Рефераты. Создание сетевой игры






#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();

                 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]));

        listboxOchki->TopIndex=NomHoda-1;

        if(NomHoda==9)

        {

            listboxOchki->Width=236;

            listboxOchki->Left=14;

        }

     }

     else

     {

        listboxOchki->Items->Add("          "+ IntToStr(NomHoda)+";;         0");

        listboxOchki->TopIndex=NomHoda-1;

        if(NomHoda==9)

        {

            listboxOchki->Width=236;

            listboxOchki->Left=14;

        }

     }

   }


}


//------------------------------Результаты--------------------------------------


void __fastcall TMainForm::ViProigrali(void)

{

  IsVisitApplicationBox=true;


  HisWinPoPartiam++;


  Application->MessageBoxA("Вы проиграли!\nИграем дальше!","Поражение",MB_OK+MB_ICONEXCLAMATION);

  InterfaceIgraemDalshe();


  IsVisitApplicationBox=false;


}

//---------------------------------

void __fastcall TMainForm::ViViigrali(void)

{

  IsVisitApplicationBox=true;


  MyWinPoPartiam++;


  Application->MessageBoxA("Вы выиграли!\nИграем дальше!","Победа!!",MB_OK+MB_ICONEXCLAMATION);

  InterfaceIgraemDalshe();


  IsVisitApplicationBox=false;

}

//----------------------------------

void __fastcall TMainForm::Nichia(void)

{

  IsVisitApplicationBox=true;


  MyWinPoPartiam++;

  HisWinPoPartiam++;


  Application->MessageBoxA("Вы сыграли вничью!\nИграем дальше!","Ничья",MB_OK+MB_ICONEXCLAMATION);

  InterfaceIgraemDalshe();


  IsVisitApplicationBox=false;

}


//----------------------------------------------------------------------------

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="";

   IsIgrayut=false;


   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;


  if(IsServer)

  {

    Caption=Caption+" Сервер";

    imStolServer->Parent=panPole1;

    imStolClient->Parent=panPole2;

  }

  else

  {

    Caption=Caption+" Клиент";

    imStolClient->Parent=panPole1;

    imStolServer->Parent=panPole2;

  }


  for (int i=0;i<KolKub;i++)

  {

     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;

   btBrosit->Color=clCream;

   btFix->Color=clCream;

   shapeBrosil->Caption->Font->Color=clWhite;

   shapeFixed->Caption->Font->Color=clWhite;

   lbStat->Caption="Твой ход...";

   if (MyWholeOch>MaxOch-KolKub)

   {

        IsVisitApplicationBox=true;

        Application->MessageBoxA("Единственно верный вариант для Вас сейчас - зафиксировать очки!","Предупреждение",MB_OK+MB_ICONEXCLAMATION);

        IsVisitApplicationBox=false;

   }

 }

 else

 {

   btBrosit->Enabled=false;

   btFix->Enabled=false;

   shapeBrosil->Brush->Color=clSilver;

   shapeFixed->Brush->Color=clSilver;

   shapeBrosil->Caption->Font->Color=clBlack;

   shapeFixed->Caption->Font->Color=clBlack;

   lbStat->Caption="Ход соперника...";

 }



}


 //--------------------------------------------------------------------------

Страницы: 1, 2, 3, 4



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.