XNA测验游戏答案检查

时间:2011-11-18 07:16:40

标签: c# if-statement xna streamreader string-parsing

现在我正在制作一个真假测验游戏。 问题,问题的图像和答案都存储在文本文件中。所以主程序只显示问题&从该文本文件指向的图像。当玩家输入答案时,通过单击“真”或“假”按钮,程序将在文本文件中检查该问题的答案。

文本文件是这样的:

    question 1, TRUE, image1
    question 2, FALSE, image2
    question 3, FALSE, image3
    question 4, TRUE, image4
    question 5, TRUE, image5
    question 6, TRUE, image6
    question 7, FALSE, image7
    question 8, TRUE, image8
    question 9, FALSE, image9
    question 10, FALSE, image10

这就是我从文本文件中读取数据的方式:

        StreamReader sr = new StreamReader("data.txt");
        string line;

       while ((line = sr.ReadLine()) != null)
        {
            string[] parts = line.Split(',');
            Soal datasoalnya = new Soal();
            datasoalnya.soal = parts[0];

            if (parts[1] == "TRUE")
            {
                datasoalnya.jawaban = true;
            }
            else if (parts[1] == "FALSE")
            {
                datasoalnya.jawaban = false;
            }

            datasoalnya.tempatImage = parts[2];
            soalList.Add(datasoalnya);

        }

这就是我查看答案的方式:

        if ((mouseState.LeftButton == ButtonState.Pressed && prevMouseState.LeftButton == ButtonState.Released) &&
            (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(correctRectangle)))
        {
            ((Game1)Game).SoundBank.PlayCue("1_btn_click02");

            if (datasoalnya.jawaban = true)
            {
                score += 100;                   
                noSoal++;
                if (noSoal == 11)
                {
                    mouseDiBenar = true;
                    noSoal = 1;
                    score = 0;
                }

            }

            else if (datasoalnya.jawaban = false)
            {
                noSoal++;
                if (noSoal == 11)
                {
                    mouseDiBenar = true;
                    noSoal = 1;
                }

            }

        }

        else if ((mouseState.LeftButton == ButtonState.Pressed && prevMouseState.LeftButton == ButtonState.Released) &&
            (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(falseRectangle)))
        {
            ((Game1)Game).SoundBank.PlayCue("1_btn_click02");
            if (datasoalnya.jawaban = true)
            {                    
                noSoal++;
                if (noSoal == 11)
                {
                    mouseDiBenar = true;
                    noSoal = 1;
                    score = 0;
                }

            }

            else if (datasoalnya.jawaban = false)
            {
                score += 100;
                noSoal++;
                if (noSoal == 11)
                {
                    mouseDiBenar = true;
                    noSoal = 1;
                }

            }
        }

问题是当玩家输入答案时,程序没有检查输入的条件,无论是真还是假。比如每当玩家点击正确的按钮时,得分总是在文本文件中乘以100或者为真。

我怎么能这样做,所以程序可以检查答案......?

3 个答案:

答案 0 :(得分:1)

您的答案检查中可能存在问题,但在阅读文件时,您肯定会遇到前导/尾随间距问题。你应该Trim()你的分裂部分。所以这可能只是你需要答案的一半。

你的零件阵列目前看起来像这样。

parts[0] = "question 1"
parts[1] = " TRUE"
parts[2] = " image1"

将代码交换到这将有助于此。

StreamReader sr = new StreamReader("data.txt");
string line;

while ((line = sr.ReadLine()) != null)
{
  string[] parts = line.Split(',');
  Soal datasoalnya = new Soal();
  datasoalnya.soal = parts[0].Trim();

  string correctAnswer = parts[1].Trim()
  if (correctAnswer  == "TRUE")
  {
    datasoalnya.jawaban = true;
  }
  else if (correctAnswer  == "FALSE")
  {
    datasoalnya.jawaban = false;
  }

  datasoalnya.tempatImage = parts[2].Trim();
  soalList.Add(datasoalnya);
}

作为旁注,我建议您在将字符串转换为bool时使用bool.TryParse()。它将使您的代码更清晰,更少错误应用。这就是使用try解析时的样子。

StreamReader sr = new StreamReader("data.txt");
string line;

while ((line = sr.ReadLine()) != null)
{
  string[] parts = line.Split(',');
  Soal datasoalnya = new Soal();
  datasoalnya.soal = parts[0].Trim();

  bool isCorrectAnswer;
  if(bool.TryParse(parts[1], out isCorrectAnswer)
  {
    datasoalnya.jawaban = isCorrect;
  }
  else
  {
    // unable to parse, add logic to recover or error out
  }

  datasoalnya.tempatImage = parts[2].Trim();
  soalList.Add(datasoalnya);
}

答案 1 :(得分:1)

if (datasoalnya.jawaban = true)
...
else if (datasoalnya.jawaban = false)

您可能希望将=更改为==,这也是编译器建议的警告和IDE中带下划线的绿色。

答案 2 :(得分:0)

试试这个:

bool? button = null;
if (
   (mouseState.LeftButton == ButtonState.Pressed && 
    prevMouseState.LeftButton == ButtonState.Released) &&
    (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(correctRectangle)))
        button = true;
else
if (
   (mouseState.LeftButton == ButtonState.Pressed && 
    prevMouseState.LeftButton == ButtonState.Released) &&
    (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(falseRectangle)))
        button = false;
if (button != null)
{
    ((Game1)Game).SoundBank.PlayCue("1_btn_click02");
    if (datasoalnya.jawaban == button.Value) score += 100;
    noSoal++;
    if (noSoal == 11)
    {
        mouseDiBenar = true;
        noSoal = 1;
        if (datasoalnya.jawaban == button.Value) score = 0;
    }
}