在真假游戏中显示图像选择

时间:2016-07-15 13:58:30

标签: ios swift

我在Swift中构建一个游戏来评估选择A是否为真或假与选择B相比。游戏适用于字符串但我想显示图像而不是字符串(例如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
        }   } 

3 个答案:

答案 0 :(得分:0)

您可以使用两个图像视图来显示故事板中与答案相关的两个图像。您可以使用asstes或url的名称加载此图像视图。如果您决定使用资产的名称,那么这个名称可能与答案的名称相同,或者您可以使用imageA和imageB向模型添加两个字符串。

然后你只需这样加载图像:

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

答案 1 :(得分:0)

我写了一个如何在游乐场实现这个的例子。

在finder中打开playground文件并创建一个名为&#34; Resources&#34;的文件夹,在那里删除两个图像(称为&#34;图像&#34;和&#34;图像2&#34;)然后将此代码复制到游乐场。

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。使用此解决方案,您可以在将来拥有图像,字符串或其他任何内容。

我的例子可能有点矫枉过正,但可以在游乐场看看,也许可以从中获得灵感。

答案 2 :(得分: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"
}
相关问题