最新网络编程五子棋代码.docx
《最新网络编程五子棋代码.docx》由会员分享,可在线阅读,更多相关《最新网络编程五子棋代码.docx(15页珍藏版)》请在冰豆网上搜索。
![最新网络编程五子棋代码.docx](https://file1.bdocx.com/fileroot1/2023-1/7/8fc0f55b-bde8-4252-b1dd-b7c1071864d6/8fc0f55b-bde8-4252-b1dd-b7c1071864d61.gif)
最新网络编程五子棋代码
#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;
九十二、}基本原理介绍
红外触摸屏的工作原理是在触摸屏的四周布满红外接收管和红外发射管,这些红外管在触摸屏表面呈一