You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ÊÎÄÈÍÃ<br />
C/C++<br />
ÕÀÊÅÐ/¹01(61)/2004<br />
Èíòåðåñíîé äîáàâêîé<br />
ê èãðå áóäåò<br />
âîçìîæíîñòü<br />
ìåíÿòü ðàçìåðíîñòü<br />
ïîëÿ, à òàêæå<br />
êîëè÷åñòâî ïîñòàâëåííûõ<br />
êðåñòèêîâ<br />
èëè íîëèêîâ â ðÿä<br />
äëÿ ïîáåäû.<br />
92<br />
Ïðîåêò ñ íàøèìè êëàññàìè<br />
ÏÐÎÒÎÊÎË ÄÀÍÍÛÕ<br />
Ïåðâûì äåëîì â èãðå ñòîèò ïîìåíÿòü ïðîòîêîë ïåðåäà÷è äàííûõ.<br />
Îí, ìÿãêî ãîâîðÿ, êîðÿâåíüêèé. Äîáàâü â íåãî àâòîðèçàöèþ,<br />
ïåðåäà÷ó èíôîðìàöèè î íà÷àëå ïàðòèè, åå êîíöå. Ñäåëàé<br />
ïðîâåðêó êîîðäèíàò íîâîãî õîäà. Ïðèêðóòè âîçìîæíîñòü ìåíÿòü<br />
ïîðò äëÿ ñîåäèíåíèÿ.  îáùåì, ðàáîòû çäåñü íåïî÷àòûé êðàé.<br />
Òåïåðü íåìíîãî ïîìåíÿé ñàì êîíñòðóêòîð<br />
êëàññà. Ó òåáÿ îí äîëæåí ïîëó÷èòüñÿ âîò òàêèì:<br />
CServerSocket(CxoDlg* pDlg);<br />
Íà ýòîì â õåäåðíûì ôàéëå èçìåíåíèÿ çàêîí÷åíû.<br />
Áóäåì êîððåêòèðîâàòü<br />
ServerSocket.cpp. Îòêðûâàé åãî è íàéäè â<br />
íåì êîíñòðóêòîð êëàññà. Ïðèâåäè åãî ê ñëåäóþùåìó<br />
âèäó:<br />
CServerSocket::CServerSocket(CxoDlg* pDlg)<br />
{<br />
m_pDlg = pDlg;<br />
}<br />
Âñå. Ýòîé ñòðîêîé ìû ñâÿçàëè íàø ñåðâåðíûé<br />
ñîêåò ñ äèàëîãîâûì îêíîì. Îñòàëîñü<br />
òîëüêî äîáàâèòü ñîáûòèå äëÿ âõîäÿùèõ ñîåäèíåíèé.<br />
Äëÿ ýòîãî ïðîïèøè â ìåòîä<br />
OnAccept òàêîé âîò êîä:<br />
void CServerSocket::OnAccept(int nErrorCode)<br />
{<br />
// TODO: Add your specialized code here and/or call the base<br />
class<br />
CSocket::OnAccept(nErrorCode);<br />
m_pDlg->NewConnect();<br />
}<br />
Òåïåðü ïðè íîâîì ñîåäèíåíèè âûçîâåòñÿ<br />
ìåòîä OnAccept. Â íåì ïðîèçîéäåò ñîãëàñèå<br />
íà âõîäÿùèé êîííåêò, ïîñëå ÷åãî ïðè ïîìîùè<br />
m_pDlg->NewConnect(); óïðàâëåíèå ïåðåäàñòñÿ<br />
äèàëîãîâîìó îêíó.<br />
Ïîñëå ñîçäàíèÿ ñåðâåðíîãî ñîêåòà ïåðåéäåì<br />
ê ðåàëèçàöèè êëèåíòñêîé ÷àñòè. Äëÿ íà-<br />
÷àëà ñîçäàâàé íîâûé êëàññ CClientSocket íà<br />
îñíîâå òîãî æå CSocket. Â õåäåðíèêàõ íîâîãî<br />
êëàññà äîáàâü îáúÿâëåíèå êëàññà ÑxoDlg.<br />
Äàëåå èçìåíè êîíñòðóêòîð êëàññà. Ïîìåíÿé<br />
ïóñòîé CClientSocket(); íà<br />
CClientSocket(CxoDlg* pDlg);. À â .cpp ôàéëå<br />
ïðîïèøè ñëåäóþùèå ñòðîêè:<br />
CClientSocket::CClientSocket(CxoDlg* pDlg)<br />
{<br />
m_pDlg = pDlg;<br />
}<br />
Çäåñü, êàê è â ñëó÷àå ñ CServerSocket, ïðè<br />
ñîçäàíèè íîâîãî îáúåêòà áóäåò ïåðåäàâàòüñÿ<br />
ññûëêà íà äèàëîãîâîå îêíî (â ìîåì ñëó÷àå<br />
ýòî êëàññ CxoDlg).<br />
ÏÅÐÅÄÀ×À ÄÀÍÍÛÕ<br />
Íàøå ïðèëîæåíèå ìîæåò âûñòóïàòü êàê â ðîëè<br />
ñåðâåðà, òàê è â ðîëè êëèåíòà. Ñåðâåðíàÿ<br />
÷àñòü çàïóñêàåòñÿ ïî íàæàòèþ êëàâèøè<br />
Create server. Ïîñëå åå êëèêà âûïîëíÿåòñÿ<br />
ñîáûòèå OnBnClickedCreate, ãäå ñîçäàåòñÿ<br />
ñåðâåðíûé ñîêåò. Âîò êàê âûãëÿäèò ýòîò êîä:<br />
void CxoDlg::OnBnClickedCreate()<br />
{<br />
m_pSocket = new CServerSocket(this);<br />
m_pSocket->Create(m_port);<br />
m_pSocket->Listen();<br />
}<br />
 m_port, êàê íåòðóäíî äîãàäàòüñÿ, õðàíèòñÿ<br />
çíà÷åíèå ïîðòà. Ïî óìîë÷àíèþ ýòî<br />
ïîðò 2345. Ñàìî çíà÷åíèå m_port ïðîïèñàíî<br />
êàê êîíñòàíòà. Òàê ÷òî, åñëè òû çàõî÷åøü<br />
ñäåëàòü ýòîò ïàðàìåòð äèíàìè÷íûì, òî äîáàâü<br />
íà ôîðìå åùå îäíî ïîëå Edit è ñâÿæè<br />
åãî ñ ýòîé ïåðåìåííîé (òîëüêî íå çàáóäü óáðàòü<br />
ñ íåå ñòàòóñ êîíñòàíòû).<br />
Äàëåå, åñëè ïðîèçîéäåò ñîåäèíåíèå, òî<br />
âûçîâåòñÿ ìåòîä NewConnect, â êîòîðîì<br />
ïðîïèñàíû íåêîòîðûå íà÷àëüíûå äàííûå äëÿ<br />
íîâîé ïàðòèè â êðåñòèêè-íîëèêè:<br />
void CxoDlg::NewConnect(void)<br />
{<br />
pSocket = new CClientSocket(this);<br />
m_pSocket->Accept(*pSocket);<br />
m_type = 1;<br />
m_turn = 1;<br />
m_connected = 1;<br />
}<br />
 ïåðåìåííîé m_type ïðîïèñûâàåòñÿ òèï<br />
èãðîêà. Ò.å. ÷åì îí áóäåò èãðàòü – êðåñòèêàìè<br />
èëè íîëèêàìè. Îäèí îáîçíà÷àåò, ÷òî ýòî<br />
êðåñòèê, äâîéêà – íîëèê. Â m_turn îòîáðàæàåòñÿ<br />
ñîñòîÿíèå õîäà. Åñëè ýòî 1, òî õîä<br />
òâîé, 0 – ïðîòèâíèêà. Ñîîòâåòñòâåííî, ñ<br />
êàæäûì õîäîì ýòî çíà÷åíèå áóäåò çàìåíÿòüñÿ<br />
ïðîòèâîïîëîæíûì.<br />
Òåïåðü î çàïóñêå êëèåíòñêîé ÷àñòè. Ïðè<br />
íàæàòèè áàòîíà Connect çàïóñêàåòñÿ ìåòîä<br />
OnBnClickedButtonConnect. Â íåì ïðîèñõîäèò<br />
îáíîâëåíèå äàííûõ â ôîðìå ïðè ïîìîùè<br />
UpdateData (true);. Äàëåå îáúÿâëÿåòñÿ