Ios Tic-tac-toe编程

Ios Tic-tac-toe编程,ios,tic-tac-toe,Ios,Tic Tac Toe,出于某种原因,checkForWin函数总是返回“否” 因此,我无法找回获胜者 否则,如果建议一个不同的逻辑来判断胜利者 每次用户放置符号时,我都会使用此函数 -(BOOL) checkForWin{ NSLog(@"yes"); // HORIZONTAL WINS if((s1.image == s2.image) & (s2.image == s3.image) & (s1.image != NULL)) {

出于某种原因,checkForWin函数总是返回“否”

因此,我无法找回获胜者

否则,如果建议一个不同的逻辑来判断胜利者 每次用户放置符号时,我都会使用此函数

-(BOOL) checkForWin{
        NSLog(@"yes");
        // HORIZONTAL WINS
        if((s1.image == s2.image) & (s2.image == s3.image) & (s1.image != NULL))
        {
            return YES;
        }
        else if((s4.image == s5.image) & (s5.image == s6.image) & (s4.image != NULL))
        {
            return YES;
        }
        else if((s7.image == s8.image) & (s8.image == s9.image) & (s7.image != NULL))
        {
            return YES;
        }
        // VERTICAL WINS
        else if((s1.image == s4.image) & (s4.image == s7.image) & (s1.image != NULL))
        {
            return YES;
        }
        else if((s2.image == s5.image) & (s5.image == s8.image) & (s2.image != NULL))
        {
            return YES;
        }
        else if((s3.image == s6.image) & (s6.image == s9.image) & (s3.image != NULL))
        {
            return YES;
        }
        // DIAGONAL WINS
        else if((s1.image == s5.image) & (s5.image == s9.image) & (s1.image != NULL))
        {
            return YES;
        }
        else if((s3.image == s5.image) & (s5.image == s7.image) & (s3.image != NULL))
        {
            return YES;
        }
        //right now return 1 becuase we havn't implemented this yet
        else{
        return NO;
        }
    }

    -(void)displayWinner{
        if([self checkForWin] == YES){
            if(playerToken==1){
                lbl2.text =@"X is the WINNER";
            } else {
                lbl2.text =@"O is the WINNER";
            }
        }

    }
也许你可以写

if([s1.image isEqual:s2.image2]){

}
此代码而不是此控制语句

if((s1.image == s2.image) & (s2.image == s3.image) & (s1.image != NULL))
    {
        return YES;
    }
我的答案可能是正确的

原因是,您正在将引用与图像进行比较,而不是与图像数据进行比较。参考文献可能不同,而数据可能不同

他建议你比较数据而不是参考资料

但在我的建议中,实际上应该向s对象添加一个成员,其中包含一个三态值。可以是一个整数

/**
  s.x is avalue indicating which image is shown (x, O, or empty)
  x > 0 means 'X'
  x == 0 means 'O'
  x < 0 means empty
**/
然后在指定图像时进行设置。检查一下。
否则,您将浪费时间比较数据,以获得完全相同的最终结果。

您确定要使用布尔和位,而不是使用逻辑条件运算符&&?并不是说这件事真的有什么不同。。。多难看的一个if.else.的组合啊。。用于检查优胜者组合的语句。。。它伤了我的眼睛……:?谢谢它起作用了,是的,效率提示也会起作用!