我最近在Objective-C中构建了一个Tic Tac Toe游戏,同时重点努力让我的代码尽可能简短和干净(因为我对编程相对陌生,这是我第一次专注于使某些东西高效/可读性,而不仅仅是使其工作在任何成本)如何处理if-than语句中的大量条件?
大部分,我能够使我的代码简短和高效,我很满意 - 除了checkWin函数的一部分,检查是否X或O的赢得了比赛
我有一个NSArray对象叫“BoardState”,以对应于9点在黑板上,像这样
索引0-当索引设置为0时,它被认为是空白的。 1是X,2是O.
但是,我可以找出如何检查X或O是否赢得的唯一方法是用if语句手动检查整个主板,并检查每个可能性,如
if (
([_boardState[0] isEqual:@1] &&
[_boardState[1] isEqual:@1] &&
[_boardState[2] isEqual:@1]) ||
([_boardState[3] isEqual:@1] &&
[_boardState[4] isEqual:@1] &&
[_boardState[5] isEqual:@1]) ||
([_boardState[6] isEqual:@1] &&
[_boardState[7] isEqual:@1] &&
[_boardState[8] isEqual:@1]) ||
([_boardState[0] isEqual:@1] &&
[_boardState[3] isEqual:@1] &&
[_boardState[6] isEqual:@1]) ||
([_boardState[1] isEqual:@1] &&
[_boardState[4] isEqual:@1] &&
[_boardState[7] isEqual:@1]) ||
([_boardState[2] isEqual:@1] &&
[_boardState[5] isEqual:@1] &&
[_boardState[8] isEqual:@1]) ||
([_boardState[0] isEqual:@1] &&
[_boardState[4] isEqual:@1] &&
[_boardState[8] isEqual:@1]) ||
([_boardState[2] isEqual:@1] &&
[_boardState[4] isEqual:@1] &&
[_boardState[6] isEqual:@1])
){
[xWins show];
[self overWriteBoardState];
}
然后用O再一次,几乎完全一样的东西。
if (
([_boardState[0] isEqual:@2] &&
[_boardState[1] isEqual:@2] &&
[_boardState[2] isEqual:@2]) ||
([_boardState[3] isEqual:@2] &&
[_boardState[4] isEqual:@2] &&
[_boardState[5] isEqual:@2]) ||
([_boardState[6] isEqual:@2] &&
[_boardState[7] isEqual:@2] &&
[_boardState[8] isEqual:@2]) ||
([_boardState[0] isEqual:@2] &&
[_boardState[3] isEqual:@2] &&
[_boardState[6] isEqual:@2]) ||
([_boardState[1] isEqual:@2] &&
[_boardState[4] isEqual:@2] &&
[_boardState[7] isEqual:@2]) ||
([_boardState[2] isEqual:@2] &&
[_boardState[5] isEqual:@2] &&
[_boardState[8] isEqual:@2]) ||
([_boardState[0] isEqual:@2] &&
[_boardState[4] isEqual:@2] &&
[_boardState[8] isEqual:@2]) ||
([_boardState[2] isEqual:@2] &&
[_boardState[4] isEqual:@2] &&
[_boardState[6] isEqual:@2])
){
[oWins show];
[self overWriteBoardState];
}
作为奖励,我的overWriteBoardState函数将电路板重置为无法修改的空白板。这也可能更有效率
-(void)overWriteBoardState {
self.boardState[0] = @3;
self.boardState[1] = @3;
self.boardState[2] = @3;
self.boardState[3] = @3;
self.boardState[4] = @3;
self.boardState[5] = @3;
self.boardState[6] = @3;
self.boardState[7] = @3;
self.boardState[8] = @3;
}
我怎么能这样构造,以避免这些大量的重复行?任何帮助或提示表示赞赏 - 谢谢!
不要重新发明轮子:有一种算法叫做Minimax https://github.com/mattrajca/TTT – vadian