XNA智力竞赛游戏答案检查器

本文关键字:检查 答案 游戏 智力竞赛 XNA | 更新日期: 2023-09-27 18:15:10

现在我正在创建一个真-假问答游戏。问题、问题图像和答案存储在文本文件中。所以主程序只显示问题&从该文本文件定向的图像。当玩家输入答案时,点击True或False按钮,程序会将其与文本文件中该问题的答案进行核对。

文本文件是这样的:

    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。

我怎样才能让程序检查答案。。。?

XNA智力竞赛游戏答案检查器

您的答案检查可能也有问题,但在读取文件时,您肯定会遇到前导/尾随间距问题。你应该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.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);
}
if (datasoalnya.jawaban = true)
...
else if (datasoalnya.jawaban = false)

您可能需要将=更改为==,编译器也建议将其作为警告,并在IDE中用绿色下划线表示。

试试这个:

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;
    }
}