/// <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); }
//移動できるか確認 移動先に存在する駒の種類を確認する 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); }
//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; } }
//駒を実際に動かす ターン交代 勝利条件確認 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(); }
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(); }
//駒を実際に動かす ターン交代 勝利条件確認 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(); }
//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); } }
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をスキップする } }