棋牌类游戏回放
操作的储存
牌局信息存到类里。
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()//离开回放
{
//
······
播放结束
//
}
}
这里是麻将算法的博客链接