void __fastcall TMainForm::InterfaceIgraemDalshe(void)
{
NomPartia++;
MyWholeOch=0;
HisWholeOch=0;
MyCurOch=0;
NomHoda=0;
IsYaFixed=false;
IsHeFixed=false;
IsIgrayut=true;
lbNomPartia->Caption="Партия № "+IntToStr(NomPartia);
lbSchetPoPartiam->Caption=IntToStr(MyWinPoPartiam)+" : "+IntToStr(HisWinPoPartiam);
listboxOchki->Clear();
listboxOchki->Width=218;
listboxOchki->Left=23;
lbMyWholeOch->Caption="0";
lbHisWholeOch->Caption="0";
lbMyWholeOch->Font->Color=clGreen;
lbHisWholeOch->Font->Color=clGreen;
btBrosit->Color=clCream;
btFix->Color=clCream;
shapeBrosil->Brush->Color=clSilver;
shapeFixed->Brush->Color=clSilver;
for (int i=0;i<KolKub;i++)
Kubiki1[i]->Visible=false;
Kubiki2[i]->Visible=false;
}
if(IsServer)
ChangeInterfacePerehodHoda(1);
else
ChangeInterfacePerehodHoda(0);
//-----------------------Завершение игры---------------------------------------
void __fastcall TMainForm::menuStopClick(TObject *Sender)
IsVisitApplicationBox=true;
if(Application->MessageBoxA("Вы действительно хотите завершить игру?","Завершение игры",MB_YESNO)==IDYES)
delete Kubiki1[i];
delete Kubiki2[i];
switch(choosenProt)
case 0:
IPXSend("3;");
IPXCloseConnection();
break;
case 1:
TCPIPSend("3;");
TCPIPCloseConnection();
case 2:
NetBiosSend("3;");
NetBiosCloseConnection();
case 3:
MailSlotSend("3;");
MailSlotCloseConnection();
case 4:
PipeSend("3;");
PipeCloseConnection();
IsIgrayut=false;
InterfaceBezIgri();
IsVisitApplicationBox=false;
//---------------------------------------------------------------------------
void __fastcall TMainForm::menuQuitClick(TObject *Sender)
Close();
void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
if (IsIgrayut)
menuStopClick(this);
if(IsIgrayut) CanClose=false;
//-------------------служебные функции преобразования типов---------------------
char* __fastcall TMainForm::DannieToChar(int Type, int MyCurOch, int MyWholeOch,
int ZnachKub1,int XKub1,int YKub1,
int ZnachKub2,int XKub2,int YKub2,
int ZnachKub3,int XKub3,int YKub3,
int ZnachKub4,int XKub4,int YKub4
)
AnsiString strTmp=IntToStr(Type)+";"+IntToStr(MyCurOch)+";"+IntToStr(MyWholeOch)+";"+
IntToStr(ZnachKub1)+";"+IntToStr(XKub1)+";"+IntToStr(YKub1)+";"+
IntToStr(ZnachKub2)+";"+IntToStr(XKub2)+";"+IntToStr(YKub2)+";"+
IntToStr(ZnachKub3)+";"+IntToStr(XKub3)+";"+IntToStr(YKub3)+";"+
IntToStr(ZnachKub4)+";"+IntToStr(XKub4)+";"+IntToStr(YKub4)+";";
return strTmp.c_str();
int* __fastcall TMainForm::CharToMas(char* charPriem)
AnsiString strPriem=charPriem;
MasPriem=new int[15];
int y=0;
int PrevDelim=0;
int CurDelim;
for(int i=1;i<=strPriem.Length();i++)
if(IsDelimiter(";",strPriem,i))
MasPriem[y++]=StrToInt(MidStr(strPriem,PrevDelim+1,i-PrevDelim-1));
PrevDelim=i;
return MasPriem;
//Бросить---------------------------------------------------------------------------
//Закогнчить--------------------------------------------------------------------------
void __fastcall TMainForm::btBrosit2Click(TObject *Sender)
Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();
char strSend[70];
AnsiString strCat;
NomHoda++;
strCat="";
strCat="_2";
if(KolKub==1)
int ZnachKub, XKub, YKub ;
randomize();
ZnachKub = random(6)+1;
XKub=random(126)+14;
YKub=random(126)+14;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub)+strCat);
Kubiki1[0]->Picture->Bitmap=Bitmap1;
Kubiki1[0]->Left=XKub;
Kubiki1[0]->Top=YKub;
Kubiki1[0]->Visible=true;
MyCurOch=ZnachKub;
MyWholeOch=MyWholeOch+MyCurOch;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub, XKub, YKub));
else if (KolKub==2)
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2;
ZnachKub1 = random(6)+1;
XKub1=random(126)+14;
YKub1=random(52)+14;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub1)+strCat);
Kubiki1[0]->Left=XKub1;
Kubiki1[0]->Top=YKub1;
ZnachKub2 = random(6)+1;
XKub2=random(126)+14;
YKub2=random(52)+88;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub2)+strCat);
Kubiki1[1]->Picture->Bitmap=Bitmap1;
Kubiki1[1]->Left=XKub2;
Kubiki1[1]->Top=YKub2;
Kubiki1[1]->Visible=true;
MyCurOch=ZnachKub1+ZnachKub2;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2));
else if (KolKub==3)
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3;
YKub1=random(27)+14;
YKub2=random(27)+63;
ZnachKub3 = random(6)+1;
XKub3=random(126)+14;
YKub3=random(28)+112;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub3)+strCat);
Kubiki1[2]->Picture->Bitmap=Bitmap1;
Kubiki1[2]->Left=XKub3;
Kubiki1[2]->Top=YKub3;
Kubiki1[2]->Visible=true;
MyCurOch=ZnachKub1+ZnachKub2+ZnachKub3;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3));
int ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2, ZnachKub3, XKub3, YKub3, ZnachKub4, XKub4, YKub4;
XKub1=random(52)+14;
XKub2=random(52)+88;
YKub2=random(52)+14;
XKub3=random(52)+14;
YKub3=random(52)+88;
ZnachKub4 = random(6)+1;
XKub4=random(52)+88;
YKub4=random(52)+88;
Bitmap1->LoadFromResourceName((unsigned int)HInstance,"KUB"+IntToStr(ZnachKub4)+strCat);
Kubiki1[3]->Picture->Bitmap=Bitmap1;
Kubiki1[3]->Left=XKub4;
Kubiki1[3]->Top=YKub4;
Kubiki1[3]->Visible=true;
MyCurOch=ZnachKub1+ZnachKub2+ZnachKub3+ZnachKub4;
strcpy(strSend,DannieToChar(1, MyCurOch, MyWholeOch, ZnachKub1, XKub1, YKub1, ZnachKub2, XKub2, YKub2,ZnachKub3, XKub3, YKub3, ZnachKub4, XKub4, YKub4));
IPXSend(strSend);
TCPIPSend(AnsiString(strSend));
NetBiosSend(strSend);
MailSlotSend(strSend);
PipeSend(strSend);
enum TypeDannihForTabl DannieForTabl;
DannieForTabl=yabrosil;
ZapolnTabl(DannieForTabl);
lbMyWholeOch->Caption=MyWholeOch;
if (MyWholeOch>MaxOch)
lbMyWholeOch->Font->Color=clRed;
ViProigrali();
else if(IsHeFixed && MyWholeOch>HisWholeOch && MyWholeOch<=MaxOch)
ViViigrali();
else if(IsHeFixed && MyWholeOch<=HisWholeOch)
delete Bitmap1;
void __fastcall TMainForm::btFix2Click(TObject *Sender)
IsYaFixed=true;
btFix->Color=clRed;
IPXSend("2;");
TCPIPSend("2;");
NetBiosSend("2;");
MailSlotSend("2;");
PipeSend("2;");
DannieForTabl=yafixed;
if(IsHeFixed && MyWholeOch==HisWholeOch)
Nichia();
else if(MyWholeOch<HisWholeOch)
Ipx.cpp
#pragma hdrstop
#include <winsock.h>
#include <wsipx.h>
#include "IPX.h"
#include "Main.h"
#include "Podkluch.h"
#pragma package(smart_init)
#define IPX_SERVER_SOCKET 0x4504
#define IPX_CLIENT_SOCKET 0x4514
#define WSA_NETEVENT (WM_USER+2)
SOCKET IPXSocket;
sockaddr_ipx CallAddress;
sockaddr_ipx OurAddress;
extern bool IsServer;
extern int KolKub;
extern int MaxOch;
//-----------------------Подключение--------------------------------------------
void __fastcall TMainForm::IPXConnect(void)
WSADATA WSAData;
int rc, OptVal=1;
rc = WSAStartup(MAKEWORD(2,0), &WSAData);
if (rc != 0)
Application->MessageBox("Ошибка инициализации WSAStartup","Ошибка",MB_OK+MB_ICONHAND);
Application->Terminate();
IPXSocket = socket(AF_IPX, SOCK_DGRAM, NSPROTO_IPX);
if (IPXSocket == INVALID_SOCKET)
Application->MessageBox("Протокол IPX не установлен","Ошибка",MB_OK+MB_ICONHAND);
memset(&OurAddress, 0, sizeof(OurAddress));
OurAddress.sa_family = AF_IPX;
OurAddress.sa_socket = htons((unsigned short)(IPX_SERVER_SOCKET));
OurAddress.sa_socket = htons((unsigned short)(IPX_CLIENT_SOCKET));
if (bind(IPXSocket, (LPSOCKADDR)&OurAddress, sizeof(sockaddr_ipx)) == SOCKET_ERROR)
Application->MessageBox("Адресная ошибка IPX","Ошибка",MB_OK+MB_ICONHAND);
closesocket(IPXSocket);
IPXSocket = INVALID_SOCKET;
rc = setsockopt(IPXSocket, SOL_SOCKET, SO_BROADCAST, (char *)&OptVal, sizeof(OptVal));
if (rc == SOCKET_ERROR)
rc = WSAGetLastError();
Application->MessageBox("Ошибка setsockopt","Ошибка",MB_OK+MB_ICONHAND);
if(!IsServer)
memset(&CallAddress, 0, sizeof(CallAddress));
CallAddress.sa_family = AF_IPX;
CallAddress.sa_socket = htons(IPX_SERVER_SOCKET);
CallAddress.sa_nodenum[0] = 0xff;
CallAddress.sa_nodenum[1] = 0xff;
CallAddress.sa_nodenum[2] = 0xff;
CallAddress.sa_nodenum[3] = 0xff;
CallAddress.sa_nodenum[4] = 0xff;
CallAddress.sa_nodenum[5] = 0xff;
rc = sendto(IPXSocket, "connect", 8, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
Application->MessageBox("Ошибка sendto IPX","Ошибка",MB_OK+MB_ICONHAND);
rc = WSAAsyncSelect(IPXSocket, Handle, WSA_NETEVENT, FD_READ);
Application->MessageBox("Ошибка WSAAsyncSelect","Ошибка",MB_OK+MB_ICONHAND);
WindowProc = IPXWndProc;
//------------------------------прием---------------------------------------
void __fastcall TMainForm::IPXWndProc(Messages::TMessage &Message)
int rc, l=sizeof(CallAddress);
char Buf[80];
if (Message.Msg == WSA_NETEVENT)
if (Message.LParam == FD_READ)
rc = recvfrom((SOCKET)Message.WParam, Buf, sizeof(Buf)-1, 0, (PSOCKADDR)&CallAddress, &l);
Application->MessageBox("Ошибка recvfrom IPX","Ошибка",MB_OK+MB_ICONHAND);
if (rc >= 1)
if(!strcmp(Buf,"connect"))
char *strPered=DannieToChar(0,KolKub,MaxOch);
IPXSend(strPered);
InterfaceBeginNewGame();
if(IsVisitApplicationBox) return;
Priem(CharToMas(Buf));
WndProc(Message);
//-------------------------отправка---------------------------------------------
void __fastcall TMainForm::IPXSend (char* Buf)
int rc;
rc = sendto(IPXSocket, Buf, strlen(Buf)+1, 0, (PSOCKADDR)&CallAddress, sizeof(SOCKADDR));
//-------------------------разрыв---------------------------------------------
void __fastcall TMainForm::IPXCloseConnection(void)
WSACleanup();
TCP.cpp
#include "TCPIP.h"
extern bool IsHostName;
extern AnsiString ServerHostName;
extern AnsiString ServerHostIP;
//----------Подключение---------------------------------------------------
Страницы: 1, 2, 3, 4