Exemplo n.º 1
0
        /// <summary>
        /// マスのIDから駒のポイントを取得
        /// </summary>
        /// <param name="squareId"></param>
        /// <returns></returns>
        ///
        public int PiecePoint(int squareId)
        {
            int       point     = 0;
            int       pieceId   = -1;
            PieceKind pieceKind = 0;

            if (squareId >= 0)
            {
                pieceId = ManagerStore.fieldManager.IsPieceOnFace(squareId);
                if (pieceId != -1)
                {
                    Piece.Pieces piece = ManagerStore.humanPlayer.GetPieceById(pieceId);
                    pieceKind = piece.GetKind();
                    point     = (int)ManagerStore.piecesManager.GetSummonCost(pieceKind);
                }
            }
            else if (squareId < -1)
            {
                if (squareId == -2)
                {
                    pieceKind = global::PieceKind.Pawn;
                }
                else if (squareId == -5)
                {
                    pieceKind = global::PieceKind.Queen;
                }

                point = (int)ManagerStore.piecesManager.GetSummonCost(pieceKind);
            }

            return(point);
        }
Exemplo n.º 2
0
        //移動できるか確認 移動先に存在する駒の種類を確認する
        private bool CanMoveCollision(bool isPlyerTurn, int faceId, Piece.Pieces moveingPiece)
        {
            bool returnValue = true;

            if (faceId > -1)
            {
                int pieceONFace = ManagerStore.fieldManager.IsPieceOnFace(faceId);
                if (pieceONFace != -1)
                {
                    //移動先が自分の駒なら移動出来ない
                    if (isPlyerTurn == true && ManagerStore.humanPlayer.HasPiece(pieceONFace))
                    {
                        return(false);
                    }
                    if (isPlyerTurn == false && ManagerStore.cp.HasPiece(pieceONFace))
                    {
                        return(false);
                    }

                    Piece.Pieces beatedPiece = null;
                    //移動先が相手の駒なら消滅させる
                    if (ManagerStore.cp.HasPiece(pieceONFace))
                    {
                        effectHumanPiece = pieceONFace;
                        beatedPiece      = ManagerStore.cp.GetPieceById(pieceONFace);
                        beatedPiece.BeatedEffect();

                        StartCoroutine(DelayMethod(40, () =>
                        {
                            ManagerStore.cp.DeleteMyPieces(pieceONFace);
                        }));
                    }
                    //自分の駒ならviewカメラに切り替える
                    if (ManagerStore.humanPlayer.HasPiece(pieceONFace))
                    {
                        viewCamera.transform.position = ManagerStore.humanPlayer.GetPieceById(pieceONFace).PieceCamera.GetCameraPosition();
                        viewCamera.transform.rotation = Quaternion.Euler(ManagerStore.humanPlayer.GetPieceById(pieceONFace).PieceCamera.GetCameraAngle());
                        viewCamera.SetActive(true);
                        PCM.CameraOff();
                        effectHumanPiece = pieceONFace;
                        beatedPiece      = ManagerStore.humanPlayer.GetPieceById(pieceONFace);
                        beatedPiece.BeatedEffect();
                    }

                    //Move.ReversibleMove rm = new Move.ReversibleMove();
                    //if (pieceONFace == -1) {
                    //    rm.InitNotCapturedMove(moveingPiece.GetFaceId(),faceId);

                    //}
                    //else {
                    //    //caputure Piece forward face Id移動後か??
                    //    rm.InitCapturedMove(moveingPiece.GetFaceId(),faceId,beatedPiece.GetKind(),ManagerStore.fieldManager.GetFace2Face(moveingPiece.GetFaceId(),faceId).GetComponent<Field.SurfaceInfo>().FaceId);
                    //}

                    pieceKindforRecord = beatedPiece.GetKind();
                }
            }
            return(returnValue);
        }
Exemplo n.º 3
0
        //PLayerのターンの処理
        private void PlayerTurn()
        {
            //行動が未選択
            if (hpaction == ActionKind.Unset)
            {
                //1,駒が選択された→カメラ切り替え 未選択の場合、元の番号を保持する
                int pieceChangeChechk = LM.GetSelectedPieces();
                if (pieceChangeChechk > -1)
                {
                    selectedPieceId = pieceChangeChechk;
                    DisplayRestPieceNum(selectedPieceId);
                    selectPiece = GameManager.ManagerStore.humanPlayer.GetPieceById(selectedPieceId);
                    PCM.ChangeCamera(selectedPieceId);
                    ChangeMovePoint();
                }

                //2.Inputから何らかのオブジェクトを受け付けた→面か確認して、移動可能か確認する
                GameObject returnObj = null;
                if (Input.GetMouseButtonUp(0))
                {
                    returnObj = IM.GetTouchListner();
                }

                if (returnObj != null)
                {
                    Field.SurfaceInfo selectedSurFaceInfo = returnObj.GetComponent <Field.SurfaceInfo>();
                    if (selectedSurFaceInfo != null)
                    {
                        selectedFaceId = selectedSurFaceInfo.FaceId;
                        foreach (int moveFace in selectAbsolutePieceMoveRange)
                        {
                            if (selectedFaceId == moveFace)
                            {
                                hpaction = ActionKind.Move;
                                break;
                            }
                        }
                        //駒が移動可能なマスでなければ-1に
                        if (hpaction != ActionKind.Move)
                        {
                            selectedFaceId = -1;
                        }
                    }
                }
            }
            //行動が選択済みで、Yes、Noが未クリック
            else if (hpaction != ActionKind.Unset && isActionDecide == false)
            {
                DisplayCheckText();
            }
            //確認画面でYesが押された
            else if (hpaction != ActionKind.Unset && isActionDecide == true)
            {
                HiddenCheckText();
                ExcuteMotion(selectPiece, selectedFaceId, selectedRotateDirection);
                isNeedTurnStartInit = true;
            }
        }
Exemplo n.º 4
0
 //駒を実際に動かす ターン交代 勝利条件確認
 private void ExcuteMotion(Piece.Pieces piece, int moveFaceId, int rotateDirection)
 {
     /*
      *  if (moveFaceId > -1)
      *  {
      *  //canMoveCollision == 移動先に駒が存在し、自分の駒であれば動けない
      *  if (CanMoveCollision(TM.IsPlayerTurn(), moveFaceId) == true)
      *      {
      *          piece.MovePiece(moveFaceId);
      *      }
      *      else
      *      {
      *          Debug.LogWarning("error:PlyaGame l290 移動先に味方の駒が存在?");
      *      }
      *  }
      *  piece.RotatePiece(rotateDirection);
      */
     GJ.WinnerCheck();
     TM.ChangeTuen();
 }
Exemplo n.º 5
0
        public void Start()
        {
            //必要なオブジェクトのfind
            checkText     = GameObject.Find("CheckText").GetComponent <Text>();
            movingPanel   = GameObject.Find("WhileMovingPanel").GetComponent <Image>();
            movingText    = GameObject.Find("WhileMoving").GetComponent <Text>();
            restPieceText = GameObject.Find("RestPiece").GetComponent <Text>();

            checkMenue = GameObject.Find("CheckMenue");
            viewCamera = GameObject.Find("ViewCamera");
            checkMenue.SetActive(false);
            viewCamera.SetActive(false);

            movingText.text = "Enemy Turn…";

            CPB = new CP.CPBrain();
            PCM = GetComponent <PlayCameraManager>();
            TM  = GetComponent <TurnManager>();
            LM  = GetComponent <ListManager.ListCtrl>();
            GJ  = GetComponent <GameJudgment>();

            //test2 10 pawns written by KatoMori
            CPB.SetCPPieces();

            //キングのIDを取得
            var hpkingList = ManagerStore.humanPlayer.GetMyPiecesByKind(PieceKind.King);

            humanPlayerKing = hpkingList[0].GetPieceId();


            //初期位置の保存
            GameManager.ResultData.positionRecord.Add(Position.PositionData.SaveByPlayer(ManagerStore.humanPlayer, ManagerStore.cp));

            //ターン開始時の初期化
            selectedPieceId = humanPlayerKing;
            PCM.ChangeCamera(selectedPieceId);
            selectPiece = GameManager.ManagerStore.humanPlayer.GetPieceById(humanPlayerKing);
            TurnStartInit();
        }
Exemplo n.º 6
0
        //駒を実際に動かす ターン交代 勝利条件確認
        private void ExcuteMotion(Piece.Pieces piece, int moveFaceId, int rotateDirection)
        {
            fromFaceIdforRecord = piece.GetFaceId();
            toFaceIdforRecord   = moveFaceId;
            if (moveFaceId > -1)
            {
                if (CanMoveCollision(TM.IsPlayerTurn(), moveFaceId, piece) == true)
                {
                    //Debug.Log("pi:"+piece.IsAnimate());
                    piece.MoveBeginEffect();
                    //Debug.Log("pi:"+piece.IsAnimate());
                    piece.MovePiece(moveFaceId);
                    piece.MoveFinishEffect();
                    //Debug.Log("pi:" + piece.IsAnimate());

                    if (effectHumanPiece == -1)
                    {
                        GameManager.ResultData.positionRecord.Add(Position.PositionData.SaveByPlayer(ManagerStore.humanPlayer, ManagerStore.cp));
                        //Move.ReversibleMove rm = new Move.ReversibleMove();
                        //rm.InitNotCapturedMove(fromFaceIdforRecord, toFaceIdforRecord);
                        //GameManager.ResultData.moveRecord.Add(rm);
                    }
                }
            }
            else
            {
                //駒を移動しない場合Record記録 移動する場合はエフェクト終了後に記録
                GameManager.ResultData.positionRecord.Add(Position.PositionData.SaveByPlayer(ManagerStore.humanPlayer, ManagerStore.cp));
                //Move.ReversibleMove rm = new Move.ReversibleMove();
                //rm.InitRotation(fromFaceIdforRecord,rotateDirection);
                //GameManager.ResultData.moveRecord.Add(rm);
            }
            if (rotateDirection != 0)
            {
                piece.RotatePiece(rotateDirection);
            }
            GJ.WinnerCheck();
            TM.ChangeTuen();
        }
Exemplo n.º 7
0
        //private BitArray2D _board;

        /// <summary>
        /// The actual Tetris game.
        /// </summary>
        public Tetris()
        {
            Random rand = new Random();

            Piece.Pieces RND = (Piece.Pieces)rand.Next(Piece.MAX_PIECE_TYPES);
            _mainPiece = new Piece(4, 0, RND);

            _gravityTime = 500;

            CreateBoard();
            _mainPiece.DrawPiece();

            _drawThread  = new Task(new Action(Draw));
            _inputThread = new Task(new Action(Input));
            _drawThread.Start();
            _inputThread.Start();

            while (!_inputThread.IsCompleted)
            {
                _mainPiece.SimulateGravity();
                Thread.Sleep(_gravityTime);
            }
        }
Exemplo n.º 8
0
        public void Update()
        {
            //エフェクト作動中、及びNPCのターンはプレイヤーはゲームに干渉できない。
            if (isEnd)
            {
                Debug.Log("end");
            }
            else if (effectHumanPiece > -1 || movingText.enabled == true)
            {
                if (ManagerStore.humanPlayer.HasPiece(effectHumanPiece) || movingText.enabled == true)
                {
                    //Debug.Log($"エフェクト作動中ピース: {effectHumanPiece}  NPCターンかどうか:{movingText.enabled}");
                }
                else
                {
                    //選択中の駒が取られた
                    if (selectedPieceId == effectHumanPiece)
                    {
                        //取られた駒がキング以外ならキングを選択状態にする
                        if (effectHumanPiece != humanPlayerKing)
                        {
                            selectedPieceId  = humanPlayerKing;
                            selectPiece      = ManagerStore.humanPlayer.GetPieceById(humanPlayerKing);
                            effectHumanPiece = -1;
                            PCM.ChangeCamera(humanPlayerKing);
                        }
                    }
                    else
                    {
                        //選択中の駒以外が取られた
                        PCM.ChangeCamera(selectedPieceId);
                    }

                    //書き込み
                    Debug.Log("before:" + GameManager.ResultData.positionRecord.Count);
                    GameManager.ResultData.positionRecord.Add(Position.PositionData.SaveByPlayer(ManagerStore.humanPlayer, ManagerStore.cp));
                    //Move.ReversibleMove rm = new Move.ReversibleMove();
                    //rm.InitCapturedMove(fromFaceIdforRecord,toFaceIdforRecord, pieceKindforRecord,GameManager.ManagerStore.fieldManager.GetFace2Face(fromFaceIdforRecord,toFaceIdforRecord).GetComponent<Field.SurfaceInfo>().FaceId);
                    //GameManager.ResultData.moveRecord.Add(rm);
                    Debug.Log("after:" + GameManager.ResultData.positionRecord.Count);

                    GJ.WinnerCheck();
                    if (ResultData.winner != PlayerKind.None)
                    {
                        isEnd = true;
                        StartCoroutine(DelayMethod(2.0f, () =>
                        {
                            Destroy(GameObject.Find("Field"));
                            Destroy(GameObject.Find("ManagerStore"));
                            SceneManager.LoadScene("Result");
                        }));
                    }
                    else
                    {
                        effectHumanPiece = -1;
                        viewCamera.SetActive(false);
                    }
                }
            }
            else
            {
                //初期化
                if (isNeedTurnStartInit == true)
                {
                    TurnStartInit();
                }
                //行動の選択
                if (TM.IsPlayerTurn() == true)
                {
                    PlayerTurn();
                }
                else if (TM.IsPlayerTurn() == false)
                {
                    CPTurn();
                }
                //else SkipCpTurn();//test用のCPスキップ関数 上の行と入れ替えるとcpをスキップする
            }
        }