我正在制作一个基于文本的游戏(5.2.3)我被困在这个:

时间:2015-12-14 11:54:30

标签: c# arrays string unity3d queue

这就是游戏的样子:

Prototype1

玩家必须按照上段的正确顺序点击下半部分中的单词。

例如,上段以" This"开头,用户必须找到并触摸"此"在下半部分。他有3次尝试让它正确。如果他点击了错误的单词,他就会失去生命。

在我的代码中,我设法通过检查它们之间的空格和点来分隔第一个字符串中的单词,并使用StringBuilder添加单个字母,然后将其转移到另一个字符串存储整个单词。

//Proper Working Code

public class Queue2Test : MonoBehaviour {

    private string paraString = "This is not the end of the line. This is only the beginning. It cannot get much worse.";
    private StringBuilder buffer;
    private string finalString;
    private int counter;

    void Start () {
        buffer = new StringBuilder ();
        finalString = null;
        counter = 0;
        dothis ();
    }

    void dothis () {

        for (counter = 0; counter < paraString.Length; counter++) {
            buffer = buffer.Append(paraString[counter]);
            if (paraString[counter] == ' ' || paraString[counter] == '.') {
                //buffer.Remove(counter,1);
                finalString = buffer.ToString();
                buffer.Length = 0;
                print (finalString);
            }
        }
    }
} 

哪个有效。上面代码的输出是逐个打印的所有单词。现在我想要做的是,改变这一点,只有当我点击鼠标时才会打印每个单词。为此,我做到了这一点:

// This code needs editing: 

public class Queue3Test : MonoBehaviour {

    private string paraString = "This is not the end of the line. This is only the beginning. It cannot get much worse.";
    private StringBuilder buffer;
    private string finalString;
    private int counter;
    private bool flag;
    private int tempvalue;

    void Start () {
        buffer = new StringBuilder ();
        finalString = null;
        counter = 0;
        flag = false;
        tempvalue = 0;
    }

    void Update () {
        if (flag) {
            dothis ();
        }
    }

    void OnMouseDown () {
        flag = true;
        //print (flag);
    }

    void dothis () {
        for (counter = tempvalue; counter < paraString.Length; counter++) {
            buffer = buffer.Append(paraString[counter]);
            if (flag) {
                if (paraString[counter] == ' ' || paraString[counter] == '.') {
                    //buffer.Remove(counter,1);
                    finalString = buffer.ToString();
                    buffer.Length = 0;
                    print (finalString);
                    tempvalue = counter;
                    flag = false;
                    continue;
                }
                //break;
            }
        }
    }
}

此代码的输出为:

This //First Click
is not the end of the line. This is only the beginning. It cannot get much worse. //Second Click

此代码在第一次单击后打印第一行,在第二次单击时,它会一次打印剩余行! 我希望在鼠标单击上一个接一个地单独打印每个单词

我点击段落右侧的小对撞机来调用鼠标点击功能。

我是使用C#进行编程的新手,我正在为我的大学项目制作这个游戏。任何有用的帮助都会有用,或者只是指向正确的方向。我肯定会提到游戏中的回答者名字!!!

感谢。 :)

2 个答案:

答案 0 :(得分:1)

首先,关于你的第一个问题。 您所要做的就是致电

words = paraString
    .Split(new[] { ' ', '.' }, StringSplitOptions.RemoveEmptyEntries)
    .ToList();

这将返回一个单词数组,忽略所有空格和空格。从现在开始,你可以做这样的事情:

void OnMouseDown() {
    var wordToShow = words.Skip(currentWord).FirstOrDefault();
    if (!String.IsNullOrEmpty(wordToShow)) {
        currentWord++;
        Debug.Log(wordToShow);
    } else {
        Debug.Log("Nothing left...");
    }
}

请确保将单词列表存储为行为脚本的私有字段,如下所示:

private IList<string> words;

您可以通过在Start()或Awake()函数中拆分输入字符串来初始化它。我会用start。

答案 1 :(得分:0)

首先,您应该避免使用这种命名变量和函数的方式(flag,dothis)。 第二,你没有选择合适的解决方案来解决任务。它可以更简单地解决。

using UnityEngine;
using System;

public class Queue3Test : MonoBehaviour {

    private string paraString = "This is not the end of the line. This is only the beginning. It cannot get much worse.";
    private string[] words;
    private int counter = 0;

    private void Start()
    {
        InitializeParaString();
    }

    private void OnMouseDown()
    {
        ShowNextWord();
    }

    private void InitializeParaString()
    {
        counter = 0;
        words = paraString.Split(new[] { '.', ' ' }, StringSplitOptions.RemoveEmptyEntries);
    }

    private void ShowNextWord()
    {
        if (counter < words.Length)
        {
            print(words[counter]);
            counter++;
        }
    }
}

祝你好运!