加入某个实验室的面试题,思路是每下一个子就对整个15*15的棋盘进行遍历
对应数组值为0代表没有棋子,
为1代表该位置为黑棋,
为2代表该位置为白棋
二维数组board储存整个15*15棋盘,i,j表示当前落子的索引值,函数返回值为0,1,2,3。分别表示无五子,黑棋胜利,白棋胜利,和棋。
/*创建判断游戏胜负函数*/
function judge(temp: Array, i: int, j: int): int //返回0,1,2,3
{
var x, y: int;
var heqiFlag: Boolean = true;
/*和棋*/
for (x = 1; x <= 15; x++)
{
for (y = 1; y <= 15; y++)
{
if (temp[x][y] == 0)
heqiFlag = false;
}
}
if (heqiFlag)
{
return 3;
}
/*遍历整列*/
if (j <= 5)
{
for (y = 1; y <= j; y++)
{
if (board[i][y] == 1 &&
board[i][y + 1] == 1 &&
board[i][y + 2] == 1 &&
board[i][y + 3] == 1 &&
board[i][y + 4] == 1)
{
return 1;
}
if (board[i][y] == 2 &&
board[i][y + 1] == 2 &&
board[i][y + 2] == 2 &&
board[i][y + 3] == 2 &&
board[i][y + 4] == 2)
{
return 2;
}
}
}
else
{
for (y = j - 4; y <= 11; y++)
{
if (board[i][y] == 1 &&
board[i][y + 1] == 1 &&
board[i][y + 2] == 1 &&
board[i][y + 3] == 1 &&
board[i][y + 4] == 1)
{
return 1;
}
if (board[i][y] == 2 &&
board[i][y + 1] == 2 &&
board[i][y + 2] == 2 &&
board[i][y + 3] == 2 &&
board[i][y + 4] == 2)
{
return 2;
}
}
}
/*遍历整行*/
if (i <= 5)
{
for (x = 1; x <= i; x++)
{
if (board[x][j] == 1 &&
board[x + 1][j] == 1 &&
board[x + 2][j] == 1 &&
board[x + 3][j] == 1 &&
board[x + 4][j] == 1)
{
return 1;
}
if (board[x][j] == 2 &&
board[x + 1][j] == 2 &&
board[x + 2][j] == 2 &&
board[x + 3][j] == 2 &&
board[x + 4][j] == 2)
{
return 2;
}
}
}
else
{
for (x = i - 4; x <= 11; x++)
{
if (board[x][j] == 1 &&
board[x + 1][j] == 1 &&
board[x + 2][j] == 1 &&
board[x + 3][j] == 1 &&
board[x + 4][j] == 1)
{
return 1;
}
if (board[x][j] == 2 &&
board[x + 1][j] == 2 &&
board[x + 2][j] == 2 &&
board[x + 3][j] == 2 &&
board[x + 4][j] == 2)
{
return 2;
}
}
}
/*遍历整个主对角线*/
//上三角
if (i >= j)
{
if (i - j <= 10) //去除右上角
{
for (x = i - j + 1, y = 1; x <= 11; x++, y++)
{
if (board[x][y] == 1 &&
board[x + 1][y + 1] == 1 &&
board[x + 2][y + 2] == 1 &&
board[x + 3][y + 3] == 1 &&
board[x + 4][y + 4] == 1)
{
return 1;
}
if (board[x][y] == 2 &&
board[x + 1][y + 1] == 2 &&
board[x + 2][y + 2] == 2 &&
board[x + 3][y + 3] == 2 &&
board[x + 4][y + 4] == 2)
{
return 2;
}
}
}
}
//下三角
if (i < j)
{
if (j - i <= 10) //去除左下角
{
for (y = 1 + j - i, x = 1; y <= 11; x++, y++)
{
if (board[x][y] == 1 &&
board[x + 1][y + 1] == 1 &&
board[x + 2][y + 2] == 1 &&
board[x + 3][y + 3] == 1 &&
board[x + 4][y + 4] == 1)
{
return 1;
}
if (board[x][y] == 2 &&
board[x + 1][y + 1] == 2 &&
board[x + 2][y + 2] == 2 &&
board[x + 3][y + 3] == 2 &&
board[x + 4][y + 4] == 2)
{
return 2;
}
}
}
}
/*遍历次对角线*/
if (i + j >= 6 && i + j <= 26) //去除边角
{
if (i + j <= 16)
{ //上三角
for (x = 1, y = i + j - 1; y >= 5; x++, y--)
{
trace(board[x][y],
board[x + 1][y - 1],
board[x + 2][y - 2],
board[x + 3][y - 3],
board[x + 4][y - 4])
if (board[x][y] == 1 &&
board[x + 1][y - 1] == 1 &&
board[x + 2][y - 2] == 1 &&
board[x + 3][y - 3] == 1 &&
board[x + 4][y - 4] == 1)
{
return 1;
}
if (board[x][y] == 2 &&
board[x + 1][y - 1] == 2 &&
board[x + 2][y - 2] == 2 &&
board[x + 3][y - 3] == 2 &&
board[x + 4][y - 4] == 2)
{
return 2;
}
}
}
trace('\n')
if (i + j > 16)
{ //下三角
for (x = i + j - 15, y = 15; x <= 11; x++, y--)
{
if (board[x][y] == 1 &&
board[x + 1][y - 1] == 1 &&
board[x + 2][y - 2] == 1 &&
board[x + 3][y - 3] == 1 &&
board[x + 4][y - 4] == 1)
{
return 1;
}
if (board[x][y] == 2 &&
board[x + 1][y - 1] == 2 &&
board[x + 2][y - 2] == 2 &&
board[x + 3][y - 3] == 2 &&
board[x + 4][y - 4] == 2)
{
return 2;
}
}
}
}
return 0;
}
初学编程,写的不好,多多指教,后续代码会慢慢贴上来
同时新任务是关于人机的AI对战,一点思路都没有,请大佬指教