簡體   English   中英

使用C#消費測驗Web服務

[英]Consuming a Quiz web service with C#

我目前正在Unity 3D中使用C#制作Quiz 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"

測驗表包含以下列:QuizId,問題,答案A,答案B,答案C,答案D。答案A永遠是正確的答案。 我打算稍后改組它們!

我想使用GUI界面一次顯示每個問題和四個可能的答案,而不是一次顯示所有問題(例如誰想要成為百萬富翁)。 當用戶選擇他們的選項時,將出現一個新問題。 我嘗試了多種循環,並嘗試僅在按下GUI按鈕但無法弄清楚時才遍歷循環。

我應該如何處理? 我應該使用哪個循環以及如何暫停它?

我非常感謝您的幫助! 謝謝!

我不確定上面的代碼是否是以偽形式實現的目標,或者您是否確實在運行服務/客戶端(如果沒有),看來您需要首先設置框架,然后才能了解表設計和游戲機制的細節。 。

我將開始圍繞Web API構建框架,如果您遵循一些不錯的教程,它們將非常簡單。

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

然后為了保持持久性,如果要使用SQL,則可以使用Use Entity Framework,或者使用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中顯示)。

根據所需的安全性之王,您可能需要處理某些邏輯服務器端,因此需要管理會話。 我會從簡單開始,假設玩家的表現很好。

希望我正確理解了這個問題,並能提供一些幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM