我创造了一款TTT游戏。但是我遇到了人工智能的问题。如何避免这种情况发生,以便在chooseCellRow:Col
方法中它只返回一个尚未被任何一个玩家选中的随机点?
- (void) chooseCellRow:(NSInteger)row Col:(NSInteger)col
{
//pick random spot for computer's turn
row = random()%2;
col = random()%2;
if (row == 0 && col == 0) {
[but00 setTitle:@"X" forState:0];
}
else if (row == 0 && col == 1) {
[but01 setTitle:@"X" forState:0];
}
else if (row == 0 && col == 2) {
[but02 setTitle:@"X" forState:0];
}
else if (row == 1 && col == 0) {
[but10 setTitle:@"X" forState:0];
}
else if (row == 1 && col == 1) {
[but11 setTitle:@"X" forState:0];
}
else if (row == 1 && col == 2) {
[but12 setTitle:@"X" forState:0];
}
else if (row == 2 && col == 0) {
[but20 setTitle:@"X" forState:0];
}
else if (row == 2 && col == 1) {
[but21 setTitle:@"X" forState:0];
}
else if (row == 2 && col == 2) {
[but22 setTitle:@"X" forState:0];
}
}
答案 0 :(得分:0)
作弊是一种道德概念,不适用于计算机,因为它完全按照你的要求去做。但是,如果单元格已被占用,你可以通过简单地再次选择来阻止这种情况,伪代码:
row = random() % 3;
col = random() % 3;
while cell[row][col] != empty: # Add your REAL detection code here.
row = random() % 3;
col = random() % 3;
您还会注意到上述代码也会阻止您作弊。羞辱你只允许计算机选择九种可能中的四种: - )
将% 2
应用于某个号码会为您提供0
或1
,您还需要使用% 3
来同时允许2
。
根据您的评论,您有一个包含占据该单元格的字符的单元格数组,在您找到空白单元格之前,代码将继续执行:
do {
row = random() % 3;
col = random() % 3;
} while (cell[row][col] != ' ');
答案 1 :(得分:0)
一种简单的方法是保留未使用的位置列表并从该列表中进行选择。当任一玩家移动时,从列表中移除他们选择的位置。
另一种更简单但效率更低的方法是让它选择任何位置,但如果它所选择的位置已被占用,请再试一次。