棋牌類遊戲回放
操作的儲存
牌局信息存到類裏。
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()//離開回放
{
//
······
播放結束
//
}
}
這裏是麻將算法的博客鏈接