private bool SimulateIfAllPossibleMovesMakeCheck(EPlayerType player) { Debug.Assert(State != EGameState.CHECK, "You cannot use this method if Check"); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { Piece piece = mMap[i, j]; if (piece != null && piece.Player == player) { List <Move> moves = piece.PossibleMoves; foreach (Move move in moves) { int xTo = move.X; int yTo = move.Y; if (!SimulateIfCheckWhenGoToThere(player, j, i, xTo, yTo)) { return(false); } } } } } return(true); }
/// <summary> /// Bot イメージを取得する /// </summary> /// <param name="player"></param> /// <returns></returns> private Image GetBotImage(EPlayerType player) { // 該当するイメージのインデックス ECellImage?cellImageIndex = null; // 所有者で分岐 switch (player) { case EPlayerType.PLAYER1: cellImageIndex = ECellImage.PLAYER_1; break; case EPlayerType.PLAYER2: cellImageIndex = ECellImage.PLAYER_2; break; case EPlayerType.PLAYER3: cellImageIndex = ECellImage.PLAYER_3; break; case EPlayerType.PLAYER4: cellImageIndex = ECellImage.PLAYER_4; break; } // 該当なしの場合 if (!cellImageIndex.HasValue) { return(null); } // 結果を返す return(_cellImageList[(int)cellImageIndex.Value]); }
/// <summary> /// Each player has number as ID <1,4> /// if pPhotonPlayer is null it will be determined in SetType /// </summary> public void Init(int pPlayerNumber, EPlayerType pPlayerType, PhotonPlayer pPhotonPlayer) { PreInit(); gameObject.SetActive(true); brainiacs.GameInitInfo.AddPlayer(Info); Info.PhotonPlayer = pPhotonPlayer; Info.Number = pPlayerNumber; AssignColor((EPlayerColor)pPlayerNumber); SetName("player " + pPlayerNumber); SetType(pPlayerType); //if photon player is set then element is being //initialized at client bool elementCreated = pPhotonPlayer == null; //OnElementChanged(elementCreated); if (DebugData.TestHero != EHero.None) { heroSwapper.SetValue((int)DebugData.TestHero); } }
private bool ValidateIfCheck(Piece[,] map, EPlayerType player) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { Piece piece = map[i, j]; if (piece != null && piece.Player != player) { List <Move> moves = piece.PossibleMoves; foreach (Move move in moves) { int x = move.X; int y = move.Y; Piece king = map[y, x]; if (king != null && king.Type == EPieceType.KING && king.Player != piece.Player) { return(true); } } } } } return(false); }
public static PlayerDesc AddPlayer(int id, int force, EPlayerType type, string name) { if (Pathea.PeGameMgr.IsMultiCoop) { force = 1; } int index = Instance.GetPlayerIndex(id); if (-1 == index) { PlayerDesc desc = new PlayerDesc(); desc.ID = id; desc.Force = force; desc.Type = type; desc.Name = name; Instance.AddPlayerDesc(desc); return(desc); } else { Instance.m_Players[index].Force = force; return(Instance.m_Players[index]); } }
public void SendCardsToWinner(EPlayerType winnerType) { foreach (GameCardController gameCard in m_ActiveGameCards) { gameCard.SendCardToWinner(m_PlayerType, winnerType); } m_CardsLeftAmount.text = m_Deck.Count.ToString(); m_ActiveGameCards.Clear(); }
internal void Update(PlayerInitInfo pNewInfo) { Number = pNewInfo.Number; Hero = pNewInfo.Hero; Name = pNewInfo.Name; Color = pNewInfo.Color; PlayerType = pNewInfo.PlayerType; PhotonPlayer = pNewInfo.PhotonPlayer; IsReady = pNewInfo.IsReady; }
public void SetHero(EPlayerType ePlayerType, GameEntity entity) { if (entity == null) { heroMap.Remove(ePlayerType); } else { heroMap[ePlayerType] = entity; } }
public void ToggleTurn() { if (Turn == EPlayerType.BLACK) { Turn = EPlayerType.WHITE; } else { Turn = EPlayerType.BLACK; } }
private bool ValidateIfStalemate(Piece[,] map, EPlayerType player) { Debug.Assert(State != EGameState.CHECK, "Cannot be Stalemate if checked"); if (CountPossibleMoves(player) == 0) { return(true); } else if (SimulateIfAllPossibleMovesMakeCheck(player)) { return(true); } return(false); }
private bool ValidateIfCheckmate(Piece[,] map, EPlayerType player) { Debug.Assert(State == EGameState.CHECK, "Cannot be Checkmate if not checked"); if (CountPossibleMoves(player) == 0) { return(true); } else if (!SimulateIfCheckCanbeSolved(player)) { return(true); } return(false); }
//DEBUG INIT public PlayerInitInfo( int pNumber, EHero pHero, string pName, EPlayerColor pColor, EPlayerType pPlayerType, EKeyset pKeyset = EKeyset.None, PhotonPlayer pPhotonPlayer = null) { Number = pNumber; Hero = pHero; Name = pName; Color = pColor; PlayerType = pPlayerType; PhotonPlayer = pPhotonPlayer; Keyset = pKeyset; }
public bool SimulateIfCheckWhenGoToThere(EPlayerType player, int xFrom, int yFrom, int xTo, int yTo) { Debug.Assert(xFrom >= 0 || xFrom <= 7, "Wrong x of start position!"); Debug.Assert(yFrom >= 0 || yFrom <= 7, "Wrong y of start position!"); Debug.Assert(xTo >= 0 || xTo <= 7, "Wrong x of end position!"); Debug.Assert(yTo >= 0 || yTo <= 7, "Wrong y of end position!"); Piece[,] map = CopyMap(mMap); Piece piece = map[yFrom, xFrom]; Debug.Assert(piece != null, "You cannot use this method for the position of no piece!"); NormalMove(xFrom, yFrom, xTo, yTo, map); CalculateMoves(map); return(ValidateIfCheck(map, player)); }
//MASTER private void AddPlayer(EPlayerType pType) { btnGroupAddPlayer.transform.parent = null; UIGameSetupPlayerEl addedElement = AddPlayerElement(); addedElement.Init(players.IndexOf(addedElement) + 1, pType, null); //todo: check player count (max 4?) //keep btnAddPlayer at the end of the list btnGroupAddPlayer.transform.parent = playersHolder; OnPlayersChanged(); }
public GameEntity CreateHero(EHeroType heroType, EPlayerType playerType = EPlayerType.Player01) { string code = EntityUtil.GetHeroCode(heroType); var entity = CreateEntity(code); var playerDataCom = entity.GetComponent(GameComponentsLookup.PlayerData) as PlayerDataComponent; if (playerDataCom != null) { playerDataCom.playerType = playerType; EntityCache.GetInstance().SetHero(playerType, entity); } return(entity); }
private void CastlingMove(EPlayerType player, int xRook, Piece[,] map) { Debug.Assert(xRook == 0 || xRook == 7, $"Wrong Rook x position. xRook: {xRook}"); if (player == EPlayerType.BLACK) { if (xRook == 0) { map[0, 2] = map[0, 4]; map[0, 4] = null; map[0, 2].SetMoved(); map[0, 3] = map[0, 0]; map[0, 0] = null; map[0, 3].SetMoved(); } else { map[0, 6] = map[0, 4]; map[0, 4] = null; map[0, 6].SetMoved(); map[0, 5] = map[0, 7]; map[0, 7] = null; map[0, 5].SetMoved(); } } else { if (xRook == 0) { map[7, 2] = map[7, 4]; map[7, 4] = null; map[7, 2].SetMoved(); map[7, 3] = map[7, 0]; map[7, 0] = null; map[7, 3].SetMoved(); } else { map[7, 6] = map[7, 4]; map[7, 4] = null; map[7, 6].SetMoved(); map[7, 5] = map[7, 7]; map[7, 7] = null; map[7, 5].SetMoved(); } } }
private int CountPossibleMoves(EPlayerType player) { int cnt = 0; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { Piece piece = GetPieceOrNull(j, i); if (piece != null && piece.Player == player) { cnt += piece.PossibleMoves.Count; } } } return(cnt); }
private void SetType(EPlayerType pPlayerType) { btnRemove.gameObject.SetActive(true); Info.PlayerType = pPlayerType; bool isRemote = pPlayerType == EPlayerType.RemotePlayer; if (isRemote) { if (Info.PhotonPlayer == null) { playerNameText.text = "WAITING..."; } } //todo: even AI needs to have assigned photon player? else if (pPlayerType == EPlayerType.LocalPlayer || pPlayerType == EPlayerType.AI) { //local player = master if (PhotonNetwork.InRoom && !PhotonNetwork.IsMasterClient) { //client doesnt change local player } else { Info.PhotonPlayer = PhotonNetwork.LocalPlayer; } } keySetSwapper.gameObject.SetActive(pPlayerType == EPlayerType.LocalPlayer); playerTypeText.text = pPlayerType.ToString(); //start animation if player is remote and not connected yet portraitAnimator.enabled = isRemote && Info.PhotonPlayer == null; heroSwapper.SetInteractable(!isRemote); //master is always considered ready //client ready state is set in Init if (!isRemote) { SetReady(true); } }
protected override void OnDestroy(GameEntity entity) { if (entity.hasPlayerData) { EPlayerType playerType = entity.playerData.playerType; EntityCache.GetInstance().SetHero(playerType, null); //僚机也应该去掉 if (entity.playerData.wingmans != null) { foreach (var wingman in entity.playerData.wingmans) { EntityManager.GetInstance().DestroyEntity(wingman); } entity.playerData.wingmans = null; } } base.OnDestroy(entity); }
public AccountInfo GetAccountByDocument(EPlayerType ePlayerType, PersonalDocumentType documentType, string serial, string number) => Account;
public void PutPiece(int x, int y, EPieceType piece, EPlayerType player) { Debug.Assert(x >= 0 && x <= 7, $"Wrong X position: {x}"); Debug.Assert(y >= 0 && y <= 7, $"Wrong Y position: {y}"); mMap[y, x] = new Piece(piece, player); }
/// <summary> /// セルイメージを取得する /// </summary> /// <param name="cellType"></param> /// <param name="ownerPlayer"></param> /// <returns></returns> private Image GetCellImage(ECellType cellType, EPlayerType ownerPlayer) { // 該当するイメージのインデックス ECellImage cellImageIndex = ECellImage.FLOOR_NONE; // セルタイプで分岐 switch (cellType) { // 通常床 case ECellType.FLOOR: // 所有者で分岐 switch (ownerPlayer) { case EPlayerType.NO_PLAYER: cellImageIndex = ECellImage.FLOOR_NONE; break; case EPlayerType.PLAYER1: cellImageIndex = ECellImage.FLOOR_1; break; case EPlayerType.PLAYER2: cellImageIndex = ECellImage.FLOOR_2; break; case EPlayerType.PLAYER3: cellImageIndex = ECellImage.FLOOR_3; break; case EPlayerType.PLAYER4: cellImageIndex = ECellImage.FLOOR_4; break; } break; // スタート台 case ECellType.START: // 所有者で分岐 switch (ownerPlayer) { case EPlayerType.NO_PLAYER: cellImageIndex = ECellImage.START_NONE; break; case EPlayerType.PLAYER1: cellImageIndex = ECellImage.START_1; break; case EPlayerType.PLAYER2: cellImageIndex = ECellImage.START_2; break; case EPlayerType.PLAYER3: cellImageIndex = ECellImage.START_3; break; case EPlayerType.PLAYER4: cellImageIndex = ECellImage.START_4; break; } break; // 壁 case ECellType.WALL: cellImageIndex = ECellImage.WALL; break; // 網床 case ECellType.WIRE_MESH: cellImageIndex = ECellImage.WIRE_MESH; break; } // 結果を返す return(_cellImageList[(int)cellImageIndex]); }
public void CastlingMove(EPlayerType player, int xRook) { Debug.Assert(xRook == 0 || xRook == 7, $"Wrong Rook x position. xRook: {xRook}"); CastlingMove(player, xRook, mMap); }
public AccountInfo GetAccountByPhone(EPlayerType ePlayerType, string mobilePhone) => Account;
public PlayerEventArgs(PlayerData playerdata) { this.Name = playerdata.AgentName; this.Type = playerdata.PlayerType; }
public GameEntity GetHero(EPlayerType ePlayerType = EPlayerType.Player01) { return(heroMap[ePlayerType]); }
public static void PutPiece(int x, int y, EPieceType piece, EPlayerType player) { mBoard.PutPiece(x, y, piece, player); }
public Piece(EPieceType pieceType, EPlayerType player) { Type = pieceType; Player = player; }
/// <summary> /// 指定位置の所有プレイヤーを設定する /// </summary> /// <param name="pos">位置</param> /// <param name="playerType">プレイヤー区分</param> public void SetOwnerPlayerType(Position pos, EPlayerType playerType) { OwnerPlayerList[ConvertIndex(pos)] = playerType; }