101 lines
3.4 KiB
C#
101 lines
3.4 KiB
C#
using UnityEngine;
|
|
|
|
public partial class GameLogic
|
|
{
|
|
// 돌 카운터 증가 함수
|
|
public void CountStoneCounter() => _totalStoneCounter++;
|
|
|
|
// 착수 버튼 클릭시 호출되는 함수
|
|
public void OnConfirm() => CurrentPlayerState.ProcessMove(this, CurrentTurn, SelectedRow, SelectedCol);
|
|
|
|
// 스톤의 상태변경 명령함수
|
|
private void SetStoneNewState(Enums.StoneState state, int row, int col)
|
|
{
|
|
StoneController.SetStoneState(state, row, col);
|
|
}
|
|
|
|
public void SetStoneSelectedState(int row, int col)
|
|
{
|
|
if (_board[row, col] != Enums.PlayerType.None) return;
|
|
|
|
if (StoneController.GetStoneState(row, col) != Enums.StoneState.None &&
|
|
CurrentTurn == Enums.PlayerType.PlayerA) return;
|
|
// 첫수 및 중복 확인
|
|
if ((SelectedRow != row || SelectedCol != col) && (SelectedRow != -1 && SelectedCol != -1))
|
|
{
|
|
StoneController.SetStoneState(Enums.StoneState.None, SelectedRow, SelectedCol);
|
|
}
|
|
|
|
(SelectedRow, SelectedCol) = (row, col);
|
|
|
|
StoneController.SetStoneState(Enums.StoneState.Selected, row, col);
|
|
}
|
|
|
|
// 보드에 돌추가 함수
|
|
public void SetNewBoardValue(Enums.PlayerType playerType, int row, int col)
|
|
{
|
|
if (_board[row, col] != Enums.PlayerType.None) return;
|
|
|
|
AudioManager.Instance.PlayStoneSound(); //사운드 추가
|
|
|
|
switch (playerType)
|
|
{
|
|
case Enums.PlayerType.PlayerA:
|
|
StoneController.SetStoneType(Enums.StoneType.Black, row, col);
|
|
StoneController.SetStoneState(Enums.StoneState.LastPositioned, row, col);
|
|
_board[row, col] = Enums.PlayerType.PlayerA;
|
|
LastNSelectedSetting(row, col);
|
|
|
|
ReplayManager.Instance.RecordStonePlaced(Enums.StoneType.Black, row, col); //기보 데이터 저장
|
|
break;
|
|
case Enums.PlayerType.PlayerB:
|
|
StoneController.SetStoneType(Enums.StoneType.White, row, col);
|
|
StoneController.SetStoneState(Enums.StoneState.LastPositioned, row, col);
|
|
_board[row, col] = Enums.PlayerType.PlayerB;
|
|
LastNSelectedSetting(row, col);
|
|
|
|
ReplayManager.Instance.RecordStonePlaced(Enums.StoneType.White, row, col);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// 돌 지우는 함수
|
|
public void RemoveStone(int row, int col)
|
|
{
|
|
_board[row, col] = Enums.PlayerType.None;
|
|
StoneController.SetStoneType(Enums.StoneType.None, row, col);
|
|
StoneController.SetStoneState(Enums.StoneState.None, row, col);
|
|
}
|
|
|
|
// 마지막 좌표와 선택 좌표 세팅
|
|
private void LastNSelectedSetting(int row, int col)
|
|
{
|
|
//첫수 확인
|
|
if (_lastRow != -1 || _lastCol != -1)
|
|
{
|
|
StoneController.SetStoneState(Enums.StoneState.None, _lastRow, _lastCol);
|
|
}
|
|
|
|
//마지막 좌표 저장
|
|
(_lastRow, _lastCol) = (row, col);
|
|
|
|
//선택 좌표 초기화
|
|
(SelectedRow, SelectedCol) = (-1, -1);
|
|
}
|
|
|
|
// 게임 끝
|
|
public void EndGame(Enums.GameResult result)
|
|
{
|
|
SetState(null);
|
|
ReplayManager.Instance.SaveReplayDataResult(result);
|
|
ChangeGameInProgress(false);
|
|
// 인게임 버튼 표시
|
|
GameManager.Instance.SetButtonsIndicator(false);
|
|
}
|
|
|
|
public void SetLastPositioned(int row, int col)
|
|
{
|
|
_lastRow = row;
|
|
_lastCol = col;
|
|
}
|
|
} |