1、网络编程五子棋代码知识分享网络编程五子棋代码#include #include #include #includeusing namespace std;/定义棋子类class piecechar color;int x,y;int win_probability;public : friend ostream& operator(ostream& os,const piece &object);friend class Board;int Chess(char c) color=c; return 0; piece& operator=(const piece c) color=c.colo
2、r; return *this; int set_coordinate(int i,int j)x=i;y=j;return 0;/棋子类的输入操作符ostream &operator(ostream& os,const piece &object) osobject.color;return os;/定义棋盘类class Board piece b1010;public: Board() for(int i=0;i!=10;i+)for(int j=0;j!=10;j+) if(i=0&j=0)piece a; a.Chess( );bij=a; else if(i=0&j!=0) piec
3、e a;a.Chess(j+0); bij=a; else if(j=0&i!=0)piece a;a.Chess(i+0);bij=a; else piece a;a.Chess(_);bij=a;int modify_color(const size_t &x,const size_t &y,const char &);/设置棋子类的颜色属性的函数 int Display_board();/输出当前棋盘状态的函数 bool Compare(const size_t x,const size_t y,const char &a);/比较坐标为x,y的棋子的color与参数a bool o_w
4、in(const char&);/判断o方是否获胜 bool x_win(const char&);/判断x放是否获胜 bool draw_game();/判断是否和棋;int Board:modify_color(const size_t &x,const size_t &y,const char &c)bxy.Chess(c);return 0;int Board:Display_board() for(int i=0;i!=10;i+) for(int j=0;j!=10;j+) coutbij.color;coutendl; return 0;bool Board:Compare(co
5、nst size_t x,const size_t y,const char &a)return bxy.color=a; bool Board:o_win(const char& a)int i,j; for(i=0;i10;i+) for(j=0;j6;j+)if(Compare(i,j,a)&Compare(i,j+1,a)&Compare(i,j+2,a)&Compare(i,j+3,a)&Compare(i,j+4,a) return 1;for(j=0;j10;j+) for(i=0;i6;i+) if(Compare(i,j,a)&Compare(i+1,j,a)&Compare
6、(i+2,j,a)&Compare(i+3,j,a)&Compare(i+4,j,a)return 1;for(i=0;i6;i+)for(j=0;j6;j+)if(Compare(i,j,a)&Compare(i+1,j+1,a)&Compare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a)return 1;for(i=0;i3;j-) if(Compare(i,j,a)&Compare(i+1,j-1,a)&Compare(i+2,j-2,a)&Compare(i+3,j-3,a)&Compare(i+4,j-4,a)return 1;r
7、eturn 0;bool Board:x_win(const char&a)int i,j;for(i=0;i10;i+)for(j=0;j6;j+)if(Compare(i,j,a)&Compare(i,j+1,a)&Compare(i,j+2,a)&Compare(i,j+3,a)&Compare(i,j+4,a)return 1;for(j=0;j10;j+)for(i=0;i6;i+)if(Compare(i,j,a)&Compare(i+1,j+1,a)&Compare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a)return 1;
8、 for(i=0;i6;i+)for(j=0;j6;j+) if(Compare(i,j,a)&Compare(i+1,j+1,a)&Compare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a)return 1;for(i=0;i3;j-)if(Compare(i,j,a)&Compare(i+1,j-1,a)&Compare(i+2,j-2,a)&Compare(i+3,j-3,a)&Compare(i+4,j-4,a)return 1; return 0;bool Board:draw_game() for(int i=0;i10;i+)
9、for(int j=0;j10;j+) if(Compare(i,j,_)return 0;return 1;int main() /加载套接字WORD wVersionRequested;WSADATA wsaData; int err;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if (err!=0)return 0;if (LOBYTE(wsaData.wVersion)!=1|HIBYTE(wsaData.wVersion)!=1)WSACleanup();return 0;SOC
10、KET sockSrv=socket(AF_INET,SOCK_STREAM,0);/创建监听的套接字SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/把主机字节顺序转换为TCP/IP网络字节顺序addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);/绑定套接字listen(sockSrv,5);/监听用户请求SOCKADDR_IN addrClient
11、;int len=sizeof(SOCKADDR);coutWelcome,The server is started!endlPlease waiting for Player to join.endl;SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);/等待用户请求到来 Board board;int x,y; const char x_t(x),o(o);coutBoard there are 9 lines of 9endl;board.Display_board();while(1)/确保客户端服务器交替下棋的死循
12、环while(1)/保证客户端下完棋才轮流服务器端下棋的死循环 char revBuf2=a;/给数组第一个元素赋值用于标记是否接收了数据,客户端会做限制,不可能发送过来字符a while(1)/等待接收客户端数据的死循环 recv(sockConn,revBuf,100,0);/接收数据 if(revBuf0!=a)/判断是否接收的了数据 coutReceive data.endl; break;x=revBuf0-0;y=revBuf1-0; board.modify_color(x,y,o);break; board.Display_board(); if(board.o_win(o)c
13、outCongratulations!O Wins!endl; break; while(1) coutxy; if(board.Compare(x,y,o)|board.Compare(x,y,x_t)coutinput being!9|y9|x=0|y=0) coutCross-border!endl; else char sendBuf2=x+0,y+0;board.modify_color(x,y,x_t);send(sockConn,sendBuf,100,0);coutSend data.endl; break; board.Display_board(); if(board.x_
14、win(x_t) coutCongratulations!X Wins!endl;break; if(board.draw_game() coutDrawn Game!endl; break; closesocket(sockConn);return 0;#include #include #includeusing namespace std;class piece/piece class char color;int x,y;int win_probability;public : friend ostream& operator(ostream& os,const piece &obje
15、ct);friend class Board;int Chess(char c)color=c; return 0; piece& operator=(const piece c)color=c.color;return *this;int set_coordinate(int i,int j)x=i;y=j;return 0;ostream &operator(ostream& os,const piece &object) osobject.color;return os;class Board/board class piece b1010;public: Board() for(int
16、 i=0;i!=10;i+)for(int j=0;j!=10;j+)if(i=0&j=0)piece a; a.Chess( );bij=a;else if(i=0&j!=0) piece a;a.Chess(j+0);bij=a; else if(j=0&i!=0) piece a;a.Chess(i+0);bij=a;else piece a; a.Chess(_);bij=a;int modify_color(const size_t &x,const size_t &y,const char &);int Display_board();bool Compare(const size
17、_t x,const size_t y,const char &a);bool o_win(const char&);/check o winsbool x_win(const char&);/check x wins bool draw_game();/check drawn game;int Board:modify_color(const size_t &x,const size_t &y,const char &c) bxy.Chess(c);return 0;int Board:Display_board() for(int i=0;i!=10;i+) for(int j=0;j!=
18、10;j+)coutbij.color; coutendl; return 0;bool Board:Compare(const size_t x,const size_t y,const char &a)return bxy.color=a;bool Board:o_win(const char& a) int i,j; for(i=0;i10;i+)for(j=0;j6;j+) if(Compare(i,j,a)&Compare(i,j+1,a)&Compare(i,j+2,a)&Compare(i,j+3,a)&Compare(i,j+4,a)return 1;for(j=0;j10;j
19、+) for(i=0;i6;i+)if(Compare(i,j,a)&Compare(i+1,j,a)&Compare(i+2,j,a)&Compare(i+3,j,a)&Compare(i+4,j,a)return 1;for(i=0;i6;i+)for(j=0;j6;j+)if(Compare(i,j,a)&Compare(i+1,j+1,a)&Compare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a)return 1;for(i=0;i3;j-)if(Compare(i,j,a)&Compare(i+1,j-1,a)&Compare(
20、i+2,j-2,a)&Compare(i+3,j-3,a)&Compare(i+4,j-4,a)return 1;return 0;bool Board:x_win(const char&a)int i,j;for(i=0;i10;i+) for(j=0;j6;j+) if(Compare(i,j,a)&Compare(i,j+1,a)&Compare(i,j+2,a)&Compare(i,j+3,a)&Compare(i,j+4,a)return 1; for(j=0;j10;j+)for(i=0;i6;i+) if(Compare(i,j,a)&Compare(i+1,j+1,a)&Com
21、pare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a)return 1;for(i=0;i6;i+) for(j=0;j6;j+) if(Compare(i,j,a)&Compare(i+1,j+1,a)&Compare(i+2,j+2,a)&Compare(i+3,j+3,a)&Compare(i+4,j+4,a) return 1; for(i=0;i3;j-) if(Compare(i,j,a)&Compare(i+1,j-1,a)&Compare(i+2,j-2,a)&Compare(i+3,j-3,a)&Compare(i+4,j-
22、4,a)return 1;return 0;bool Board:draw_game() for(int i=0;i10;i+)for(int j=0;j10;j+)if(Compare(i,j,_)return 0; return 1;int main()WORD wVersionRequested;/加载套接字WSADATA wsaData; int err;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,&wsaData);if (err!=0)return 0;if (LOBYTE(wsaData.wVe
23、rsion)!=1|HIBYTE(wsaData.wVersion)!=1)WSACleanup();return 0;SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);/创建套接字SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);/把U_LONG的主机字节顺序转换为TCP/IP网络字节顺序,/127.0.0.1是回送地址,指本机,一般用来测试使用addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);c
24、onnect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);/向服务器发送请求Board board; int x,y; const char x_t(x),o(o); coutBoard there are 9 lines of 9endl;board.Display_board(); while(1)/确保客户端服务器交替下棋的死循环while(1) coutxy;if(board.Compare(x,y,o)|board.Compare(x,y,x_t)coutinput being!9|y9|x=0|y=0)coutCross-bord
25、er!endl; else char sendBuf2=x+0,y+0; send(sockClient,sendBuf,100,0); board.modify_color(x,y,o);coutSend data.endl;break;board.Display_board();if(board.o_win(o) coutCongratulations!O Wins!endl; break;while(1)/保证客户端下完棋才轮流服务器端下棋的死循环 char revBuf2=a;/给数组第一个元素赋值用于标记是否接收了数据,客户端会做限制,不可能发送过来字符a coutPlease wa
26、itting.endl;while(1)/等待接收客户端数据的死循环 recv(sockClient,revBuf,100,0);/接收数据if(revBuf0!=a)/判断是否接收的了数据 coutReceive data.endl;break; x=revBuf0-0;y=revBuf1-0;board.modify_color(x,y,x_t);break; board.Display_board();if(board.x_win(x_t) coutCongratulations!X Wins!endl;break; if(board.draw_game() coutDrawn Game!endl; break; closesocket(sockClient);WSACleanup();return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1