예제 #1
0
파일: PieceBase.cs 프로젝트: murata9/Shogi
    //クリックされた時
    public void ClickPiece()
    {
        //自分のターンか確認
        if (GameManager.GetInstance().GetIsTurnPlayerMe() == false)
        {
            return;
        }
        if (enemy_flag == true)
        {
            return;
        }
        //ピースマネージャーに選択されたことを伝える
        PieceManager pieceManager = PieceManager.GetInstance();

        pieceManager.SetSelectPiece(this.gameObject);
        //ガイドリセット
        Guide.AllGuideDelete();
        if (have_flag == true)
        {
            //持ち駒なら配置可能判定
            Guide.CreateGuideForHavePiece(kind);
        }
        else
        {
            //自分の移動可能な場所にガイドを設置
            move.CreateMoveGuide(board_pos_x, board_pos_y);
        }
    }
예제 #2
0
    //王手判定
    bool CheckOhte()
    {
        Guide.AllGuideDelete();         //ガイドリセット
        //ターンプレイヤーの王の位置を取得
        int oh_x = -1;
        int oh_y = -1;

        foreach (var p in PiecesArrayID)
        {
            PieceBase piece = p.GetComponent <PieceBase>();
            if (piece.kind == PieceKind.OH)
            {
                if (GameManager.GetInstance().turn_player_id == piece.owner_ID)
                {
                    oh_x = piece.board_pos_x;
                    oh_y = piece.board_pos_y;
                    break;
                }
            }
        }
        Guide.ohte_check_flag = true;        //ガイド制作時に味方駒の扱いを変更する
        //非ターンプレイヤーの全駒の移動可能範囲の取得
        foreach (var p in PiecesArrayID)
        {
            PieceBase piece = p.GetComponent <PieceBase>();
            if (GameManager.GetInstance().turn_player_id == piece.owner_ID)
            {
                continue;                                                                      //非ターンプレイヤー
            }
            if (piece.have_flag == true)
            {
                continue;                                   //持ち駒
            }
            piece.move.CreateMoveGuide(piece.board_pos_x, piece.board_pos_y);
        }
        Guide.ohte_check_flag = false;        //リセット
        GameObject[] guides = GameObject.FindGameObjectsWithTag(define.GuideTag);
        foreach (var g in guides)
        {
            Guide guide = g.GetComponent <Guide>();
            if (guide.pos_x == oh_x && guide.pos_y == oh_y)
            {
                //王手
                Debug.Log("王手");
                StartCoroutine(DrawOhte());
                return(true);
            }
        }
        return(false);
    }
예제 #3
0
    //選択
    public void MoveSelectPiece(Guide guide)
    {
        if (SelectPiece == null)
        {
            Debug.LogError("Error MoveSelectPiece");
            return;
        }
        //移動
        PieceBase comp = SelectPiece.GetComponent <PieceBase>();

        //成り判定
        if (guide.kind != GuideKind.PROMOTE)
        {
            if (PromoteCheck(guide, comp) == true)
            {
                return;                                            //成りガイドを新たに設置
            }
        }
        else
        {
            //成り用ガイドならガイドの情報を使用
            comp.SetPromote(guide.promote);
        }
        //移動させる
        comp.SetBoardPos(guide.pos_x, guide.pos_y);
        comp.SetMoveTargetPos(guide.pos_x, guide.pos_y);
        SetPieceMoveAnimStart(SelectPiece);
        //自分のターンか確認
        if (GameManager.GetInstance().GetIsTurnPlayerMe() == true)
        {
            //移動情報の送信
            StartCoroutine(PostPieceMove());
            GameManager.GetInstance().SetIsTurnPlayerMe(false);
        }
        else
        {
            Debug.Log("自分のターンではない");
            //仮
            loginDataManager.user_id = GameManager.GetInstance().turn_player_id;
            Debug.Log("UserIDを変更しました");
            GameManager.GetInstance().last_turn = -1;
        }
        //選択解除
        SelectPiece = null;
        //ガイドをすべて削除
        Guide.AllGuideDelete();
    }
예제 #4
0
    //GET
    //駒の状態を取得
    IEnumerator DownloadPiecesData()
    {
        string url = define.URL;

        if (loginDataManager.login_flag == false)
        {
            url = (define.URL + "get_pieces.json");            //test用
        }
        else
        {
            url += "plays/" + loginDataManager.play_id.ToString() + "/pieces";
        }
        WWW www = new WWW(url);

        //接続待ち
        yield return(www);

        if (www.error != null)
        {
            Debug.Log("Error!");
        }
        else
        {
            //接続成功
            Debug.Log("DOWNLOAD Piece Success");
            Debug.Log(www.text);
            Debug.Log(www.url);
            //JSON
            //1~40 駒のID
            var jsonAllPieceData = MiniJSON.Json.Deserialize(www.text) as Dictionary <string, object>;
            //初期化
            InitBoardPosArray();
            HavePiecesList.Clear();
            HavePiecesListEnemy.Clear();
            Guide.AllDeleteFromTag(define.LastMoverTag);            //最後に移動した駒表示ガイドを削除
            bool create_flag = false;
            //各駒の情報
            for (int i = 0; i < define.PieceNum; i++)
            {
                var jsonOnePieceData = (Dictionary <string, object>)jsonAllPieceData[(i + 1).ToString()];
                if (PiecesArrayID[i] == null)               //初めて呼ばれた時は作成する
                {
                    GameObject piece = CreatePiece();
                    PiecesArrayID[i] = piece;
                    create_flag      = true;
                }
                //コンポーネントの取得
                PieceBase comp = PiecesArrayID[i].GetComponent <PieceBase> ();
                //ID設定
                comp.SetID(i + 1);
                //位置設定
                int pos_x = System.Convert.ToInt32(jsonOnePieceData["posx"]);
                int pos_y = System.Convert.ToInt32(jsonOnePieceData["posy"]);
                if (create_flag == false)               //初期化時ではない
                {
                    //このターン移動した駒を判定
                    if (comp.board_pos_x != pos_x || comp.board_pos_y != pos_y)
                    {
                        comp.last_move_flag = true;
                    }
                    if (comp.last_move_flag == true)
                    {
                        Guide.CreateGuide(pos_x, pos_y, GuideKind.LAST_MOVER);
                        comp.SetBoardPos(pos_x, pos_y);
                        //駒をアニメーション移動
                        //持ち駒ではなく盤面にあるかチェック
                        if (BoardManager.CheckOutRangeBoardPointXY(pos_x, pos_y) == false)
                        {
                            comp.SetMoveTargetPos(pos_x, pos_y);
                            SetPieceMoveAnimStart(PiecesArrayID[i]);
                        }
                    }
                }
                else
                {
                    comp.SetLocalPos(pos_x, pos_y);
                }
                comp.last_move_flag = false;
                int user_id = loginDataManager.user_id;
                if (loginDataManager.login_flag == false)
                {
                    //test用
                    user_id = 5;
                }
                if (loginDataManager.watcher_flag == true)
                {
                    //観戦者なら先手視点
                    user_id = UserNameManager.GetInst().first_player_user_ID;
                }
                int owner_ID = System.Convert.ToInt32(jsonOnePieceData["owner"]);
                comp.owner_ID = owner_ID;
                if (owner_ID == user_id)
                {
                    //自軍
                    comp.SetEnemyFlag(false);
                }
                else
                {
                    //敵
                    comp.SetEnemyFlag(true);
                }
                //成り
                bool promote_flag = System.Convert.ToBoolean(jsonOnePieceData["promote"]);
                comp.SetPromote(promote_flag);
                //駒の名前と敵判定と成りの情報から種類を決定
                int kind = PieceKind.ChangeKindStringToint((string)jsonOnePieceData["name"]);
                comp.SetKind(kind);
                //盤面配列に記録
                if (BoardManager.CheckOutRangeBoardPointXY(pos_x, pos_y) == false)              //盤面上の駒なら 取った駒は座標0,0
                {
                    int tx = pos_x - 1;
                    int ty = pos_y - 1;
                    BoardPosArray[ty, tx] = PiecesArrayID[i];
                    comp.SetHaveFlag(false);                    //持ち駒ではなくす
                }
                else
                {
                    //盤面に無い駒は持ち駒とする
                    comp.SetHaveFlag(true);
                    if (comp.enemy_flag == true)
                    {
                        HavePiecesList.Add(PiecesArrayID[i]);
                    }
                    else
                    {
                        HavePiecesListEnemy.Add(PiecesArrayID[i]);
                    }
                }
            }
            //王手判定
            CheckOhte();
            Guide.AllGuideDelete();             //ガイド削除
            //持ち駒を並べる
            if (create_flag == true)
            {
                //最初はアニメーション移動あり 観戦者用
                UpdateHavePiece(true);
            }
            else
            {
                UpdateHavePiece(false);
            }
            //盤
            if (GameManager.GetInstance().first_player_flag == false)
            {
                //後手なら盤を180度回転させる
                board.transform.localEulerAngles = new Vector3(0, 0, 180.0f);
            }
            else
            {
                board.transform.localEulerAngles = new Vector3(0, 0, 0.0f);
            }
        }
    }
예제 #5
0
 //何もないところがクリックされた時
 public void Click()
 {
     //駒選択リセット
     PieceManager.GetInstance().SetSelectPiece(null);
     Guide.AllGuideDelete();
 }