網路圍棋對弈軟體的設計中,現在要實作對弈雙方的客戶端上同步顯示落子的資訊。
圍棋棋盤為20*20的二維陣列,在棋盤上單機滑鼠就可以落子,現在需要把單機滑鼠的落子點的資訊傳遞給服務器后再由服務器轉給每一個客戶端。棋盤上落子的代碼如下:
//---------------------------------------------------------------------------
void __fastcall TfmMain::imgChessboardMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int Row,Col;
if(!GetPosition(X,Y)) return;
GetIndex(X,Y,Row,Col);
if(gChessboard[Row][Col]!=0)
return; //當前位置已有棋子
TryPlaceOneChess(Row,Col);
}
//---------------------------------------------------------------------------
void TryPlaceOneChess(int Row,int Col)
{
// char Flag='B';
int Result;
char *pStr;
// Flag=(gStepCount%2)?'W':'B';
Result=DM->HandlePlacedChess(Row,Col,gStepCount);
//回傳值 0:不可以入子;1:本身無氣,但可殺對方棋子;
//2:本身活且可殺對方棋子;3:雙方均無死子
pStr=NULL;
if(Result==0) pStr="當前位置不可入子";
else if(Result==4) pStr="劫殺,目前尚不能投子";
if(pStr!=NULL)
MessageBox(0,pStr,"",MB_OK|MB_TASKMODAL|MB_ICONSTOP);//不受理本次的投子
else PlaceOneChess(Row,Col,(Result==3)?false:true); //有效的投子,記錄有關資訊
}
//---------------------------------------------------------------------------
服務器已經建立完成,并且聊天功能已經實作,具體代碼如下:
//---------------------------------------------------------------------------
void SendNetInfo(TClientSocket *pSocket, String sInfo)
{
pSocket->Socket->SendText(sInfo);
}
//---------------------------------------------------------------------------
void __fastcall TfmMain::Button2Click(TObject *Sender)
{
String sInfo;
sInfo = edName->Text + "說:" + edTalk->Text;
SendNetInfo(ClientSocket1, sInfo);
edTalk->Text = "";
}
//edName是對弈者姓名,edTalk是打字框
當把對弈雙方的聊天內容顯示在聊天窗中是這么設計的,那么請問如何把每下一步棋的棋子位子顯示在棋盤上該如何設計?小弟是純純的菜,這是我的畢業設計,自己實在是弄不出來了,高手們幫我想想可以嗎,謝謝了!
uj5u.com熱心網友回復:
把存放棋子資料的陣列序列化后傳遞,客戶端接收后根據陣列重新布子,傳遞訊息部分你已經會了,傳遞序列化的陣列方法是一樣的uj5u.com熱心網友回復:
因為下子后有可能吃子,因此傳遞整個陣列比較的好轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/120982.html
標籤:基礎類
下一篇:創建動態庫
