网络编程五子棋代码知识分享.docx

上传人:b****4 文档编号:4174002 上传时间:2022-11-28 格式:DOCX 页数:14 大小:16.61KB
下载 相关 举报
网络编程五子棋代码知识分享.docx_第1页
第1页 / 共14页
网络编程五子棋代码知识分享.docx_第2页
第2页 / 共14页
网络编程五子棋代码知识分享.docx_第3页
第3页 / 共14页
网络编程五子棋代码知识分享.docx_第4页
第4页 / 共14页
网络编程五子棋代码知识分享.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

网络编程五子棋代码知识分享.docx

《网络编程五子棋代码知识分享.docx》由会员分享,可在线阅读,更多相关《网络编程五子棋代码知识分享.docx(14页珍藏版)》请在冰豆网上搜索。

网络编程五子棋代码知识分享.docx

网络编程五子棋代码知识分享

 

网络编程五子棋代码

#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模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1