2017-04-27 3 views
0

Ich bin ziemlich neu in der Programmierung und möchte Swift 3.0 lernen.Bool gibt nicht korrekt zurück

Ich habe versucht, mein eigenes TicTacToe-Spiel zu schreiben, aber irgendwie die Bool Rückkehr funktioniert nicht so, wie ich will, wenn ich für einen Gewinner überprüfen ...

Die CheckWin() Funktion wie folgt aussieht :

func CheckWin() -> Bool { 
    if button1.titleLabel?.text == button2.titleLabel?.text && button2.titleLabel?.text == button3.titleLabel?.text && button1.titleLabel?.text != nil { 
     return true 
    } else { 
     return false 
    } 
//and so on... 

Mein Problem ist, wenn ich auf einen Knopf klicken sie auf die Schaltfläche mit einem „X“ oder ein „O“ und danach rufen sie die CheckWin() Funktion I füllt über eine if-Anweisung aber es setzt der Labeltext zu "Won!" Nach der nächsten Zeit klicke ich auf eine Schaltfläche. Anstatt es sofort zu überprüfen und den Labeltext auf "Gewonnen!" Zu setzen.

@IBAction func buttonClick(_ sender: UIButton) { 
    if sender.titleLabel?.text == nil { 
     if player % 2 == 0 { 
       sender.setTitle(playerx, for: UIControlState.normal) 
       player += 1 //Adds 1 to the variable player 
       turn += 1 //Adds 1 to the variable turn (to check later for a draw) 
     } else { 
       sender.setTitle(playero, for: UIControlState.normal) 
       player += 1 
       turn += 1 
     } 
    } 
    if CheckWin() { 
     label.text = "Won!" 
    } 
} 

Ich freue mich über jede Hilfe/Tipps! Danke im Voraus!

(By the way, ich weiß, dass es nicht so eine gute Idee ist, einen Auslass für jeden Knopf zu schaffen, aber auf dem ersten Arbeits Ich will nur dieses Ding bekommen, bevor ich zu verbessern beginnen) :)

+0

Verwenden Sie den * Debugger. * Setzen Sie einen Haltepunkt, Einzelschritt durch den Code, überprüfen Sie die Variablen. An welchem ​​Punkt tut das Programm nicht, was Sie erwarten? –

+0

@MartinR wenn es auf die if-Anweisung CheckWin() geht, überprüft es die button.titleLabels, aber irgendwie false zurück und das nächste Mal, wenn ich auf eine Schaltfläche klicke es überprüft es wieder und es gibt wahr zurück, aber der Code sagt, dass es die titleLabel zu "X" oder "O" vor, nicht wahr? Ich bekomme es nicht ... meiner Meinung nach sollte der Code korrekt sein –

+0

Oberhalb der Zeile "if button1.titleLabel? .text" fügen Sie drei Druckanweisungen wie "print (button1.titleLabel? .text)" usw. ein. Was zeigen sie in der Konsole? – Magnas

Antwort

0

Sie haben :

if player%2==0 
{ 
    sender.setTitle(playerx, for: UIControlState.normal} 
    player += 1 //Adds 1 to the variable player 
    turn += 1 //Adds 1 to the variable turn (to check later for a draw) 
} 

die } am Ende der ersten Zeile sehen, sind, anstelle eines ), dass der Fehler oder haben Sie gerade falsch für Ihre Frage Code kopieren?

Stellen Sie außerdem sicher, dass der Schaltflächentyp Benutzerdefiniert und nicht System ist. Wenn Sie sie in "Benutzerdefiniert" ändern, wird die Standardtextfarbe weiß, also ändern Sie diese in Schwarz oder was auch immer.

+0

Es tut mir leid, die} ist nur ein Fehler. In meinem tatsächlichen Code ist es korrekt. –

+0

Ja, ich dachte so viel, leicht gemacht. Ich bin mir sicher, dass der Fehler auf "nil" kommt. Ein leerer String ist nicht nil, es ist '' '', also sollte das sein, was Sie in Ihrer if-Anweisung einen leeren Button testen. – Magnas

Verwandte Themen