2016-07-15 6 views
0

私は選択肢Aが真偽であるかどうかを判断するためにSwiftでゲームを構築しています。ゲームは文字列に対してうまくいきますが、文字列の代わりに画像を表示したい例えばfirstQuestion.choiceA = "A"の場合、 "A"は表示しませんが、Aに関連付けられた画像 - Bの場合も同様です)。私は、文字列を画像にマッピングしたり、イメージ名を抽出して比較したり、私の場合に実装する方法がわからない辞書のためのソリューションを見てきました。コードの主要部分は囲まれています。このケースでSwiftでこれを行う方法のサンプルコードがありますか?真偽のゲームで画像を表示する

import UIKit 

class ViewController: UIViewController { 

    class Questions { 
     var question : String 
     var answer : String 
     var choiceA : String 
     var choiceB : String 

     init() { 
      question = "" 
      answer = "" 
      choiceA = "" 
      choiceB = "" 
     } 

     func isCorrect(input : String) -> Bool { 
      return input == answer 
     } } 

    class QuestionGenerator { 
     var questionList : [Questions] 
     var counter : Int   
     var currentQuestion : Questions/ 

     init() { 
      questionList = [Questions]() 
      counter = 0     
      currentQuestion = Questions() 
     } 

     func addQuestion(question : Questions) { 
      questionList.append(question) 
     } 

     func getNextQuestion() -> Questions { 

      if (counter < questionList.count) { 
       currentQuestion = questionList[counter] 
       counter = counter + 1 
       return currentQuestion 
      } 

      else 
      { 
       counter = 0 
       currentQuestion = questionList[counter] 
       return currentQuestion 
      } } } 

     class Model 
    { 

     var currentQuestion : Questions 
     var questionGen : QuestionGenerator 

     init() 

     { 
      let firstQuestion = Questions() 
      firstQuestion.question = "Which one took longer?" 
      firstQuestion.choiceA = "A" 
      firstQuestion.choiceB = "B" 
      firstQuestion.answer = firstQuestion.choiceA 

      questionGen = QuestionGenerator() 
      questionGen.addQuestion(firstQuestion) 
     } 

     func isCorrect(userInput : String) -> Bool 
     { 
      return userInput == currentQuestion.answer 
     } } 

答えて

0

2つのイメージビューを使用して、回答に関連付けられた両方のイメージをストーリーボードに表示することができます。あなたはasstesまたはurlの名前を使ってこの画像ビューを読み込むことができます。アセットの名前を使用することに決めた場合、これは同じ名前にすることも、imageAとimageBの2つの文字列をモデルに追加することもできます。

その後、あなたは、単に画像をロードするこの方法:

imageViewA.image = UIImage(命名:currentQuestion.choiceA)

0

私は運動場でこれを実装する方法の例を書きました。

ファインダーでプレイグラウンドファイルを開き、「リソース」という名前のフォルダを作成し、そこに2つのイメージ(「イメージ」と「イメージ2」と呼ばれます)をドロップして、このコードをプレイグラウンドにコピーします。

import UIKit 

enum AnswerOption { 
    case Text(String) 
    case Image(UIImage) 
} 

extension AnswerOption: Equatable { } 
func ==(lhs: AnswerOption, rhs: AnswerOption) -> Bool { 
    switch (lhs, rhs) { 
    case (let .Text(str1), let .Text(str2)): 
     return str1 == str2 
    case (let .Image(img1), let .Image(img2)): 
     return img1 == img2 
    default: 
     return false 
    } 
} 

struct Question { 
    let text: String 
    let answer: AnswerOption 
    let choiceA: AnswerOption 
    let choiceB: AnswerOption 

    init(text: String, choiceA: AnswerOption, choiceB: AnswerOption, answer: AnswerOption) { 
     self.text = text 
     self.answer = answer 
     self.choiceA = choiceA 
     self.choiceB = choiceB 
    } 

    func isCorrect(input: AnswerOption) -> Bool { 
     return input == answer 
    } 
} 

extension Question { 
    func isCorrect(input: UIImage) -> Bool { return isCorrect(.Image(input)) } 
    func isCorrect(input: String) -> Bool { return isCorrect(.Text(input)) } 
} 

extension Question { 
    init(text: String, choiceA: String, choiceB: String, answer: String) { 
     self.init(text: text, choiceA: .Text(choiceA), choiceB: .Text(choiceB), answer: .Text(answer)) 
    } 

    init(text: String, choiceA: UIImage, choiceB: UIImage, answer: UIImage) { 
     self.init(text: text, choiceA: .Image(choiceA), choiceB: .Image(choiceB), answer: .Image(answer)) 
    } 
} 

class QuestionGenerator { 
    private var questions = [Question]() 
    private var counter = 0 
    private var currentQuestion: Question? { 
     return counter < questions.count ? questions[counter] : nil 
    } 

    func addQuestion(question : Question) { 
     questions.append(question) 
    } 

    func getNextQuestion() -> Question { 
     counter += 1 
     if counter >= questions.count { 
      counter = 0 
     } 
     return currentQuestion! 
    } 
} 

// ====== Example usage ====== 

let questionGenerator = QuestionGenerator() 
questionGenerator.addQuestion(Question(text: "Which one took longer?", choiceA: "A", choiceB: "B", answer: "A")) 
questionGenerator.addQuestion(Question(text: "Which didn't take long at all?", choiceA: "A", choiceB: "B", answer: "B")) 
let image = UIImage(named: "image")! 
let image2 = UIImage(named: "image2")! 
questionGenerator.addQuestion(Question(text: "Which one is the StackOverflow logo?", choiceA: image, choiceB: image2, answer: image)) 

var question = questionGenerator.currentQuestion! 

print(question.isCorrect(question.choiceA) ? "Correct" : "Incorrect") 
question = questionGenerator.getNextQuestion() 
print(question.isCorrect("A") ? "Correct" : "Incorrect") 
question = questionGenerator.getNextQuestion() 
print(question.isCorrect(image) ? "Correct" : "Incorrect") 

列挙AnswerOptionは、文字列または画像のいずれかであり得る、および列挙はEquatableに準拠します。このソリューションを使用すると、将来画像や文字列などを表示することができます。

私の例は少し残虐かもしれませんが、遊び場でそれをチェックし、おそらくそれからインスピレーションを得ることができます。

0
Outlet var QuestionLabel: UILabel! 

Outlet var ButtonOne: UIButton! 
Outlet var ButtonTwo: UIButton! 
Outlet var OutputLabel: UILabel! 
Action func checkAnswer(sender : UIButton) 

let userInput = sender.titleLabel!.text 

if(model.isCorrect(userInput!) == true) 

{ 

    OutputLabel.text = "Good Job" 
    let currentQuestion = model.getNextQuestion() 
    QuestionLabel.text = currentQuestion.question 
    ButtonOne.seTitle(currentQuestion.choiceA, forState:  UIControlState.Normal) 
    ButtonTwo.setTitle(currentQuestion.choiceB, forState: UIControlState.Normal) 

if (counter == 0) 
{ 
    ButtonOne.setBackgroundImage(UIImage(named:"A1"), for State: .Normal) 
    ButtonTwo.setBackgroundImage(UIImage(named:"B1"), for State: .Normal) 
} 
if (counter == 1) 
{ 
    ButtonOne.setBackgroundImage(UIImage(named:"A2"), for State: .Normal) 
    ButtonTwo.setBackgroundImage(UIImage(named:"B2"), for State: .Normal) 
} 

else 
{ 
    OutputLabel.text = "Sorry" 
} 
関連する問題