Exemplo n.º 1
0
    //拒绝悔棋
    public void DisAgree()
    {
        //发送回答
        Hashtable values = new Hashtable();

        values.Add("name", "piece");
        values.Add("FromX", -1);
        values.Add("FromY", -1);
        values.Add("ToX", -1);
        values.Add("ToY", -1);
        values.Add("Move", "str");
        values.Add("YidongOrChizi", "YidongOrChizi");
        values.Add("Regame", 0);
        values.Add("GoBack", 0);//申请悔棋,0不申请不同意,1申请,2同意

        GobangClient.send(GameSerialize.toBytes(values));
        gameObject.transform.parent.gameObject.SetActive(false);

        //拒绝悔棋开始计时
        TimeManager TM;
        GameObject  obj = GameObject.Find("Timer") as GameObject;

        TM           = obj.GetComponent <TimeManager>();
        TM.bStartCul = true;
    }
Exemplo n.º 2
0
    // 匹配成功时,自动调用 onResync 方法
    protected override void onResync(byte fromIndex)
    {
        // 同步玩家的 名字
        {
            Debug.Log(GameManager.nickname);

            // 交换名字,头像,握手
            {
                Hashtable values = new Hashtable();
                values.Add("name", "handshake");
                values.Add("v", GameManager.nickname);
                values.Add("ImgStr", HeadManager.ImgStr);

                GobangClient.send(GameSerialize.toBytes(values));
            }

            // 先进入房间的玩家 为红方
            string chess = "";
            if (getInt("client-index") == 0)
            {
                chess = "红方";
            }
            else
            {
                chess = "黑方";
            }

            GameObject Player = GameObject.Find("PlayerName");
            UILabel    label  = Player.GetComponent <UILabel>();
            label.text = GameManager.nickname + " (" + chess + ")";
        }
    }
Exemplo n.º 3
0
    //同意悔棋
    public void Agree()
    {
        //发送回答
        Hashtable values = new Hashtable();

        values.Add("name", "piece");
        values.Add("FromX", -1);
        values.Add("FromY", -1);
        values.Add("ToX", -1);
        values.Add("ToY", -1);
        values.Add("Move", "str");
        values.Add("YidongOrChizi", "YidongOrChizi");
        values.Add("Regame", 0);
        values.Add("GoBack", 2);//申请悔棋,0不申请不同意,1申请,2同意
        // 悔棋后,切换回合
        if (GameManager.curTurn == "Red")
        {
            GameManager.curTurn = "Black";
        }
        else
        {
            GameManager.curTurn = "Red";
        }
        GobangClient.send(GameSerialize.toBytes(values));
        CC.IloveHUIQI();
        gameObject.transform.parent.gameObject.SetActive(false);

        //同意悔棋重置计时
        TimeManager TM;
        GameObject  obj = GameObject.Find("Timer") as GameObject;

        TM             = obj.GetComponent <TimeManager>();
        TM.bStartCul   = true;
        TM.Timer.value = 1;
    }
Exemplo n.º 4
0
    void Start()
    {
        ui = GameObject.Find("UI");

        myClient = new GobangClient();

        // 天梯实时对战服务 初始化
        // init(),第一个参数为 appKey。
        // appKey 可以直接在后台创建。
        GobangClient.init("acd17643930c7363", 2);

        // 配置
        GobangClient.config("debug-level", "7");

        // 可以隐藏 玩家输入名字+登录 界面,直接匹配
        // GobangClient.connect(8);

        // 如果存储的名字不存在,弹出输入昵称UI
        // 有昵称时,直接匹配
        string nickname = PlayerPrefs.GetString("nickname");

        if (nickname == "")
        {
            GameObject mainObj = ui.transform.Find("Main").gameObject;
            mainObj.SetActive(true);
        }
        else
        {
            // 赋值 GameManager 昵称
            GameManager.nickname = nickname;

            // 有昵称时,直接匹配
            GobangClient.connect(8);
        }
    }
Exemplo n.º 5
0
    public void onButtonClick(string name)
    {
        if (name == "")
        {
            return;
        }

        GameObject mainObj = ui.transform.Find("Main").gameObject;

        switch (name)
        {
        case "level":
            // 昵称不能为空
            GameObject textObj     = mainObj.transform.Find("InputField/Text").gameObject;
            GameObject errorTipObj = mainObj.transform.Find("ErrorTip").gameObject;
            string     nickname    = textObj.GetComponent <Text> ().text;
            if (nickname == "")
            {
                errorTipObj.SetActive(true);
                return;
            }

            GameManager.nickname = nickname;

            // 记录 nickname
            PlayerPrefs.SetString("nickname", nickname);

            errorTipObj.SetActive(false);
            mainObj.SetActive(false);

            // 等级匹配
            GobangClient.connect(8);
            break;

        case "retry":
            //GobangClient.disconnect ();
            GameObject start = GameObject.Find("Start") as GameObject;
            ReGame     RG    = start.GetComponent <ReGame>();
            RG.ChessPostion();
            // 结果通知给对方
            Hashtable values = new Hashtable();
            values.Add("name", "piece");
            values.Add("FromX", -1);
            values.Add("FromY", -1);
            values.Add("ToX", -1);
            values.Add("ToY", -1);
            values.Add("Move", "红方走");
            values.Add("YidongOrChizi", "Yidong");
            values.Add("Regame", 1);
            values.Add("GoBack", 0);
            GobangClient.send(GameSerialize.toBytes(values));
            GameObject resultObj = ui.transform.Find("Result").gameObject;

            resultObj.SetActive(false);
            break;
        }
    }
Exemplo n.º 6
0
    //
    public void updateChess()
    {
        // 胜利
        if (blackclick.str == "红色方胜利" || blackclick.str == "黑色方胜利")
        {
            // 结果通知给对方
            Hashtable values = new Hashtable();
            values.Add("name", "lose");
            values.Add("v", (byte)1);
            GobangClient.send(GameSerialize.toBytes(values));
            // UI
            GameObject ui          = GameObject.Find("UI");
            GameObject resultObj   = ui.transform.Find("Result").gameObject;
            GameObject gameoverObj = resultObj.transform.Find("GameOver").gameObject;
            gameoverObj.GetComponentInChildren <Text>().text = "完胜";

            TM.bStartCul   = false;
            TM.Timer.value = 1;

            resultObj.SetActive(true);
        }
        // 超时失败
        if (TM.bGameOver)
        {
            // 结果通知给对方
            Hashtable values = new Hashtable();
            values.Add("name", "lose");
            values.Add("v", (byte)2);
            GobangClient.send(GameSerialize.toBytes(values));
            // UI
            GameObject ui          = GameObject.Find("UI");
            GameObject resultObj   = ui.transform.Find("Result").gameObject;
            GameObject gameoverObj = resultObj.transform.Find("GameOver").gameObject;
            gameoverObj.GetComponentInChildren <Text>().text = "超时失败";

            TM.bStartCul   = false;
            TM.Timer.value = 1;

            resultObj.SetActive(true);
        }
    }
Exemplo n.º 7
0
    public void RequestGoBack()
    {
        //己方落子对方未落子时可以申请悔棋
        if (GameManager.curTurn != GameManager.userColor)
        {
            //发送请求
            Hashtable values = new Hashtable();
            values.Add("name", "piece");
            values.Add("FromX", -1);
            values.Add("FromY", -1);
            values.Add("ToX", -1);
            values.Add("ToY", -1);
            values.Add("Move", "str");
            values.Add("YidongOrChizi", "YidongOrChizi");
            values.Add("Regame", 0);
            values.Add("GoBack", 1);//申请悔棋,0不申请不同意,1申请,2同意

            Label.gameObject.SetActive(true);
            Label.text = "对方考虑中...";

            GobangClient.send(GameSerialize.toBytes(values));
        }
    }
Exemplo n.º 8
0
    public void SendMoveMessage(int x1, int y1, int x2, int y2)
    {
        //停止计时
        TM.StopTime();
        YidongOrChizi = "Yidong";
        if ((GameManager.curTurn == GameManager.userColor) && TrueOrFalse)
        {
            // 发送消息通知对手,落子位置
            {
                KingPosition.JiangJunCheck();
                Hashtable values = new Hashtable();
                values.Add("name", "piece");
                values.Add("FromX", x1);
                values.Add("FromY", y1);
                values.Add("ToX", x2);
                values.Add("ToY", y2);
                values.Add("Move", str);
                values.Add("YidongOrChizi", YidongOrChizi);
                values.Add("Regame", 0);
                values.Add("GoBack", 0);

                GobangClient.send(GameSerialize.toBytes(values));
            }
            //检查游戏是否结束
            Game.updateChess();
            // 落子后,切换回合
            if (GameManager.curTurn == "Red")
            {
                GameManager.curTurn = "Black";
            }
            else
            {
                GameManager.curTurn = "Red";
            }
        }
    }
Exemplo n.º 9
0
    public void IsClickCheck()
    {
        if (TrueOrFalse == false)
        {
            return;
        }
        if (!bIsOnline)
        {
            GameObject obj = UICamera.hoveredObject;
            BlackNameOrRedName(obj);//是否点击到棋子  如果是  就得到棋子
            if (obj.name.Substring(0, 1) != "i")
            {
                obj = obj.gameObject.transform.parent.gameObject;//得到他的父容器
            }
            int x      = System.Convert.ToInt32((obj.transform.localPosition.x + 263) / 195);
            int y      = System.Convert.ToInt32(Mathf.Abs((obj.transform.localPosition.y - 302) / 192));
            int Result = IsBlackOrRed(x, y);//判断点击到了什么
            switch (Result)
            {
            case 0:    //点击到了空  是否要走棋
                       //如果点击到了空格  就把对象清空
                for (int i = 1; i <= 90; i++)
                {
                    GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                    Destroy(Clear);
                }
                ToY = y;
                ToX = x;
                if (ChessMove)
                {    //红色走
                    if (RedName == null)
                    {
                        return;
                    }
                    string sssRed = RedName;    //记录红色棋子的名字
                    bool   ba     = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                    if (!ba)
                    {
                        return;
                    }

                    int a = Board.chess[FromY, FromX];
                    int b = Board.chess[ToY, ToX];
                    chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                    str = "黑方走";
                    IsMove(RedName, obj, FromX, FromY, ToX, ToY);    //走了
                    KingPosition.JiangJunCheck();
                    ChessMove = false;
                    //getString();
                    if (str == "红色棋子胜利")
                    {
                        return;    //因为没有携程关系  每次进入黑色走棋的时候都判断 棋局是否结束
                    }
                    BlackName = null;
                    RedName   = null;
                    return;
                    //执行走棋
                }
                else
                {    //黑色走
                    if (BlackName == null)
                    {
                        return;
                    }
                    bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                    if (!ba)
                    {
                        return;
                    }
                    //ChessChongzhi chzh = new ChessChongzhi();
                    int a = Board.chess[FromY, FromX];
                    int b = Board.chess[ToY, ToX];
                    chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                    str = "红方走";
                    IsMove(BlackName, obj, FromX, FromY, ToX, ToY);
                    //黑色走棋
                    ChessMove = true;
                    KingPosition.JiangJunCheck();
                }
                break;

            case 1:    //点击到了黑色  是否选中  还是  红色要吃子
                if (!ChessMove)
                {
                    FromX = x;
                    FromY = y;
                    for (int i = 1; i <= 90; i++)
                    {
                        GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                        Destroy(Clear);
                    }
                    can.ClickChess(FromX, FromY);
                }
                else
                {
                    for (int i = 1; i <= 90; i++)
                    {
                        GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                        Destroy(Clear);
                    }
                    if (RedName == null)
                    {
                        return;
                    }
                    ToX = x;
                    ToY = y;
                    bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                    if (!ba)
                    {
                        return;
                    }
                    int a = Board.chess[FromY, FromX];
                    int b = Board.chess[ToY, ToX];
                    chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                    //看看是否能播放音乐
                    IsEat(RedName, BlackName, FromX, FromY, ToX, ToY);
                    ChessMove = false;
                    //红色吃子  变黑色走
                    str = "黑方走";
                    KingPosition.JiangJunCheck();
                    if (str == "红色棋子胜利")
                    {
                        return;    //因为没有携程关系  每次进入黑色走棋的时候都判断 棋局是否结束
                    }
                    RedName   = null;
                    BlackName = null;
                    return;
                }
                break;

            case 2:    //点击到了红色   是否选中  还是黑色要吃子
                if (ChessMove)
                {
                    FromX = x;
                    FromY = y;
                    for (int i = 1; i <= 90; i++)
                    {
                        GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                        Destroy(Clear);
                    }
                    can.ClickChess(FromX, FromY);
                }
                else
                {
                    for (int i = 1; i <= 90; i++)
                    {
                        GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                        Destroy(Clear);
                    }
                    if (BlackName == null)
                    {
                        return;
                    }
                    ToX = x;
                    ToY = y;
                    bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                    if (!ba)
                    {
                        return;
                    }
                    //ChessChongzhi chzh = new ChessChongzhi();
                    int a = Board.chess[FromY, FromX];
                    int b = Board.chess[ToY, ToX];
                    chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                    //看看是否能播放音乐
                    IsEat(BlackName, RedName, FromX, FromY, ToX, ToY);
                    RedName   = null;
                    BlackName = null;
                    ChessMove = true;
                    str       = "红方走";
                    KingPosition.JiangJunCheck();
                }
                break;
            }
        }
        else
        {
            if (!GobangClient.isConnected())
            {
                return;
            }
            if ((GameManager.curTurn == GameManager.userColor) && TrueOrFalse)
            {
                GameObject obj = UICamera.hoveredObject;
                BlackNameOrRedName(obj);//是否点击到棋子  如果是  就得到棋子
                if (obj.name.Substring(0, 1) != "i")
                {
                    obj = obj.gameObject.transform.parent.gameObject;//得到他的父容器
                }
                int x      = System.Convert.ToInt32((obj.transform.localPosition.x + 263) / 195);
                int y      = System.Convert.ToInt32(Mathf.Abs((obj.transform.localPosition.y - 302) / 192));
                int Result = IsBlackOrRed(x, y);//判断点击到了什么
                switch (Result)
                {
                case 0:    //点击到了空  是否要走棋
                           //如果点击到了空格  就把对象清空
                    for (int i = 1; i <= 90; i++)
                    {
                        GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                        Destroy(Clear);
                    }
                    ToY = y;
                    ToX = x;
                    if (ChessMove)
                    {    //红色走
                        if (RedName == null)
                        {
                            return;
                        }
                        string sssRed = RedName;    //记录红色棋子的名字
                        bool   ba     = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                        if (!ba)
                        {
                            return;
                        }

                        int a = Board.chess[FromY, FromX];
                        int b = Board.chess[ToY, ToX];
                        chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                        str = "黑方走";
                        IsMove(RedName, obj, FromX, FromY, ToX, ToY);    //走了
                        KingPosition.JiangJunCheck();
                        ChessMove = false;
                        //getString();
                        if (str == "红色棋子胜利")
                        {
                            return;    //因为没有携程关系  每次进入黑色走棋的时候都判断 棋局是否结束
                        }
                        BlackName = null;
                        RedName   = null;
                        SendMoveMessage(FromX, FromY, ToX, ToY);
                        return;
                        //执行走棋
                    }
                    else
                    {    //黑色走
                        if (BlackName == null)
                        {
                            return;
                        }
                        bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                        if (!ba)
                        {
                            return;
                        }
                        //ChessChongzhi chzh = new ChessChongzhi();
                        int a = Board.chess[FromY, FromX];
                        int b = Board.chess[ToY, ToX];
                        chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                        str = "红方走";
                        IsMove(BlackName, obj, FromX, FromY, ToX, ToY);
                        //黑色走棋
                        ChessMove = true;
                        KingPosition.JiangJunCheck();
                        SendMoveMessage(FromX, FromY, ToX, ToY);
                    }
                    break;

                case 1:    //点击到了黑色  是否选中  还是  红色要吃子
                    if (!ChessMove)
                    {
                        FromX = x;
                        FromY = y;
                        for (int i = 1; i <= 90; i++)
                        {
                            GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                            Destroy(Clear);
                        }
                        can.ClickChess(FromX, FromY);
                    }
                    else
                    {
                        for (int i = 1; i <= 90; i++)
                        {
                            GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                            Destroy(Clear);
                        }
                        if (RedName == null)
                        {
                            return;
                        }
                        ToX = x;
                        ToY = y;
                        bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                        if (!ba)
                        {
                            return;
                        }
                        int a = Board.chess[FromY, FromX];
                        int b = Board.chess[ToY, ToX];
                        chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                        //红色吃子  变黑色走
                        str = "黑方走";
                        IsEat(RedName, BlackName, FromX, FromY, ToX, ToY);
                        ChessMove = false;
                        KingPosition.JiangJunCheck();
                        if (str == "红色棋子胜利")
                        {
                            return;    //因为没有携程关系  每次进入黑色走棋的时候都判断 棋局是否结束
                        }
                        RedName   = null;
                        BlackName = null;
                        SendEatMessage(FromX, FromY, ToX, ToY);
                        return;
                    }
                    break;

                case 2:    //点击到了红色   是否选中  还是黑色要吃子
                    if (ChessMove)
                    {
                        FromX = x;
                        FromY = y;
                        for (int i = 1; i <= 90; i++)
                        {
                            GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                            Destroy(Clear);
                        }
                        can.ClickChess(FromX, FromY);
                    }
                    else
                    {
                        for (int i = 1; i <= 90; i++)
                        {
                            GameObject Clear = GameObject.Find("prefabs" + i.ToString());
                            Destroy(Clear);
                        }
                        if (BlackName == null)
                        {
                            return;
                        }
                        ToX = x;
                        ToY = y;
                        bool ba = rules.IsValidMove(Board.chess, FromX, FromY, ToX, ToY);
                        if (!ba)
                        {
                            return;
                        }
                        //ChessChongzhi chzh = new ChessChongzhi();
                        int a = Board.chess[FromY, FromX];
                        int b = Board.chess[ToY, ToX];
                        chzh.AddChess(ChessChongzhi.Count, FromX, FromY, ToX, ToY, true, a, b);
                        str = "红方走";
                        IsEat(BlackName, RedName, FromX, FromY, ToX, ToY);
                        RedName   = null;
                        BlackName = null;
                        ChessMove = true;
                        KingPosition.JiangJunCheck();
                        SendEatMessage(FromX, FromY, ToX, ToY);
                    }
                    break;
                }
            }
        }
    }