18.01.2015 Views

Untitled - Xakep Online

Untitled - Xakep Online

Untitled - Xakep Online

SHOW MORE
SHOW LESS

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);. Äàëåå îáúÿâëÿåòñÿ

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!