Создание сетевой игры "Кости". Протоколы, используемые в сетевой игре: IPX предоставляет возможность программам обмениваться пакетами данных без подтверждения; протоколы SPX и NETBIOS сделаны на базе IPX и поэтому требуют дополнительных ресурсов.
Правила игры Один из игроков является сервером, другой - клиентом. Протоколы IPX Протокол IPX предоставляет возможность программам, запущенным на рабочих станциях, обмениваться пакетами данных без подтверждения. В сети Novell NetWare наиболее быстрая передача данных при наиболее экономном использовании памяти реализуется именно протоколом IPX. Протоколы SPX и NETBIOS сделаны на базе IPX и поэтому требуют дополнительных ресурсов. Особенностью формата пакета является то, что все поля заголовка содержат значения в перевернутом формате, т. е. по младшему адресу записывается старший байт данных, а не младший, как это принято в процессорах фирмы Intel. Работа протокола TCP Протокол верхнего уровня (приложений/процессов) разделяет данные на кусочки (это процесс называется инкапсуляцией) и каждому кусочку добавляет заголовок. Исходники Main.cpp #include #include #include #pragma hdrstop #include Main.h #include Podkluch.h #include GameParam.h #include About.h //--------------------------------------------------------------------------- #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]->Vis
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы