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