Flash AS3 五子棋 人人对战

加入某个实验室的面试题,思路是每下一个子就对整个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对战,一点思路都没有,请大佬指教

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值