2013-11-29 226 views
0

我对Matlab非常陌生,正在创建一个简单的Tic Tac Toe游戏,用户可以在该游戏中与计算机对战。我在图形用户界面中有3x3按钮,对于每个按钮的回调,我已经设置好了,所以如果方块是空的,就会出现一个'X',并在相应的点上设置一个'1'值为一个3x3零点矩阵。在Matlab中创建井字游戏

我想在每次回调之后放置一个'player2'函数,以便计算机可以在矩阵中找到任意一个零点,随机选择一个并给我坐标,然后将其转换为相应的按钮在那里放置一个'O'。

矩阵是handles.move = zeros(3,3)。

我知道我可能需要使用'if'语句,'[i,j] = find(move == 0);'但我不知道使用什么随机命令从零中选取将会使我回到坐标的零。有什么建议么?

回答

2

调用find(move==0)将返回move中等于零的元素的线性索引。例如:

move = 

    1  0  1 
    0  0  0 
    0  1  0 

>>indices = find(move==0) 

indices = 

2 
3 
4 
5 
8 
9 

你可以把这个结果和使用随机打乱指数...

>>scrambled = indices(randperm(length(indices))) 

scrambled = 

9 
2 
8 
4 
3 
5 

然后选择第一个元素,scrambled(1),作为计算机的下一个选择。可能有几种方法可以解决这个问题。关于这一点的好处在于,它可以在游戏结束时被调用以检索计算机的下一步行动。

编辑:

computerMove = indices(randperm(length(indices),1)); 

这将返回自动丹尼斯指出的第一个元素。

+0

略有增强:你可以使用'randperm(length(indices),1)'直接获得1个元素。 –