diff --git a/Assets/Scripts/Data/PieceData.cs b/Assets/Scripts/Data/PieceData.cs index d3970bf..eb9a029 100644 --- a/Assets/Scripts/Data/PieceData.cs +++ b/Assets/Scripts/Data/PieceData.cs @@ -152,4 +152,31 @@ public static string CapturePieceTypeToStr(PieceType pieceType) { return PieceTypeToStr(GetCapturePieceType(pieceType)); } + + public static PieceType[] getPieceTypeList(bool isBlack) + { + return isBlack ? + new PieceType[] + { + PieceType.BlackPawn, + PieceType.BlackLance, + PieceType.BlackKnight, + PieceType.BlackSilver, + PieceType.BlackGold, + PieceType.BlackBishop, + PieceType.BlackRook, + PieceType.BlackKing + } : + new PieceType[] + { + PieceType.WhitePawn, + PieceType.WhiteLance, + PieceType.WhiteKnight, + PieceType.WhiteSilver, + PieceType.WhiteGold, + PieceType.WhiteBishop, + PieceType.WhiteRook, + PieceType.WhiteKing + }; + } } diff --git a/Assets/Scripts/GameSceneScreen/GameSceneController.cs b/Assets/Scripts/GameSceneScreen/GameSceneController.cs index c0a8e8e..f5e89a2 100644 --- a/Assets/Scripts/GameSceneScreen/GameSceneController.cs +++ b/Assets/Scripts/GameSceneScreen/GameSceneController.cs @@ -2,6 +2,7 @@ using MyShogi.Model.Shogi.Core; using UnityEngine; using UnityEngine.UI; +using System.Text.RegularExpressions; public class GameSceneController : MonoBehaviour { @@ -16,8 +17,9 @@ public class GameSceneController : MonoBehaviour private bool isPieceSelected = false; private GameState gameState; private bool isBlackTurn = true; - - private void Awake() + private CapturePieceAreaData capturePieceAreaData; + + private void Awake() { Init(); } @@ -81,6 +83,7 @@ private void SetCells() private void InitBoard(string boardJsonPath = "", BoardType boardType = BoardType.NoHandicap) { ClearPieces(); + capturePieceAreaData = new CapturePieceAreaData(); isPieceSelected = false; selectedPiece = null; isBlackTurn = true; @@ -244,16 +247,40 @@ private void CapturePiece(Piece piece, bool isBlack) var capturePieceArea = isBlack ? view.BlackCapturePieceArea : view.WhiteCapturePieceArea; var pieceType = piece.pieceType; Debug.Log("取った駒:" + pieceType); - var capturePiece = Instantiate(piecePrefab, capturePieceArea.transform); - capturePiece.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pieceType)); - capturePiece.GetComponent().pieceType = PieceData.GetCapturePieceType(pieceType); - capturePiece.GetComponent().piecePotition = new PieceData.PiecePotition(-1, -1); - capturePiece.GetComponent().OnClickAction += () => - { - SelectPiece(capturePiece.GetComponent()); + + capturePieceAreaData.UpdateCapturePieceData(pieceType, isBlack); + foreach (Transform child in capturePieceArea.transform) + { + Destroy(child.gameObject); + } + + 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().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pieceType)); + capturePieceByPrefab.GetComponent().pieceType = PieceData.GetCapturePieceType(pieceType); + capturePieceByPrefab.GetComponent().piecePotition = new PieceData.PiecePotition(-1, -1); + capturePieceByPrefab.GetComponent().OnClickAction += () => + { + SelectPiece(capturePieceByPrefab.GetComponent()); + }; + } else + { + var pieceByPrefab = Instantiate(piecePrefab, capturePieceArea.transform); + pieceByPrefab.GetComponent().sprite = Resources.Load("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pt)); + pieceByPrefab.GetComponent().piecePotition = new PieceData.PiecePotition(-1, -1); + pieceByPrefab.GetComponent().pieceType = pt; + } + } }; - // 取った駒を消去する - Destroy(piece.gameObject); + Debug.Log("================================="); + Debug.Log(capturePieceAreaData); + + // 取った駒を消去する + Destroy(piece.gameObject); } public void OpenDebugMenu() diff --git a/Assets/Scripts/Shogi/CaptureAreaData.cs b/Assets/Scripts/Shogi/CaptureAreaData.cs new file mode 100644 index 0000000..75f0c15 --- /dev/null +++ b/Assets/Scripts/Shogi/CaptureAreaData.cs @@ -0,0 +1,163 @@ +using System; +using MyShogi.Model.Shogi.Core; +using UnityEngine; +using UnityEngine.UI; +using System.Collections.Generic; +using UnityEditor; + +public interface ICapturePieceNum +{ + int pawn { get; set; } + int lance { get; set; } + int knight { get; set; } + int silver { get; set; } + int gold { get; set; } + int bishop { get; set; } + int rook { get; set; } + int king { get; set; } +} + +public class CapturePieceAreaData +{ + public ICapturePieceNum blackCapturePiece; + public ICapturePieceNum whiteCapturePiece; + + public override string ToString() + { + return $"Black: Pawn , Num: {blackCapturePiece.pawn} \n" + + $"Black: Lance , Num: {blackCapturePiece.lance} \n" + + $"Black: Knight, Num: {blackCapturePiece.knight} \n" + + $"Black: Silver, Num: {blackCapturePiece.silver} \n" + + $"Black: Gold , Num: {blackCapturePiece.gold} \n" + + $"Black: Bishop, Num: {blackCapturePiece.bishop} \n" + + $"Black: Rook , Num: {blackCapturePiece.rook} \n" + + $"Black: King , Num: {blackCapturePiece.king} \n" + + $"White: Pawn , Num: {whiteCapturePiece.pawn} \n" + + $"White: Lance , Num: {whiteCapturePiece.lance} \n" + + $"White: Knight, Num: {whiteCapturePiece.knight} \n" + + $"White: Silver, Num: {whiteCapturePiece.silver} \n" + + $"White: Gold , Num: {whiteCapturePiece.gold} \n" + + $"White: Bishop, Num: {whiteCapturePiece.bishop} \n" + + $"White: Rook , Num: {whiteCapturePiece.rook} \n" + + $"White: King , Num: {whiteCapturePiece.king} "; ; + } + + public CapturePieceAreaData() + { + InitCaptureArea(); + } + + private void InitCaptureArea() + { + blackCapturePiece = CreateEmptyCapturePiece(); + whiteCapturePiece = CreateEmptyCapturePiece(); + Debug.Log("̏"); + } + + public int getPieceNum(PieceType pieceType, bool isBlack) + { + ICapturePieceNum capturePiece = isBlack ? blackCapturePiece : whiteCapturePiece; + + switch (pieceType) + { + case PieceType.BlackPawn: + case PieceType.WhitePawn: + return capturePiece.pawn; + case PieceType.BlackLance: + case PieceType.WhiteLance: + return capturePiece.lance; + case PieceType.BlackKnight: + case PieceType.WhiteKnight: + return capturePiece.knight; + case PieceType.BlackSilver: + case PieceType.WhiteSilver: + return capturePiece.silver; + case PieceType.BlackGold: + case PieceType.WhiteGold: + return capturePiece.gold; + case PieceType.BlackBishop: + case PieceType.WhiteBishop: + return capturePiece.bishop; + case PieceType.BlackRook: + case PieceType.WhiteRook: + return capturePiece.rook; + case PieceType.BlackKing: + case PieceType.WhiteKing: + return capturePiece.king; + default: + Debug.LogError("Unknown pieceType: " + pieceType); + return 0; + } + } + + public void UpdateCapturePieceData(PieceType pieceType, bool isBlack) + { + ICapturePieceNum capturePiece = isBlack ? blackCapturePiece : whiteCapturePiece; + + switch (pieceType) + { + case PieceType.BlackPawn: + case PieceType.WhitePawn: + capturePiece.pawn++; + break; + case PieceType.BlackLance: + case PieceType.WhiteLance: + capturePiece.lance++; + break; + case PieceType.BlackKnight: + case PieceType.WhiteKnight: + capturePiece.knight++; + break; + case PieceType.BlackSilver: + case PieceType.WhiteSilver: + capturePiece.silver++; + break; + case PieceType.BlackGold: + case PieceType.WhiteGold: + capturePiece.gold++; + break; + case PieceType.BlackBishop: + case PieceType.WhiteBishop: + capturePiece.bishop++; + break; + case PieceType.BlackRook: + case PieceType.WhiteRook: + capturePiece.rook++; + break; + case PieceType.BlackKing: + case PieceType.WhiteKing: + capturePiece.king++; + break; + default: + Debug.LogError("Unknown pieceType: " + pieceType); + break; + } + } + + private ICapturePieceNum CreateEmptyCapturePiece() + { + return new CapturePiece + { + pawn = 0, + lance = 0, + knight = 0, + silver = 0, + gold = 0, + bishop = 0, + rook = 0, + king = 0 + }; + } + +} +public class CapturePiece : ICapturePieceNum +{ + public int pawn { get; set; } + public int lance { get; set; } + public int knight { get; set; } + public int silver { get; set; } + public int gold { get; set; } + public int bishop { get; set; } + public int rook { get; set; } + public int king { get; set; } +} \ No newline at end of file diff --git a/Assets/Scripts/Shogi/CaptureAreaData.cs.meta b/Assets/Scripts/Shogi/CaptureAreaData.cs.meta new file mode 100644 index 0000000..923c3c3 --- /dev/null +++ b/Assets/Scripts/Shogi/CaptureAreaData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07b3df63b5319634da57b5a7eedff5f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: