Skip to content

Commit

Permalink
Fix - 持ち駒配置のバグを修正および持ち駒使用時の情報更新を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
youkura-ikuzee committed Feb 11, 2024
1 parent 2f91a72 commit 7cb0302
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 33 deletions.
45 changes: 23 additions & 22 deletions Assets/Scripts/GameSceneScreen/GameSceneController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ private void SetCells()
{
if (selectedPiece != null)
{
MovePiece(cell);
MovePiece(cell, isBlackTurn);
}
};
if((i+1) % boardColumns == 0)
Expand Down Expand Up @@ -189,7 +189,7 @@ private void SelectPiece(Piece piece)
isBlackTurn = !isBlackTurn;
}

private void MovePiece(Cell cell)
private void MovePiece(Cell cell, bool isBlack)
{
if (!isPieceSelected)
{
Expand Down Expand Up @@ -223,6 +223,13 @@ private void MovePiece(Cell cell)

// 選択されている駒を移動させる
selectedPiece.transform.SetParent(cell.transform);

// 持ち駒が消費されていた場合は持ち駒情報を更新する
if(selectedPiece.IsCaptured()) {
capturePieceAreaData.UpdateCapturePieceData(selectedPiece.pieceType, isBlack, selectedPiece.IsCaptured());
Debug.Log("持ち駒情報の更新 \n" + capturePieceAreaData);
};

// 駒の位置を更新する
selectedPiece.transform.localPosition = Vector3.zero;
selectedPiece.piecePotition = new PieceData.PiecePotition(cell.x, cell.y);
Expand All @@ -249,35 +256,29 @@ private void CapturePiece(Piece piece, bool isBlack)
Debug.Log("取った駒:" + pieceType);

capturePieceAreaData.UpdateCapturePieceData(pieceType, isBlack);
Debug.Log("持ち駒情報の更新 \n" + capturePieceAreaData);

// 最新のcapturePieceAreaDataを反映する前に古い持ち駒の表示を削除
foreach (Transform child in capturePieceArea.transform)
{
Destroy(child.gameObject);
}

foreach (PieceType pt in PieceData.getPieceTypeList(isBlack)) {
// capturePieceAreaDataの情報を元に持ち駒の表示を更新
foreach (PieceType pt in PieceData.getPieceTypeList(isBlack)) {
for (var pieceNum = 0; pieceNum < capturePieceAreaData.getPieceNum(pt, isBlack); pieceNum++)
{
if(pt == pieceType)
{
var capturePieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform);
capturePieceByPrefab.GetComponent<Image>().sprite = Resources.Load<Sprite>("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pieceType));
capturePieceByPrefab.GetComponent<Piece>().pieceType = PieceData.GetCapturePieceType(pieceType);
capturePieceByPrefab.GetComponent<Piece>().piecePotition = new PieceData.PiecePotition(-1, -1);
capturePieceByPrefab.GetComponent<Piece>().OnClickAction += () =>
{
SelectPiece(capturePieceByPrefab.GetComponent<Piece>());
};
} else
{
var pieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform);
pieceByPrefab.GetComponent<Image>().sprite = Resources.Load<Sprite>("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pt));
pieceByPrefab.GetComponent<Piece>().piecePotition = new PieceData.PiecePotition(-1, -1);
pieceByPrefab.GetComponent<Piece>().pieceType = pt;
}
var pieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform);
pieceByPrefab.GetComponent<Image>().sprite = Resources.Load<Sprite>("ShogiUI/Piece/" + PieceData.PieceTypeToStr(pt));
pieceByPrefab.GetComponent<Piece>().piecePotition = new PieceData.PiecePotition(-1, -1);
pieceByPrefab.GetComponent<Piece>().pieceType = pt;
pieceByPrefab.GetComponent<Piece>().OnClickAction += () =>
{
SelectPiece(pieceByPrefab.GetComponent<Piece>());
};

}
};
Debug.Log("=================================");
Debug.Log(capturePieceAreaData);

// 取った駒を消去する
Destroy(piece.gameObject);
Expand Down
24 changes: 13 additions & 11 deletions Assets/Scripts/Shogi/CaptureAreaData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ public interface ICapturePieceNum
int king { get; set; }
}

public class CapturePieceAreaData
// 先手後手の持ち駒に関する情報を管理するクラス
public class CapturePieceAreaData
{
public ICapturePieceNum blackCapturePiece;
public ICapturePieceNum whiteCapturePiece;
Expand Down Expand Up @@ -89,44 +90,45 @@ public int getPieceNum(PieceType pieceType, bool isBlack)
return 0;
}
}

public void UpdateCapturePieceData(PieceType pieceType, bool isBlack)
public void UpdateCapturePieceData(PieceType pieceType, bool isBlack, bool isCaptured = false)
{
ICapturePieceNum capturePiece = isBlack ? blackCapturePiece : whiteCapturePiece;

// 持ち駒を消費した場合と取得し場合で更新式を分岐
switch (pieceType)
{
case PieceType.BlackPawn:
case PieceType.WhitePawn:
capturePiece.pawn++;
capturePiece.pawn += isCaptured ? -1 : 1;
break;
case PieceType.BlackLance:
case PieceType.WhiteLance:
capturePiece.lance++;
capturePiece.lance += isCaptured ? -1 : 1;
break;
case PieceType.BlackKnight:
case PieceType.WhiteKnight:
capturePiece.knight++;
capturePiece.knight += isCaptured ? -1 : 1;
break;
case PieceType.BlackSilver:
case PieceType.WhiteSilver:
capturePiece.silver++;
capturePiece.silver += isCaptured ? -1 : 1;
break;
case PieceType.BlackGold:
case PieceType.WhiteGold:
capturePiece.gold++;
capturePiece.gold += isCaptured ? -1 : 1;
break;
case PieceType.BlackBishop:
case PieceType.WhiteBishop:
capturePiece.bishop++;
capturePiece.bishop += isCaptured ? -1 : 1;
break;
case PieceType.BlackRook:
case PieceType.WhiteRook:
capturePiece.rook++;
capturePiece.rook += isCaptured ? -1 : 1;
break;
case PieceType.BlackKing:
case PieceType.WhiteKing:
capturePiece.king++;
capturePiece.king += isCaptured ? -1 : 1;
break;
default:
Debug.LogError("Unknown pieceType: " + pieceType);
Expand Down

0 comments on commit 7cb0302

Please sign in to comment.