📄 unit1.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 + -