使用C#使用Quiz Web服务

时间:2013-04-01 15:55:23

标签: c# web-services loops unity3d

我目前正在使用Unity 3D中的C#进行测验网络服务。我对C#比较陌生。

我遇到了一个我似乎无法自行解决的问题。我能够立即从数据库中检索所有问题和可能的答案。我的问题是我不能将它们分开并一次显示一个问题和一组答案。我不知道怎么回事!

以下是调用Web服务的方法:

public void retrieveQuizObject(){

    QuizService service = new QuizService();

    quizModel q = new quizModel();

    quizModel[] quizArray = new quizModel[3];

    List<quizModel> quizList = new List<quizModel>();

    //consuming web service
    object[] qArray = quizList.ToArray();
    qArray = service.playQuiz();


    foreach(object element in qArray)
        {
        quizArray[n] = (quizModel)element;
        Debug.Log ("Array Size: " + quizArray.Length);
        Debug.Log ("Questions: " + quizArray[n].question);//just checking to see questions returned
        }
  }

这是Web服务SQL:

"SELECT * from quiz ORDER BY RAND() LIMIT 3"

测验表包含以下列:QuizId,问题,答案A,答案B,答案C,答案D.答案A始终是正确的答案。我计划以后再洗他们!

使用GUI界面,我想一次一个地显示每个问题和四个可能的答案而不是一次显示所有答案(就像世界卫生组织想要成为百万富翁一样)。当用户选择他们的选项时,应出现一个新问题。我已经尝试了很多循环变种,并且只有在按下GUI按钮但无法弄清楚时才尝试遍历循环。

我该如何处理?我应该使用哪个循环以及如何暂停?

我真的很感激帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

我不确定上述代码是否是伪表单中的目标,或者如果您确实让服务/客户端正常工作,如果没有,似乎您需要先设置一个框架,然后才能进入Table Design的细节和游戏机制。

我将开始构建一个围绕Web API的框架,如果您遵循一些好的教程,它们非常简单。

http://www.asp.net/web-api

然后为了持久性,如果你使用SQL,你可以使用Entity Framework,或者像Redis那样使用NoSQL解决方案更有意义:

http://www.d80.co.uk/post/2011/05/12/Redis-Tutorial-with-ServiceStackRedis.aspx

一旦暴露了终点,您将使用WWW在Unity3D中使用它

以下是我用来将游戏对象实例化为数据包的方法,它会在完成时自行处理,传入一个接收字符串的回调函数,以便您可以异步处理响应。

class CoroutineServiceAsync : IServiceAsync

{

    public void SendRequest(string url, Action<string> callback, string data)

    {

        Debug.Log("Sending service call with data: " + data);

        GameObject obj = new GameObject("ServiceCall: " + data);

        CoRoutineRequest packet = obj.AddComponent<CoRoutineRequest>();

        packet.SendRequest(url, callback, data);

    }

}



class CoRoutineRequest : MonoBehaviour

{

    void Start()

    {

        DontDestroyOnLoad(gameObject);

    }



    public void SendRequest(string url, Action<string> callback, string data)

    {

        StartCoroutine(StartSendRequest(url, callback, data));

    }



    IEnumerator StartSendRequest(string url, Action<string> callback, string data)

    {

        WWW www = new WWW(url + "/" + data);

        yield return www;



        if (callback != null)

            callback(www.text);



        Destroy(gameObject);

    }

}

在玩家回答或开始后,您会收到一个问答行。如果您不希望一次性弹出所有答案选项,那么当您循环/遍历答案选项时,您会有延迟。

我认为你需要的唯一循环就是显示答案选项,其余的是基于玩家输入的事件驱动(当他们选择答案时)以及当你的回叫进入问答行包时(这将是触发要在GUI中显示的数据。)

根据您想要的安全之王,您可能希望处理某些逻辑服务器端,因此需要管理会话。我会开始简单并假设玩家玩得很好。

希望我能正确理解这个问题并提供一些帮助。