网络编程五子棋代码知识分享.docx
- 文档编号:4174002
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:14
- 大小:16.61KB
网络编程五子棋代码知识分享.docx
《网络编程五子棋代码知识分享.docx》由会员分享,可在线阅读,更多相关《网络编程五子棋代码知识分享.docx(14页珍藏版)》请在冰豆网上搜索。
网络编程五子棋代码知识分享
网络编程五子棋代码
#include
#include
#include
#include
usingnamespacestd;
//定义棋子类
classpiece{
charcolor;
intx,y;
intwin_probability;
public:
friendostream&operator<<(ostream&os,constpiece&object);
friendclassBoard;
intChess(charc){
color=c;return0;
}
piece&operator=(constpiecec){
color=c.color;
return*this;
}
intset_coordinate(inti,intj){
x=i;
y=j;
return0;
}
};
//棋子类的输入操作符ostream&operator<<(ostream&os,constpiece&object){
os< returnos; } //定义棋盘类 classBoard{ pieceb[10][10]; public: Board(){ for(inti=0;i! =10;i++) for(intj=0;j! =10;j++) if(i==0&&j==0){ piecea;a.Chess(''); b[i][j]=a; } elseif(i==0&&j! =0){ piecea; a.Chess(j+'0'); b[i][j]=a; } elseif(j==0&&i! =0){ piecea; a.Chess(i+'0'); b[i][j]=a; } else{ piecea; a.Chess('_'); b[i][j]=a; } } intmodify_color(constsize_t&x,constsize_t&y,constchar&);//设置棋子类的颜色属性的函数 intDisplay_board();//输出当前棋盘状态的函数 boolCompare(constsize_tx,constsize_ty,constchar&a);//比较坐标为x,y的棋子的color与参数a boolo_win(constchar&);//判断o方是否获胜 boolx_win(constchar&);//判断x放是否获胜 booldraw_game();//判断是否和棋 }; intBoard: : modify_color(constsize_t&x,constsize_t&y,constchar&c){ b[x][y].Chess(c); return0; } intBoard: : Display_board(){ for(inti=0;i! =10;i++){ for(intj=0;j! =10;j++) cout< cout< } return0; } boolBoard: : Compare(constsize_tx,constsize_ty,constchar&a){ returnb[x][y].color==a; } boolBoard: : o_win(constchar&a){ inti,j; for(i=0;i<10;i++) for(j=0;j<6;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)) return1; for(j=0;j<10;j++) for(i=0;i<6;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)) return1; for(i=0;i<6;i++) for(j=0;j<6;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)) return1; for(i=0;i<6;i++) for(j=9;j>3;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)) return1; return0; } boolBoard: : x_win(constchar&a){ inti,j; for(i=0;i<10;i++) for(j=0;j<6;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)) return1; for(j=0;j<10;j++) for(i=0;i<6;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)) return1; for(i=0;i<6;i++) for(j=0;j<6;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)) return1; for(i=0;i<6;i++) for(j=9;j>3;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)) return1; return0; } boolBoard: : draw_game(){ for(inti=0;i<10;i++) for(intj=0;j<10;j++){ if(Compare(i,j,'_')) return0; } return1; } intmain(){//加载套接字 WORDwVersionRequested; WSADATAwsaData; interr; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if(err! =0){ return0; } if(LOBYTE(wsaData.wVersion)! =1||HIBYTE(wsaData.wVersion)! =1){ WSACleanup(); return0; } SOCKETsockSrv=socket(AF_INET,SOCK_STREAM,0);//创建监听的套接字 SOCKADDR_INaddrSrv; 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_INaddrClient; intlen=sizeof(SOCKADDR); cout<<"Welcome,Theserverisstarted! "< SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//等待用户请求到来Boardboard; intx,y;constcharx_t('x'),o('o'); cout<<"Boardthereare9linesof9"< board.Display_board(); while (1){//确保客户端服务器交替下棋的死循环 while (1){//保证客户端下完棋才轮流服务器端下棋的死循环 charrevBuf[2]={'a'};//给数组第一个元素赋值用于标记是否接收了数据,客户端会做限制,不可能发送过来字符'a' while (1){//等待接收客户端数据的死循环 recv(sockConn,revBuf,100,0);//接收数据 if(revBuf[0]! ='a'){//判断是否接收的了数据 cout<<"Receivedata..."< } } x=revBuf[0]-'0'; y=revBuf[1]-'0'; board.modify_color(x,y,o); break; } board.Display_board(); if(board.o_win(o)){ cout<<"Congratulations! OWins! "< } while (1){ cout<<"Pleaseenterthecoordinatesofx: "; cin>>x>>y; if(board.Compare(x,y,o)||board.Compare(x,y,x_t)) cout<<"inputbeing! "< if(x>9||y>9||x==0||y==0) cout<<"Cross-border! ! ! "< else{ charsendBuf[2]={x+'0',y+'0'}; board.modify_color(x,y,x_t); send(sockConn,sendBuf,100,0); cout<<"Senddata..."< } } board.Display_board(); if(board.x_win(x_t)){ cout<<"Congratulations! XWins! "< break; } if(board.draw_game()){ cout<<"DrawnGame! "< } } closesocket(sockConn); return0; } #include #include #include usingnamespacestd; classpiece{//piececlass charcolor; intx,y; intwin_probability; public: friendostream&operator<<(ostream&os,constpiece&object); friendclassBoard; intChess(charc){ color=c;return0; } piece&operator=(constpiecec){ color=c.color; return*this; } intset_coordinate(inti,intj){ x=i; y=j; return0; } }; ostream&operator<<(ostream&os,constpiece&object){ os< returnos; } classBoard{//boardclass pieceb[10][10]; public: Board(){ for(inti=0;i! =10;i++) for(intj=0;j! =10;j++) if(i==0&&j==0){ piecea; a.Chess(''); b[i][j]=a; } elseif(i==0&&j! =0){ piecea; a.Chess(j+'0'); b[i][j]=a; } elseif(j==0&&i! =0){ piecea; a.Chess(i+'0'); b[i][j]=a; } else{ piecea; a.Chess('_'); b[i][j]=a; } } intmodify_color(constsize_t&x,constsize_t&y,constchar&); intDisplay_board(); boolCompare(constsize_tx,constsize_ty,constchar&a); boolo_win(constchar&);//checkowins boolx_win(constchar&);//checkxwins booldraw_game();//checkdrawngame }; intBoard: : modify_color(constsize_t&x,constsize_t&y,constchar&c){ b[x][y].Chess(c); return0; } intBoard: : Display_board(){ for(inti=0;i! =10;i++){ for(intj=0;j! =10;j++) cout< cout< } return0; } boolBoard: : Compare(constsize_tx,constsize_ty,constchar&a){ returnb[x][y].color==a; } boolBoard: : o_win(constchar&a){ inti,j; for(i=0;i<10;i++) for(j=0;j<6;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)) return1; for(j=0;j<10;j++) for(i=0;i<6;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)) return1; for(i=0;i<6;i++) for(j=0;j<6;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)) return1; for(i=0;i<6;i++) for(j=9;j>3;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)) return1; return0; } boolBoard: : x_win(constchar&a){ inti,j; for(i=0;i<10;i++) for(j=0;j<6;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)) return1; for(j=0;j<10;j++) for(i=0;i<6;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)) return1; for(i=0;i<6;i++) for(j=0;j<6;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)) return1; for(i=0;i<6;i++) for(j=9;j>3;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)) return1; return0; } boolBoard: : draw_game(){ for(inti=0;i<10;i++) for(intj=0;j<10;j++){ if(Compare(i,j,'_')) return0; } return1; } intmain(){ WORDwVersionRequested;//加载套接字 WSADATAwsaData;interr; wVersionRequested=MAKEWORD(1,1); err=WSAStartup(wVersionRequested,&wsaData); if(err! =0){ return0; } if(LOBYTE(wsaData.wVersion)! =1||HIBYTE(wsaData.wVersion)! =1){ WSACleanup(); return0; } SOCKETsockClient=socket(AF_INET,SOCK_STREAM,0);//创建套接字 SOCKADDR_INaddrSrv; 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); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//向服务器发送请求 Boardboard; intx,y; constcharx_t('x'),o('o'); cout<<"Boardthereare9linesof9"< board.Display_board(); while (1){//确保客户端服务器交替下棋的死循环 while (1){ cout<<"Pleaseenterthecoordinatesofo: "; cin>>x>>y; if(board.Compare(x,y,o)||board.Compare(x,y,x_t)) cout<<"inputbeing! "< if(x>9||y>9||x==0||y==0) cout<<"Cross-border! ! ! "< else{ charsendBuf[2]={x+'0',y+'0' }; send(sockClient,sendBuf,100,0); board.modify_color(x,y,o); cout<<"Senddata..."< break; } } board.Display_board(); if(board.o_win(o)){cout<<"Congratulations! OWins! "< } while (1){//保证客户端下完棋才轮流服务器端下棋的死循环 charrevBuf[2]={'a'};//给数组第一个元素赋值用于标记是否接收了数据,客户端会做限制,不可能发送过来字符'a' cout<<"Pleasewaitting..."< while (1){//等待接收客户端数据的死循环 recv(sockClient,revBuf,100,0);//接收数据 if(revBuf[0]! ='a'){//判断是否接收的了数据 cout<<"Receivedata..."< break; } } x=revBuf[0]-'0'; y=revBuf[1]-'0'; board.modify_color(x,y,x_t); break; } board.Display_board(); if(board.x_win(x_t)){ cout<<"Congratulations! XWins! "< break; } if(board.draw_game()){ cout<<"DrawnGame! "< } } closesocket(sockClient); WSACleanup(); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 五子棋 代码 知识 分享