练习编程,五子棋,写了个判断是否赢得棋局的算法,大家看看对不对,有什么改进的还没运行,不知道有错没,待会看结果
//每次落子后判断是否赢得棋局
public boolean isWin(int x,int y,char cc)
{
//棋手输入的坐标为1-15,转换0-14
int xPos = x - 1;
int yPos = y - 1;
//横向检测
int x1 = 0;
for(int i = 1;i < 5;i++)
{
//超出棋盘
if((xPos - i) < 0)
{
//结束左横向检测
break;
}
//统计相同棋子数
if(board[xPos - i][yPos] == cc)
{
x1++;
}
}
for(int i = 1;i < 5-x1 ;i++)
{
//超出棋盘
if(xPos + i > 14)
{
//结束右横向检测
break;
}
if(board[xPos + i][yPos] == cc)
{
x1++;
}
}
if(x1 >= 4)
{
return true;
}
//纵向检测
int x2 = 0;
for(int i = 1;i < 5;i++)
{
//超出棋盘
if((yPos - i) < 0)
{
//结束上纵向检测
break;
}
//统计相同棋子数
if(board[xPos][yPos - i] == cc)
{
x2++;
}
}
for(int i = 1;i < 5-x2 ;i++)
{
//超出棋盘
if(yPos + i > 14)
{
//结束下纵向检测
break;
}
if(board[xPos][yPos + i] == cc)
{
x2++;
}
}
if(x2 >= 4)
{
return true;
}
//斜下检测
int x3 = 0;
for(int i = 1;i < 5;i++)
{
//超出棋盘
if((xPos - i) < 0 || (yPos - i) < 0)
{
//结束上斜下向检测
break;
}
//统计相同棋子数
if(board[xPos - i][yPos - i] == cc)
{
x3++;
}
}
for(int i = 1;i < 5-x3;i++)
{
//超出棋盘
if(xPos + i > 14 || (yPos + i) > 14)
{
//结束下斜下向检测
break;
}
if(board[xPos + i][yPos + i] == cc)
{
x3++;
}
}
if(x3 >= 4)
{
return true;
}
//斜上检测
int x4 = 0;
for(int i = 1;i < 5;i++)
{
//超出棋盘
if((xPos + i) >14 || (yPos - i) < 0)
{
//结束上斜上向检测
break;
}
//统计相同棋子数
if(board[xPos + i][yPos - i] == cc)
{
x4++;
}
}
for(int i = 1;i < 5-x4;i++)
{
//超出棋盘
if(xPos - i < 0 || (yPos + i) > 14)
{
//结束下斜下向检测
break;
}
if(board[xPos - i][yPos + i] == cc)
{
x4++;
}
}
if(x4 >= 4)
{
return true;
}
return false;
}
|
|