2016-12-19 7 views
0

私はスイフト3でナッツとクロスゲームを作成しています。ゲームに勝ったときに警告が表示されますが、私が見ることができない勝利ロジックに何か問題があります。Swiftのロジックに関する問題

何らかの理由でアラートが機能しますが、ユーザーはどこでもクリックすることができますが、触れたい場所を具体的に指定しても表示されます。だから私がそれを置こうとしたのは、3つの画像がお互い= 1でなければuser = 1であり、user = 2であればwin警告が発生するということです。しかし、ユーザーが勝者の変更を1にタッチするたびに、それは分かりそうです。なぜ誰かがこれに何らかの光を当てることができますか?

警告が()現在、時間を節約するために、今の水平勝利関数で呼び出されるなど

class ViewController: UIViewController { 

@IBOutlet var cross: UIImage! 
@IBOutlet var nought: UIImage! 
@IBOutlet weak var image1: UIImageView! 
@IBOutlet weak var image2: UIImageView! 
@IBOutlet weak var image3: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    cross = UIImage(named: "Cross.png") 
    nought = UIImage(named: "Naught.png") 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
var gamepiece = 1 
var whowon = 0 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let user = event?.allTouches!.first! 
     if image1.frame.contains((touch?.location(in: self.view))!) { 
      if user == 1{ 
       image1.image = cross 
       user = 2 

       } 
      else{ 
       image1.image = nought 
       user=1 
      } 
     } 
     if image2.frame.contains((touch?.location(in: self.view))!) { 
      if user == 1{ 
       image2.image = cross 
       user = 2 
      } 
      else{ 
       image2.image = nought 
       user=1      
       } 
      } 
     if tR.frame.contains((touch?.location(in: self.view))!) { 
      if user == 1{ 
       image3.image = cross 
       user = 2      
     } 
     else{ 
      image3.image = nought 
      user=1      
     } 
    } 

} 

func win(){ 
    if (image1.image == image2.image || image2.image == image3.image){ 
     whowon = 1 
     alert() 
    } 
    return true 
} 
func alert(){ 
    if (whowon == 1){ 
     let winner = UIAlertController(title: "", message: "Well done.", preferredStyle: .alert) 

     let action1 = UIAlertAction(title: "", style: .default) { (alert: UIAlertAction!) -> Void in self.turn.text = "" 
     self.resetBoard() 
     } 

     let action2 = UIAlertAction(title: "", style: .default) { (alert: UIAlertAction!) -> Void in self.turn.text = "" 
     } 

    winner.addAction(action1) 
    winner.addAction(action2)   

} 
+2

コードダンプを関連するコードに制限してください。予期しない結果が発生したときにあなたのif/else条件のどれが落ちているのかを確認するためにコードにブレークポイントを入れましたか? – Bek

答えて

1

画像ビューは、それらの画像を持っていないとき、imageプロパティがnilを返すためです。

はあなたがここにクロスを置いたとしましょう:2列目のすべての画像ビューが何のイメージを持っていないか

x| | 
-|-|- 
| | 
-|-|- 
| | 

お知らせ? imageのプロパティを比較すると、すべてがnilです!私たちが知っているように、nilnilに等しいので、条件は真となります。これを避けるには、画像ビューの1つに画像がないかどうかを確認してください。例えば

(image1.image == image2.image && image2.image == image3.image && image3.image != nil) 
+0

この変更後にアラートが全く表示されない – SwiftBeginner

+0

@SwiftBeginnerはい、まさにあなたが望んでいたものですか?それとも、あなたが勝つはずの警告が表示されないということですか? – Sweeper

+0

ゲームに勝利した場合でもアラートは表示されません。 – SwiftBeginner

関連する問題