实现网络对战的五子棋游戏
基本逻辑
玩家A |
玩家B |
下棋(x,y) |
等待A玩家发送新坐标 |
发送(x,y) |
等待A玩家发送新坐标 |
等待B玩家发送新坐标 |
接收玩家A(x,y) |
等待B玩家发送新坐标 |
下棋(x,y) |
接受玩家B 下棋坐标 |
发送(x,y) |
利用标志位变换来判断接收还是发送
if(pop%2 == 0)
{
char buf[4096] = {
};
int ret = read(cli_fd,buf,sizeof(buf));
i = buf[0]-48;
j = buf[2]-48;
if(ret <= 0 || 0 == strcmp(buf,"-1,-1"))
{
printf("玩家A 取消游戏!\n");
exit(0);
}
printf("recv:%s len:%d\n",buf,ret);
printf("等待玩家A落子......\n");
}
if(pop%2 ==1)
{
printf("请玩家B输入棋子位置: ");
scanf("%d,%d",&i,&j);
char buf[4096] = {
};
sprintf(buf,"%d,%d",i,j);
int ret = write(cli_fd,buf,strlen(buf)+1);
if(ret <= 0 || 0 == strcmp(buf,"-1,-1"))
{
printf("玩家B 取消游戏!\n");
exit(0);
}
}
pop++;
printf("玩家A的 i:%d j:%d\n",i,j);
if(i<1 || i >10 || j<1 || j>10)
{
printf("输入的位置超出了棋盘的范围,请重新输入!\n");
pop--;
continue;
}
if((2 != qipan[i-1][j-1]))
{
printf("提示:该位置已经有棋子了!\n");
fflush(stdin);
pop--;
continue;
}
TCPC.C
#include <stdio.h>
#include <network.h>
#include <string.h>
#include <stdlib.h>
void five(NetWork* nw)
{
int i,j;
int qipan[10][10];
int color=0;
int iTemp = 0,jTemp = 0,countTemp = 0;
int colorFlag = 0;
char op;
int pop = 0;
again:
for(i=0;i<10;i++)
for(j=0;j<10;j++)
qipan[i][j]=2;
while(1)
{
if(pop%2 == 0)
{
printf("请玩家A输入棋子位置: ");
scanf("%d,%d",&i,&j);
char buf[4096] = {
};
sprintf(buf,"%d,%d",i,j);
int ret = send_nw(nw,buf,strlen(buf)+1);
if(ret <= 0 || 0 == strcmp(buf,"-1,-1"))
{
printf("玩家A 取消游戏!\n");
exit(0);
}
printf("等待玩家B落子......\n");
}
if(pop%2 ==1)
{
char buf[4096] = {
};
int ret = recv_nw(nw,buf,sizeof(buf));
i = buf[0]-48;
j = buf[2]-48;
if(ret <= 0 || 0 == strcmp(buf,"-1,-1"))
{
printf("玩家B 取消游戏!\n");
exit(0);
}
printf("recv:%s len:%d\n",buf,ret);
}
pop++;
if(i<1 || i >10 || j<1 || j>10)
{
printf("输入的位置超出了棋盘的范围,请重新输入!\n");
pop--;
continue;
}
if((2 != qipan[i-1][j-1]))
{
printf("提示:该位置已经有棋子了!\n");
fflush(stdin);
pop--;
continue;
}
color=(color+1)%2;
qipan[i-1][j-1]=color;
for(i=1;i<=10;i++)
{
if(i==1)
{
if(qipan[i-1][0]==1)
printf("● ");
if(qipan[i-1][0]==0)
printf("○ ");
if(qipan[i-1][0]==2)
printf("┌ ");
for(j=2;j<=9;j++)
{