使用c#消费Quiz web服务

本文关键字:web 服务 Quiz 消费 使用 | 更新日期: 2023-09-27 18:06:45

我目前正在Unity 3D中使用c#制作测验web服务。我对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"

测验表有以下几列:测验id,问题,答案A,答案B,答案C,答案d。答案A永远是正确的答案。我打算稍后再洗牌!

使用GUI界面,我想一次一个地显示每个问题和四个可能的答案,而不是一次全部显示(像谁想成为百万富翁)。当用户选择他们的选项时,应该出现一个新的问题。我已经尝试了许多循环的变体,并试图在GUI按钮被按下时迭代循环,但无法找出它。

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

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

使用c#消费Quiz web服务

我不确定上述代码是否是你的伪目标,或者你是否真的有服务/客户端工作,如果不是,似乎你需要先设置一个框架,然后再进入表格设计和游戏机制的细节。

我会开始围绕Web API构建一个框架,如果你遵循一些好的教程,它们非常直接。

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

那么对于持久性,你可以使用使用实体框架,如果你要用SQL,或NoSQL解决方案可能更有意义,如Redis:

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中)。

取决于你想要什么样的安全,你可能想要处理一些逻辑服务器端,因此需要管理会话。我会简单地开始,假设玩家玩得很好。

希望我正确理解了这个问题,这样会对你有所帮助。