diff --git a/Assets/Scripts/Data/PieceData.cs b/Assets/Scripts/Data/PieceData.cs
index ecf6c98..dbfc3dd 100644
--- a/Assets/Scripts/Data/PieceData.cs
+++ b/Assets/Scripts/Data/PieceData.cs
@@ -58,44 +58,44 @@ public static PieceType StrToPieceType(string pieceTypeStr)
}
}
- public static string PieceTypeToStr(PieceType pieceType)
+ public static string PieceTypeToStr(PieceType pieceType, bool isAIFirst)
{
// ここでPieceTypeから文字列に変換する
// 例: PieceType.WhitePawn -> "white_pawn"
switch (pieceType)
{
case PieceType.WhitePawn:
- return "white_pawn";
+ return isAIFirst ? "white_pawn" : "black_pawn";
case PieceType.WhiteLance:
- return "white_lance";
+ return isAIFirst ? "white_lance" : "black_lance";
case PieceType.WhiteKnight:
- return "white_knight";
+ return isAIFirst ? "white_knight" : "black_knight";
case PieceType.WhiteSilver:
- return "white_silver";
+ return isAIFirst ? "white_silver" : "black_silver";
case PieceType.WhiteGold:
- return "white_gold";
+ return isAIFirst ? "white_gold" : "black_gold";
case PieceType.WhiteBishop:
- return "white_bishop";
+ return isAIFirst ? "white_bishop" : "black_bishop";
case PieceType.WhiteRook:
- return "white_rook";
+ return isAIFirst ? "white_rook" : "black_rook";
case PieceType.WhiteKing:
- return "white_king";
+ return isAIFirst ? "white_king" : "black_king";
case PieceType.BlackPawn:
- return "black_pawn";
+ return isAIFirst ? "black_pawn" : "white_pawn";
case PieceType.BlackLance:
- return "black_lance";
+ return isAIFirst ? "black_lance" : "white_lance";
case PieceType.BlackKnight:
- return "black_knight";
+ return isAIFirst ? "black_knight" : "white_knight";
case PieceType.BlackSilver:
- return "black_silver";
+ return isAIFirst ? "black_silver" : "white_silver";
case PieceType.BlackGold:
- return "black_gold";
+ return isAIFirst ? "black_gold" : "white_gold";
case PieceType.BlackBishop:
- return "black_bishop";
+ return isAIFirst ? "black_bishop" : "white_bishop";
case PieceType.BlackRook:
- return "black_rook";
+ return isAIFirst ? "black_rook" : "white_rook";
case PieceType.BlackKing:
- return "black_king";
+ return isAIFirst ? "black_king" : "white_king";
default:
return "none";
}
@@ -183,16 +183,6 @@ public static PieceType GetCapturePieceType(PieceType pieceType)
}
}
- ///
- /// 取った駒を取ったプレイヤーの駒に変換する
- ///
- ///
- ///
- public static string CapturePieceTypeToStr(PieceType pieceType)
- {
- return PieceTypeToStr(GetCapturePieceType(pieceType));
- }
-
public static PieceType[] getPieceTypeList(bool isBlack)
{
return isBlack ?
diff --git a/Assets/Scripts/GameSceneScreen/GameSceneController.cs b/Assets/Scripts/GameSceneScreen/GameSceneController.cs
index 7730949..b80105c 100644
--- a/Assets/Scripts/GameSceneScreen/GameSceneController.cs
+++ b/Assets/Scripts/GameSceneScreen/GameSceneController.cs
@@ -88,7 +88,7 @@ private void SetCells()
{
return;
}
- await MovePiece(cell, isBlackTurn);
+ await MovePiece(cell);
}
});
@@ -269,7 +269,7 @@ private async UniTask SelectPiece(Piece piece)
// 選択されている駒を移動させる
selectedPiece.transform.SetParent(piece.transform.parent);
// 移動先のマスの駒を取る
- CapturePiece(piece, isBlackTurn);
+ CapturePiece(piece);
// 駒の位置を更新する
selectedPiece.transform.localPosition = Vector3.zero;
selectedPiece.piecePotition = new PieceData.PiecePotition(piece.piecePotition.x, piece.piecePotition.y);
@@ -301,7 +301,7 @@ private async UniTask SelectPiece(Piece piece)
///
///
///
- private async UniTask MovePiece(Cell cell, bool isBlack)
+ private async UniTask MovePiece(Cell cell)
{
if (!isPieceSelected)
{
@@ -380,24 +380,24 @@ private async UniTask MovePiece(Cell cell, bool isBlack)
// 持ち駒が消費されていた場合は持ち駒情報を更新する
if(selectedPiece.IsCaptured()) {
- capturePieceAreaData.UpdateCapturePieceData(selectedPiece.pieceType, isBlack, selectedPiece.IsCaptured());
+ capturePieceAreaData.UpdateCapturePieceData(selectedPiece.pieceType, IsUpdateBlack(), selectedPiece.IsCaptured());
Debug.Log("持ち駒情報の更新 \n" + capturePieceAreaData);
// 駒数表示を非有効化
selectedPiece.IsActivePeiceNumText(0);
- var capturePieceArea = isBlack ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
+ var capturePieceArea = IsPlayerTurn() ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
// 最新のcapturePieceAreaDataを反映する前に古い持ち駒の表示を削除
view.ClearCapturePieceArea(capturePieceArea.transform);
// 駒台を更新
- foreach (PieceType pt in PieceData.getPieceTypeList(isBlack))
+ foreach (PieceType pt in PieceData.getPieceTypeList(IsUpdateBlack()))
{
- var pieceNum = capturePieceAreaData.getPieceNum(pt, isBlack);
+ var pieceNum = capturePieceAreaData.getPieceNum(pt, IsUpdateBlack());
if (pieceNum == 0) continue;
var pieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform);
- pieceByPrefab.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.PieceTypeToStr(pt));
+ pieceByPrefab.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.PieceTypeToStr(pt, IsPlayerBlack()));
pieceByPrefab.GetComponent().piecePotition = new PieceData.PiecePotition(-1, -1);
pieceByPrefab.GetComponent().pieceType = pt;
pieceByPrefab.GetComponent().IsActivePeiceNumText(pieceNum);
@@ -443,25 +443,25 @@ private async UniTask MovePiece(Cell cell, bool isBlack)
///
///
///
- private void CapturePiece(Piece piece, bool isBlack)
+ private void CapturePiece(Piece piece)
{
- var capturePieceArea = isBlack ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
+ var capturePieceArea = IsPlayerTurn() ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
var pieceType = piece.pieceType;
Debug.Log("取った駒:" + pieceType);
- capturePieceAreaData.UpdateCapturePieceData(pieceType, isBlack);
+ capturePieceAreaData.UpdateCapturePieceData(pieceType, IsUpdateBlack());
Debug.Log("持ち駒情報の更新 \n" + capturePieceAreaData);
// 最新のcapturePieceAreaDataを反映する前に古い持ち駒の表示を削除
view.ClearCapturePieceArea(capturePieceArea.transform);
- foreach (PieceType pt in PieceData.getPieceTypeList(isBlack))
+ foreach (PieceType pt in PieceData.getPieceTypeList(IsUpdateBlack()))
{
- var pieceNum = capturePieceAreaData.getPieceNum(pt, isBlack);
+ var pieceNum = capturePieceAreaData.getPieceNum(pt, IsUpdateBlack());
if(pieceNum == 0) continue;
var pieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform);
- pieceByPrefab.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.PieceTypeToStr(pt));
+ pieceByPrefab.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.PieceTypeToStr(pt, IsPlayerBlack()));
pieceByPrefab.GetComponent().piecePotition = new PieceData.PiecePotition(-1, -1);
pieceByPrefab.GetComponent().pieceType = pt;
pieceByPrefab.GetComponent().IsActivePeiceNumText(pieceNum);
@@ -504,11 +504,20 @@ private Piece GetPieceOnBoard(int x, int y)
///
///
///
- private Piece GetCapturedPiece(PieceType pieceType, bool isBlack)
+ private Piece GetCapturedPiece(PieceType pieceType)
{
- var capturePieceArea = isBlack ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
- var piece = capturePieceArea.GetComponentInChildren();
- return piece;
+ var capturePieceArea = IsPlayerTurn() ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea;
+ // 駒台にある駒で指定されたPieceTypeのものを取得
+ var pieceList = capturePieceArea.GetComponentsInChildren();
+ foreach (var piece in pieceList)
+ {
+ if (piece.pieceType == pieceType)
+ {
+ return piece;
+ }
+ }
+
+ return null;
}
private bool IsPlayerTurn()
@@ -517,10 +526,22 @@ private bool IsPlayerTurn()
return isBlackTurn != isAIFirst;
}
- ///
- /// AIによる着手を行う
- ///
- private async UniTask GetAIAction()
+ private bool IsPlayerBlack()
+ {
+ // プレイヤーの持つ駒のPieceTypeがBlackかWhiteかを判定
+ return !isAIFirst;
+ }
+
+ private bool IsUpdateBlack()
+ {
+ // 更新したい情報に関連するPieceTypeがBlackに紐づいているかWhiteに紐づいているかを判定
+ return IsPlayerBlack() == IsPlayerTurn();
+ }
+
+ ///
+ /// AIによる着手を行う
+ ///
+ private async UniTask GetAIAction()
{
await UniTask.Delay(2000);
var move = battleAI.GetMove(gameState);
@@ -535,7 +556,8 @@ private async UniTask GetAIAction()
Debug.Log("fromX:" + fromX + " fromY:" + fromY + " toX:" + toX + " toY:" + toY);
isPieceSelected = true;
- if(isAIFirst)
+ // AIが先手の場合は座標を反転させる
+ if(!IsPlayerBlack())
{
fromX = 8 - fromX;
fromY = 8 - fromY;
@@ -547,8 +569,9 @@ private async UniTask GetAIAction()
if (move.IsDrop())
{
var pieceType = Converter.DropPieceToPieceType(move.DroppedPiece(), isAIFirst);
- selectedPiece = GetCapturedPiece(pieceType, isAIFirst);
- await MovePiece(cells[toY, toX], isAIFirst);
+ Debug.Log("打つ駒:" + pieceType);
+ selectedPiece = GetCapturedPiece(pieceType);
+ await MovePiece(cells[toY, toX]);
return;
}
@@ -572,7 +595,7 @@ private async UniTask GetAIAction()
}
else
{
- await MovePiece(cells[toY, toX], isAIFirst);
+ await MovePiece(cells[toY, toX]);
}
// 変数を初期化