Skip to content

Commit

Permalink
Update - 駒台の駒を同一種類でグルーピング(実装中)
Browse files Browse the repository at this point in the history
  • Loading branch information
youkura-ikuzee committed Feb 11, 2024
1 parent a4d9dea commit 2f91a72
Show file tree
Hide file tree
Showing 4 changed files with 239 additions and 11 deletions.
27 changes: 27 additions & 0 deletions Assets/Scripts/Data/PieceData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
}
}
49 changes: 38 additions & 11 deletions Assets/Scripts/GameSceneScreen/GameSceneController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using MyShogi.Model.Shogi.Core;
using UnityEngine;
using UnityEngine.UI;
using System.Text.RegularExpressions;

public class GameSceneController : MonoBehaviour
{
Expand All @@ -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();
}
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<Image>().sprite = Resources.Load<Sprite>("ShogiUI/Piece/" + PieceData.CapturePieceTypeToStr(pieceType));
capturePiece.GetComponent<Piece>().pieceType = PieceData.GetCapturePieceType(pieceType);
capturePiece.GetComponent<Piece>().piecePotition = new PieceData.PiecePotition(-1, -1);
capturePiece.GetComponent<Piece>().OnClickAction += () =>
{
SelectPiece(capturePiece.GetComponent<Piece>());

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<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;
}
}
};
// 取った駒を消去する
Destroy(piece.gameObject);
Debug.Log("=================================");
Debug.Log(capturePieceAreaData);

// 取った駒を消去する
Destroy(piece.gameObject);
}

public void OpenDebugMenu()
Expand Down
163 changes: 163 additions & 0 deletions Assets/Scripts/Shogi/CaptureAreaData.cs
Original file line number Diff line number Diff line change
@@ -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; }
}
11 changes: 11 additions & 0 deletions Assets/Scripts/Shogi/CaptureAreaData.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2f91a72

Please sign in to comment.