先说思路
1,输出图像
先用15x15的二维数组来模拟棋盘并且靠遍历循环输出棋盘图像,并初始化为0。之后靠time变量的正负来判断该由哪位玩家输入,之后让玩家一输入点位的X,Y值,将对应的棋子位置的数组元素变为1,玩家二输入的地点变成另一个值,2,3,4...都可以,不能和玩家一一样。之后遍历输出时,为零的输出“+”,为1的输出“O”,为二的输出“X”;这样子就可以区分输入了。
2,判定输赢
判定输赢的条件有四个:
1.左斜着连五个
2.右斜着连五个
3.水平
4 竖直
相应的,这个也需要遍历语句和IF语句进行判别。遍历就不说了,看代码就行。IF语句涉及到算法,
首先看向左斜着连5个的,那如果向左斜着连5个,那么就意味着如果选一个最左边的数作为起始点,那么向右每一个斜着连着的旗子,它的Y值都要加以X值也要加以,所以最左边的这个棋子,它的最大值不能大于15-5再减1,也就是9。
同理,向右斜着的5个棋子,他最右面的棋子,最小X值不能小于4。
竖着连着的棋子,最上面棋子Y值的不能小于9。
水平连着的棋子,最左边的棋子的X值最大不能超过九。
这个就是最主要需要注意的点之后,通过先判断棋子的X值,Y值是否符合范围之后,在相应的范围里进行判定是否胜利,如果胜利则跳到开头,并且加上胜利的输出语句,如果并没有胜利,那么就开始新的轮回。
代码
#include<stdio.h>
int main()
{
int cb[15][15];
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
cb[i][j]=0;
}
}
int time=1,x=0,y=0,z=0,w=0;
five:
first: if(time>0)
{
printf("玩家一请输入落子的行与列;(形式:(y,x))\n");
scanf("%d,%d",&x,&y);
if(x>14||y>14)
{
printf("您输入错误!请重新输入!");
goto first;
}
time*=-1;
cb[x][y]=1;
}
else
{
printf("玩家二请输入落子的行与列;(形式:(y,x))\n");
scanf("%d,%d",&z,&w);
if(z>14||w>14)
{
printf("您输入错误!请重新输入!");
goto first;
}
time*=-1;
cb[z][w]=2;
}
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
{
if(cb[i][j]==0)
{
printf("+ ");
}
if(cb[i][j]==1)
{
printf("O ");
}
if(cb[i][j]==2)
{
printf("X ");
}
}
printf("\n");
}
//判定胜负:1,左斜着连。2,右斜着连。3,水平。4,竖直。
int wxy=0;
for(int cpx=0;cpx<15;cpx++)
{
for(int cpy=0;cpy<15;cpy++)
{
if(cpx<=10&&cpy<=10)
{
if(cb[cpx][cpy]==1&&cb[cpx+1][cpy+1]==1&&cb[cpx+2][cpy+2]==1&&cb[cpx+3][cpy+3]==1&&cb[cpx+4][cpy+4]==1)
{
printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
if(cb[cpx][cpy]==2&&cb[cpx+1][cpy+1]==2&&cb[cpx+2][cpy+2]==2&&cb[cpx+3][cpy+3]==2&&cb[cpx+4][cpy+4]==2)
{
printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
}
if(cpx>=4&&cpy<=10)
{
if(cb[cpx][cpy]==1&&cb[cpx+1][cpy-1]==1&&cb[cpx+2][cpy-2]==1&&cb[cpx+3][cpy-3]==1&&cb[cpx+4][cpy-4]==1)
{
printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
if(cb[cpx][cpy]==2&&cb[cpx+1][cpy-1]==2&&cb[cpx+2][cpy-2]==2&&cb[cpx+3][cpy-3]==2&&cb[cpx+4][cpy-4]==2)
{
printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
}
if(cpx<=10)
{
if(cb[cpx][cpy]==1&&cb[cpx+1][cpy]==1&&cb[cpx+2][cpy]==1&&cb[cpx+3][cpy]==1&&cb[cpx+4][cpy]==1)
{
printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
if(cb[cpx][cpy]==2&&cb[cpx+1][cpy]==2&&cb[cpx+2][cpy]==2&&cb[cpx+3][cpy]==2&&cb[cpx+4][cpy]==2)
{
printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
}
if(cpy<=10)
{
if(cb[cpx][cpy]==1&&cb[cpx][cpy+1]==1&&cb[cpx][cpy+2]==1&&cb[cpx][cpy+3]==1&&cb[cpx][cpy+4]==1)
{
printf("恭喜玩家一胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
if(cb[cpx][cpy]==2&&cb[cpx][cpy+1]==2&&cb[cpx][cpy+2]==2&&cb[cpx][cpy+3]==2&&cb[cpx][cpy+4]==2)
{
printf("恭喜玩家二胜利!是否要再对战一局?\n 如果是,请输入 1,如果不是,请输入 2 。\n");
scanf("%d",&wxy);
if(wxy==1)
{
goto five;
}
else
{
goto four;
}
}
}
}
}
goto first;
four: return 0;
}