棋牌類遊戲回放

棋牌類遊戲回放

操作的儲存

牌局信息存到類裏。

public enum OPeration  //操作類型
{
    Out = 0, //打牌
    Get = 1,//接牌
    Peng = 2,//碰牌
    Gang = 3,//槓牌
    Hu = 4//胡牌
}

public class OperationManage
{
    public OPeration oPeration { set; get; }
    public int player { set; get; }   //做出操作的玩家

    public int card { set; get; }   //麻將索引

    public int Victim { set; get; }  //被碰·槓·胡的玩家
    public OperationManage() { }
    public OperationManage(OPeration oPeration, int player, int card, int Victim)//結構
    {
        this.oPeration = oPeration;
        this.player =player;
        this.card =card;
        this.Victim = Victim;
    }
}

public class Message
{
             //初始手牌
    public int Banker{ set; get; }                                //莊家編號
    public int PlayerPos { set; get; }
    public List<int[]> startcard = new List<int[]>();    //自己位置
    public List<OperationManage> PlayerOperations = new List<OperationManage>();//每一步操作\

    public void addOperation(OPeration oPeration, int player, int card)  //方便添加操作的方法
    {
        PlayerOperations.Add(new OperationManage(oPeration, player, card, player));
    }

    public void addOperation(OPeration oPeration, int player, int card, int Victim) //方便添加操作的方法
    {
        OperationManage ASDADASD = new OperationManage(oPeration, player, card, Victim);
        PlayerOperations.Add(ASDADASD);
    }

類的轉化與儲存

類可以轉成json存進數據庫中,可以使用對其相互轉化,這裏需要LitJson插件;

using LitJson;
Message 操作信息=new Message();
//
······
添加操作
//
string json= JsonMapper.ToJson(操作信息);//類轉json,其中類裏的方法會自動忽略不轉化。
//
······
存進數據庫
······
數據庫取出
//
Message 操作信息=JsonMapper.ToObject<Message>(string json);//json轉類

操作的解析


 string json = "";
    public float speed = 1f; //播放速度
    public Coroutine playback;//協程名,方便在外面停止協程
void Awake()
    {
        DontDestroyOnLoad(this.gameObject);//保證該腳本不被銷燬
    }

    public void huifang(string json1) //解析操作
    {
    json = json1;
//
······
初始化數據
//
        playback = StartCoroutine("EveryFrame");

    }
    IEnumerator EveryFrame()
    {
        SceneManager.LoadScene(2);//跳轉場景
        yield return null;//等待跳轉場景完成

        GameObject.Find("UI Root").transform.FindChild("huifangbutton").gameObject.SetActive(true);//顯示播放按鈕

        Message Injson = JsonMapper.ToObject<Message>(json); //json轉爲類
        for (int i = 0; i < 4; i++)
        {
            PLayerManagement.instance.addpai(Injson.startcard[i], i);
        }
        yield return new WaitForSeconds(1f);

        foreach (var item in Injson.PlayerOperations)
        {
            switch (item.oPeration)
            {
//
······
根據操作調用UI
//
            }

            for (float timer = 0; timer < speed; timer += Time.deltaTime)//執行完一步等待一段時間,可以用來調節速度
                yield return null;
        }
    }
    public void likaiplayback()//離開回放
    {
//
······
播放結束
//
    }
}

這裏是麻將算法的博客鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章