⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.cpp

📁 关于书籍《Borland c++Builder工程实践》的源代码
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "string.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
        while(!InputQuery("欢迎进入", "请输入你的昵称:", mName)||Name=="");
        Label2->Caption=mName;
        StatusBar1->Panels->Items[1]->Text = "欢迎"+mName+"!";
        OpenDialog1->Filter = GraphicFilter(__classid(TGraphic));
        initialize();
        WaitItemClick(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ImageMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{

     int xx=X/20;
     int yy=Y/20;
     if (canPut&&Button==mbLeft){
          if (State[xx][yy]==sNone){
               State[xx][yy]=mColor;
               DisplayChess(xx,yy,1);
               Send[0]='P';Send[1]=xx;
               Send[2]=yy;Send[3]='\0';
               if (IsServer)
                    ServerSocket1->Socket->Connections[0]->SendText(AnsiString(Send));
               else
                    ClientSocket1->Socket->SendText(AnsiString(Send));
               canPut=false;
               stepNum++;
               Label7->Caption=IntToStr(stepNum);
               if (Check(mColor)){
                    MessageBox(Handle,("恭喜你,"+mName+",你赢了!").c_str(),"胜出",MB_OK);
                    MessageBox(Handle,"请再接再厉!",
                         "重新来过",MB_OK);
                    initialize();
                    if (mColor==sBlack)  canPut=true;
               }
          }
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ExitClick(TObject *Sender)
{
     if(MessageBox(Handle,"您真的要休息了吗?",
        "退出",MB_OKCANCEL|MB_ICONQUESTION)==IDOK){
                Close();
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::WaitItemClick(TObject *Sender)
{
     WaitItem->Checked = !WaitItem->Checked;
     if (WaitItem->Checked)
     {
          ClientSocket1->Active = false;
          ServerSocket1->Active = true;
          StatusBar1->Panels->Items[0]->Text = "Waiting...";
     }
     else{
          if (ServerSocket1->Active)
               ServerSocket1->Active = false;
          StatusBar1->Panels->Items[0]->Text = "";
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ConnectItemClick(TObject *Sender)
{
        if (ClientSocket1->Active)
                ClientSocket1->Active = false;
        if (InputQuery("我的计算机连接到...", "连接地址:", Server))
        {
                if (Server.Length() > 0)
                {
                        ClientSocket1->Host = Server;
                        ClientSocket1->Active = true;
                }
        }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
     StatusBar1->Panels->Items[0]->Text = "成功连到:" + Socket->RemoteHost;
     Image1->Picture->LoadFromFile("white.bmp");
     Image2->Picture->LoadFromFile("black.bmp");
     Send[0]='N';strcpy(&Send[1],mName.c_str());
     ClientSocket1->Socket->SendText(AnsiString(Send));
     canPut=false;
     mColor=sWhite;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Disconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
     StatusBar1->Panels->Items[1]->Text = yName+"已经掉线了。";
     WaitItem->Checked=!WaitItem->Checked;
     WaitItemClick(NULL);
     canPut=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
     strcpy(Receive,Socket->ReceiveText().c_str());
     switch (Receive[0]){
     case 'N'://new freid
          yName=AnsiString(&Receive[1]);
          Label4->Caption=yName;
          break;
     case 'C'://chat message
          Memo1->Lines->Add("["+yName+"]");
          Memo1->Lines->Add(AnsiString(&Receive[1]));
          break;
     case 'P'://play chess
          State[Receive[1]][Receive[2]]=sBlack;
          canPut=true;
          DisplayChess(Receive[1],Receive[2],2);
          stepNum++;
          Label7->Caption=IntToStr(stepNum);
          if (Check(sBlack)){
               MessageBox(Handle,("真抱歉,"+mName+",你输了!").c_str(),
                    "败北",MB_OK);
               MessageBox(Handle,"请重新来过!",
                    "重新来过",MB_OK);
               initialize();
               canPut=false;
          }
          break;
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1Accept(TObject *Sender,
      TCustomWinSocket *Socket)
{
     IsServer = true;
     StatusBar1->Panels->Items[0]->Text = "成功连到: " + Socket->RemoteAddress;
     Image1->Picture->LoadFromFile("black.bmp");
     Image2->Picture->LoadFromFile("white.bmp");
     Send[0]='N';strcpy(&Send[1],mName.c_str());
     ServerSocket1->Socket->Connections[0]->SendText(AnsiString(Send));
     canPut=true;
     mColor=sBlack;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
     strcpy(Receive,Socket->ReceiveText().c_str());
     switch (Receive[0]){
     case 'N'://new freid
          yName=AnsiString(&Receive[1]);
          Label4->Caption=yName;
          break;
     case 'C'://chat message
          Memo1->Lines->Add("["+yName+"]");
          Memo1->Lines->Add(AnsiString(&Receive[1]));
          break;
     case 'P'://play chess
          State[Receive[1]][Receive[2]]=sWhite;
          canPut=true;
          DisplayChess(Receive[1],Receive[2],2);
          stepNum++;
          Label7->Caption=IntToStr(stepNum);
          if (Check(sWhite)){
               MessageBox(Handle,("真遗憾,"+mName+",你输了!").c_str(),
                    "败北",MB_OK);
               MessageBox(Handle,"请重新来过!",
                    "重新来过",MB_OK);
                    initialize();
                    canPut=true;
               }
          break;
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ServerSocket1ClientDisconnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
     ServerSocket1->Active = false;
     WaitItemClick(NULL);
     canPut=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DisconnectClick(TObject *Sender)
{
        ClientSocket1->Close();
        WaitItemClick(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ToolButton1Click(TObject *Sender)
{
        Send[0]='C';
        strcpy(&Send[1],Edit1->Text.c_str());
        if (IsServer){
                ServerSocket1->Socket->Connections[0]->SendText(AnsiString(Send));
        }
        else{
                ClientSocket1->Socket->SendText(AnsiString(Send));
        }
        Memo1->Lines->Add("["+mName+"]");
        Memo1->Lines->Add(Edit1->Text);
        Edit1->Text=EmptyStr;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
        if (Key==VK_RETURN)
                ToolButton1Click(NULL);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DisplayChess(int xx, int yy,int flag)
{
     if (flag==1)
          Image->Canvas->Draw(xx*20,yy*20,Image1->Picture->Graphic);
     else
          Image->Canvas->Draw(xx*20,yy*20,Image2->Picture->Graphic);
}
//---------------------------------------------------------------------------
bool __fastcall TMainForm::Check(TState flag)
{
     for (int i=0;i<19;i++)
          for (int j=0;j<19;j++){
               if(State[i][j]==flag){
               if (i<15){
                    if (State[i][j]==flag&&State[i+1][j]==flag&&
                        State[i+2][j]==flag&&State[i+3][j]==flag&&
                        State[i+4][j]==flag)
                        return true;
               }
               if (j<15){
                    if (State[i][j]==flag&&State[i][j+1]==flag&&
                        State[i][j+2]==flag&&State[i][j+3]==flag&&
                        State[i][j+4]==flag)
                        return true;
               }
               if (j<15&&i<15){
                    if (State[i][j]==flag&&State[i+1][j+1]==flag&&
                        State[i+2][j+2]==flag&&State[i+3][j+3]==flag&&
                        State[i+4][j+4]==flag)
                        return true;
               }
               if (j<15&&i>=4){
                    if (State[i][j]==flag&&State[i-1][j+1]==flag&&
                        State[i-2][j+2]==flag&&State[i-3][j+3]==flag&&
                        State[i-4][j+4]==flag)
                        return true;
               }
          }
     }
     return false;
}

//---------------------------------------------------------------------------
void __fastcall TMainForm::initialize()
{
     Image->Picture->Graphic=NULL;
     canPut=false;
     stepNum=0;
     Label7->Caption=IntToStr(stepNum);
     Image->Height=BKImage->Height;
     Image->Width=BKImage->Width;
     DrawLines();
     for (int i=0;i<19;i++)
          for (int j=0;j<19;j++)
               State[i][j]=sNone;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DrawLines()
{
     Image->Canvas->Pen->Width=1;
     Image->Canvas->Pen->Color=RGB(2,255,53);

     for (int i=0;i<19;i++){
          Image->Canvas->MoveTo(14+i*20,14);
          Image->Canvas->LineTo(14+i*20,374);
          Image->Canvas->MoveTo(14,14+i*20);
          Image->Canvas->LineTo(374,14+i*20);
     }
     Image->Canvas->MoveTo(7,7);
     Image->Canvas->LineTo(381,7);
     Image->Canvas->LineTo(381,381);
     Image->Canvas->LineTo(7,381);
     Image->Canvas->LineTo(7,7);
     Image->Canvas->Pen->Width=2;
     Image->Canvas->MoveTo(10,10);
     Image->Canvas->LineTo(378,10);
     Image->Canvas->LineTo(378,378);
     Image->Canvas->LineTo(10,378);
     Image->Canvas->LineTo(10,10);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ToolButton5Click(TObject *Sender)
{
     if(ColorDialog1->Execute()){
          Image->Canvas->Pen->Color=ColorDialog1->Color;
          DrawLines();
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ToolButton6Click(TObject *Sender)
{
     OpenDialog1->Title="选择背景图案";
     if(OpenDialog1->Execute()){
          BKImage->Picture->LoadFromFile(
               OpenDialog1->FileName);
     }
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::A1Click(TObject *Sender)
{
     AboutBox->Show();
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -