2013-04-01 63 views
1

我目前正在Unity 3D中使用C#制作测验网络服务。我对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,提问,回答,答案B,答案C,答案D.答案A将永远是正确的答案。我打算晚些时候洗牌!

使用GUI界面,我希望一次显示每个问题和四个可能的答案,而不是一次显示所有问题(如希望成为百万富翁)。当用户选择他们的选项时,应该出现一个新问题。我已经尝试了许多循环变体,并试图在按下GUI按钮但是无法弄清楚的情况下循环遍历循环。

我该如何解决这个问题?我应该使用哪个循环,以及如何暂停它?

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

+1

你应该使用像LINQ-2-SQL或实体框架ORM框架,数据库表映射到C#的对象,这将使你的生活轻松了许多 –

+0

另外你需要在你的服务参考使用条款。 – asawyer

+0

如果你随机选择3行,你的玩家是不是有机会在一次会话中多次获得同样的问题? – asawyer

回答

0

我不确定上面的代码是否是伪造形式的目标,或者如果您确实有服务/客户端工作,如果没有,似乎您需要先设置一个框架,然后再讨论Table的细节设计和游戏机制。

我会开始围绕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中显示)。

根据你想要的安全王,你可能想要处理一些逻辑服务器端,因此需要管理会话。我会开始简单,并假设球员打得很好。

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