棋牌类游戏回放

棋牌类游戏回放

操作的储存

牌局信息存到类里。

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()//离开回放
    {
//
······
播放结束
//
    }
}

这里是麻将算法的博客链接

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