void OnTriggerEnter(Collider other)
    {
        if (GameMovieCtrl.IsActivePlayer)
        {
            if (Network.peerType == NetworkPeerType.Server)
            {
            }
            else
            {
                return;
            }
        }

        XkPlayerCtrl script = other.GetComponent <XkPlayerCtrl>();

        if (script == null)
        {
            return;
        }
        //Debug.Log("Unity:"+"*********************name "+gameObject.name);

        PSDingDianAimCamera.DingDianAimCamera     = null;
        PSDingDianNoAimCamera.DingDianNoAimCamera = null;
        PSZiYouMoveCamera.ZYMoveCamera            = null;
        if (CamState == PSCameraState.GenSuiMoveCam)
        {
            PlayerTypeEnum playerType = script.PlayerSt;
            switch (playerType)
            {
            case PlayerTypeEnum.FeiJi:
                PSGenSuiMoveCamera.GetInstanceFeiJi().ActiveGenSuiMoveCam(IndexGenSuiMove);
                break;

            case PlayerTypeEnum.TanKe:
                PSGenSuiMoveCamera.GetInstanceTanKe().ActiveGenSuiMoveCam(IndexGenSuiMove);
                break;
            }
        }

        if (DingDianAimCam != null && CamState == PSCameraState.DingDianAimCam)
        {
            GameObject playerObj = XkGameCtrl.GetInstance().GetRandAimPlayerObj();
            Transform  aimTr     = playerObj == null ? null : playerObj.transform;
            DingDianAimCam.ActiveCamera(aimTr);
        }
        CheckZiYouMoveCam(script);
        CheckDingDianNoAimCam();

        if (GameMovieCtrl.IsActivePlayer /*|| XkGameCtrl.GetInstance().IsServerCameraTest*/)
        {
            return;
        }
        CheckCameraTimeShake();
        CheckExplodePoint();
        CheckTanKePlayerAimPoint();
        CheckAutoFireCom();
        CheckTriggerPlayAni();
        CheckWorldTimeScale();
        CheckAutoFirePlayerAmmoType();
    }
Example #2
0
    public void RefreshGameInfo()
    {
        player1type = PlayerTypeEnum.None;
        player2type = PlayerTypeEnum.None;
        player3type = PlayerTypeEnum.None;
        player4type = PlayerTypeEnum.None;

        player1char = CharacterEnum.None;
        player2char = CharacterEnum.None;
        player3char = CharacterEnum.None;
        player4char = CharacterEnum.None;

        player1score = -1;
        player2score = -1;
        player3score = -1;
        player4score = -1;

        player1lifes = -1;
        player2lifes = -1;
        player3lifes = -1;
        player4lifes = -1;

        player1deaths = -1;
        player2deaths = -1;
        player3deaths = -1;
        player4deaths = -1;
    }
Example #3
0
    public void RefreshGameInfo()
    {
        player1type = PlayerTypeEnum.None;
        player2type = PlayerTypeEnum.None;
        player3type = PlayerTypeEnum.None;
        player4type = PlayerTypeEnum.None;

        player1char = CharacterEnum.None;
        player2char = CharacterEnum.None;
        player3char = CharacterEnum.None;
        player4char = CharacterEnum.None;

        player1score = -1;
        player2score = -1;
        player3score = -1;
        player4score = -1;

        player1lifes = -1;
        player2lifes = -1;
        player3lifes = -1;
        player4lifes = -1;

        player1deaths = -1;
        player2deaths = -1;
        player3deaths = -1;
        player4deaths = -1;
    }
    // Use this for initialization
    void Awake()
    {
        PlayerScript = GetComponentInParent <XkPlayerCtrl>();
        PlayerScript.SetPlayerZhiShengJiScript(this);
        PlayerType   = PlayerScript.PlayerSt;
        RigidbodyCom = GetComponent <Rigidbody>();
        switch (PlayerType)
        {
        case PlayerTypeEnum.FeiJi:
            break;

        case PlayerTypeEnum.TanKe:
            RigidbodyCom.useGravity         = false;
            RigidbodyCom.centerOfMass       = MessCenterVal;
            RigidbodyCom.maxAngularVelocity = 2f;
            if (XkGameCtrl.GameJiTaiSt != GameJiTaiType.TanKeJiTai)
            {
                if (Network.peerType != NetworkPeerType.Disconnected)
                {
                    RigidbodyCom.isKinematic = true;
                }
                //RigidbodyCom.isKinematic = true; //test
            }
            Invoke("DelaySetTanKeParent", 2f);
            break;
        }
        IsTestRigMessCenter = false;
    }
        private List<string> _GetPotentialMoves(ChessGame g, PlayerTypeEnum player, string source)
        {
            List<string> potentialMoves = new List<string>();

            var chessboard = g.ChessBoard;
            ChessPiece sourcePiece = chessboard.Get(source);
            Tuple<int, int> sourceLocation = NotationHelper.Translate(source);
            var relativeMoveProvider = m_relativePathProviderFactory.GetProviderByPieceType(sourcePiece.Type);
            var relativePaths = relativeMoveProvider.GetRelativePaths(sourcePiece);
            var absolutePaths = BoardLogic.ConvertToAbsolutePaths(sourceLocation, relativePaths);

            foreach (Tuple<int, int>[] absolutePath in absolutePaths)
            {
                foreach (Tuple<int, int> absoluteMove in absolutePath)
                {
                    string destinationAsNotation = NotationHelper.Translate(absoluteMove);

                    var canMove = _rules.CanMove(
                        chessboard,
                        source + destinationAsNotation, player, g.GetMoves().LastOrDefault());

                    if (canMove.Success)
                    {
                        potentialMoves.Add(destinationAsNotation);
                    }
                }
            }

            return potentialMoves;
        }
 private bool isAuthorized(PlayerTypeEnum playerType)
 {
     if ((int)playerType >= (int)Authorized)
     {
         return(true);
     }
     return(false);
 }
    // Use this for initialization
    void Start()
    {
        CamShakeCom          = gameObject.AddComponent <CameraShake>();
        PlayerCamera         = camera;
        camera.targetTexture = null;
        CameraTran           = transform;
        XkPlayerCtrl script = GetComponentInParent <XkPlayerCtrl>();

        switch (script.PlayerSt)
        {
        case PlayerTypeEnum.FeiJi:
            _InstanceFeiJi = this;
            PlayerSt       = PlayerTypeEnum.FeiJi;
            FeiJiCameraTan = transform;
            gameObject.SetActive(false);
            if (XkGameCtrl.GetInstance().m_CaiPiaoFlyData != null)
            {
                XkGameCtrl.GetInstance().m_CaiPiaoFlyData.m_CaiPiaoEndTrP1 = m_CaiPiaoEndTrP1;
                XkGameCtrl.GetInstance().m_CaiPiaoFlyData.m_CaiPiaoEndTrP2 = m_CaiPiaoEndTrP2;
                XkGameCtrl.GetInstance().m_CaiPiaoFlyData.m_CaiPiaoEndTrP3 = m_CaiPiaoEndTrP3;
            }
            break;

        case PlayerTypeEnum.TanKe:
            _InstanceTanKe = this;
            PlayerSt       = PlayerTypeEnum.TanKe;
            TanKeCameraTan = transform;
            gameObject.SetActive(false);
            break;

        case PlayerTypeEnum.CartoonCamera:
            _InstanceCartoon = this;
            PlayerSt         = PlayerTypeEnum.CartoonCamera;
            break;
        }

        CameraObj    = gameObject;
        PlayerScript = GetComponentInParent <XkPlayerCtrl>();
        if (PlayerScript != null)
        {
            PlayerScript.SetPlayerCamera(this);
        }

        GameObject obj = new GameObject();

        obj.name                   = "CameraParent";
        CameraParent               = obj.transform;
        CameraParent.parent        = CameraTran.parent;
        CameraParent.localPosition = CameraTran.localPosition;
        CameraParent.rotation      = CameraTran.rotation;
        CameraTran.parent          = null;
        CameraTran.rotation        = CameraParent.localRotation;
        SetEnableCamera(false);
        for (int i = 0; i < PlayerSpawnPoint.Length; i++)
        {
            PlayerSpawnPoint[i].gameObject.SetActive(false);
        }
    }
Example #8
0
File: Round.cs Project: loleeta/TRP
 // Take a monster and add it to the player
 public PlayerInfo(Monster data)
 {
     PlayerType       = PlayerTypeEnum.Monster;
     Guid             = data.Guid;
     Alive            = data.Alive;
     ExperiencePoints = data.ExperienceTotal;
     Level            = data.Level;
     Name             = data.Name;
     Speed            = data.GetSpeed();
 }
Example #9
0
    // Use this for initialization
    void Start()
    {
        SpawnParticleCom = gameObject.AddComponent <XKSpawnParticle>();
        for (int i = 0; i < QianGuanTwRot.Length; i++)
        {
            QianGuanTwRot[i].enabled = false;
        }
        FireLayer    = XkGameCtrl.GetInstance().PlayerAmmoHitLayer;
        PlayerScript = GetComponent <XkPlayerCtrl>();
        PlayerScript.SetPlayerAutoFireScript(this);
        PlayerStEnum = PlayerScript.PlayerSt;

        AmmoStatePOne = PlayerAmmoType.PuTongAmmo;
        AmmoStatePTwo = PlayerAmmoType.PuTongAmmo;
        if (PlayerStEnum != PlayerTypeEnum.CartoonCamera)
        {
            PlayerAudio = PlayerScript.PlayerAudio;
            for (int i = 0; i < 7; i++)
            {
                if (i < 6)
                {
                    PlayerAudio[i].loop = false;
                }
                else
                {
                    PlayerAudio[i].loop = true;
                }
                PlayerAudio[i].Stop();
            }

            InitPlayerAmmoList();
            //InputEventCtrl.GetInstance().ClickFireBtOneEvent += ClickFireBtOneEvent;
            InputEventCtrl.GetInstance().ClickFireBtTwoEvent += ClickFireBtTwoEvent;
            //InputEventCtrl.GetInstance().ClickDaoDanBtOneEvent += ClickDaoDanBtOneEvent;
            InputEventCtrl.GetInstance().ClickDaoDanBtTwoEvent += ClickDaoDanBtTwoEvent;
//			if (Network.peerType == NetworkPeerType.Server) {
//				InitPlayerAmmoList();
//			}
//
//			if ((PlayerStEnum == PlayerTypeEnum.FeiJi && XkGameCtrl.GameJiTaiSt == GameJiTaiType.FeiJiJiTai)
//			    || (PlayerStEnum == PlayerTypeEnum.TanKe && XkGameCtrl.GameJiTaiSt == GameJiTaiType.TanKeJiTai)){
//				InitPlayerAmmoList();
//				InputEventCtrl.GetInstance().ClickFireBtOneEvent += ClickFireBtOneEvent;
//				InputEventCtrl.GetInstance().ClickFireBtTwoEvent += ClickFireBtTwoEvent;
//				InputEventCtrl.GetInstance().ClickDaoDanBtOneEvent += ClickDaoDanBtOneEvent;
//				InputEventCtrl.GetInstance().ClickDaoDanBtTwoEvent += ClickDaoDanBtTwoEvent;
//			}
        }
        else
        {
            this.enabled = false;
        }
    }
Example #10
0
 // Take a character and add it to the Player
 public PlayerInfo(Character data)
 {
     PlayerType       = PlayerTypeEnum.Character;
     Guid             = data.Guid;
     Alive            = data.Alive;
     ExperiencePoints = data.ExperienceTotal;
     Level            = data.Level;
     Name             = data.Name;
     Speed            = data.GetSpeed();
     CurrentHealth    = data.GetHealthCurrent();
     MaxHealth        = data.GetHealthMax();
 }
Example #11
0
 private IPlayer AddPlayer(PlayerTypeEnum playerType, GamePlayerEnum gamePlayer)
 {
     if (gamePlayer == GamePlayerEnum.Player1)
     {
         this.player1 = PlayerFactory.Create(playerType, gamePlayer);
         return(this.player1);
     }
     else
     {
         this.player2 = PlayerFactory.Create(playerType, gamePlayer);
         return(this.player2);
     }
 }
Example #12
0
    public override void OnStartLocalPlayer()
    {
        base.OnStartLocalPlayer();

        if (playerIndex == 0)
        {
            _playerType = PlayerTypeEnum.Officer;
        }
        else
        {
            Camera.main.orthographicSize /= 5;
            _playerType = PlayerTypeEnum.Witness;
        }
    }
Example #13
0
    // Use this for initialization
    void Start()
    {
        PlayerCamera         = camera;
        camera.targetTexture = null;
        CameraTran           = transform;
        XkPlayerCtrl script = GetComponentInParent <XkPlayerCtrl>();

        switch (script.PlayerSt)
        {
        case PlayerTypeEnum.FeiJi:
            _InstanceFeiJi = this;
            PlayerSt       = PlayerTypeEnum.FeiJi;
            FeiJiCameraTan = transform;
            gameObject.SetActive(false);
            break;

        case PlayerTypeEnum.TanKe:
            _InstanceTanKe = this;
            PlayerSt       = PlayerTypeEnum.TanKe;
            TanKeCameraTan = transform;
            gameObject.SetActive(false);
            break;

        case PlayerTypeEnum.CartoonCamera:
            _InstanceCartoon = this;
            PlayerSt         = PlayerTypeEnum.CartoonCamera;
            break;
        }

        CameraObj    = gameObject;
        PlayerScript = GetComponentInParent <XkPlayerCtrl>();
        if (PlayerScript != null)
        {
            PlayerScript.SetPlayerCamera(this);
        }

        GameObject obj = new GameObject();

        obj.name                   = "CameraParent";
        CameraParent               = obj.transform;
        CameraParent.parent        = CameraTran.parent;
        CameraParent.localPosition = CameraTran.localPosition;
        CameraParent.rotation      = CameraTran.rotation;
        CameraTran.parent          = null;

        if (PlayerSt != PlayerTypeEnum.CartoonCamera)
        {
            SetEnableCamera(false);
        }
    }
Example #14
0
        /// <summary>
        /// Playerの生成
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Player Create(PlayerTypeEnum type)
        {
            switch (type)
            {
            case PlayerTypeEnum.Null:
                return(new NullPlayer());

            case PlayerTypeEnum.Human:
                return(new HumanPlayer());

            case PlayerTypeEnum.UsiEngine:
                return(new UsiEnginePlayer());
            }
            return(null);
        }
Example #15
0
 // Take a monster and add it to the player
 public PlayerInfo(Monster data)
 {
     PlayerType       = PlayerTypeEnum.Monster;
     Guid             = data.Guid;
     Alive            = data.Alive;
     ExperiencePoints = data.ExperienceTotal;
     Level            = data.Level;
     Name             = data.Name;
     Speed            = data.GetSpeed();
     RemainingHP      = data.GetHealthCurrent();
     TotalHP          = data.GetHealthMax();
     Attack           = data.GetAttack();
     Defense          = data.GetDefense();
     ImageURI         = data.GetImageURI();
 }
        public Dictionary<string, List<string>> GetPotentialMoves(ChessGame g, PlayerTypeEnum player)
        {
            Dictionary<string, List<string>> movesBySquare = new Dictionary<string, List<string>>();

            var chessBoard = g.ChessBoard;
            List<string> sourceSquares = chessBoard.GetPiecesForPlayer(player);
            
            foreach (var sourceSquare in sourceSquares)
            {
                var potentialMoves = _GetPotentialMoves(g, player, sourceSquare);
                if (potentialMoves.Count > 0) movesBySquare[sourceSquare] = potentialMoves;
            }

            return movesBySquare;
        }
Example #17
0
        public bool ClearMessages()
        {
            PlayerType         = PlayerTypeEnum.Unknown;
            HitStatus          = HitStatusEnum.Unknown;
            AttackerName       = string.Empty;
            TargetName         = string.Empty;
            AttackStatus       = string.Empty;
            TurnMessage        = string.Empty;
            TurnMessageSpecial = string.Empty;
            ExperienceEarned   = string.Empty;
            LevelUpMessage     = string.Empty;

            DamageAmount  = 0;
            CurrentHealth = 0;

            return(true);
        }
        private bool CanMoveIntoAttackersPath(PlayerTypeEnum player, string lastMoveNotation, ChessBoard board, List<string> attackers, Tuple<int, int> opponentKingTuple)
        {
            if (attackers.Count > 1)
                return false;

            bool canBlockPathOfAttackers = false;

            string attackerNotation = attackers.First();
            Tuple<int, int> attackerTuple = NotationHelper.Translate(attackerNotation);
            ChessPiece attackerPiece = board.Get(attackerTuple);

            if (attackerPiece.Type == PieceTypeEnum.Knight)
                return false;

            // get star pattern of each attacker
            List<Tuple<int, int>[]> relativePaths = new QueenRelativePathProvider().GetRelativePaths(
                new ChessPiece() { Player = player });

            var absolutePaths = BoardLogic.ConvertToAbsolutePaths(attackerTuple, relativePaths);

            // get path that leads to king
            var pathOfAttacker = BoardLogic.GetPathContaining(opponentKingTuple, absolutePaths);
            var trimmedPathOfAttacker = BoardLogic.TrimToBeforeDestination(opponentKingTuple, pathOfAttacker);

            // can any opponents move into path and block?
            var opponentPlayerSquares = board.GetPiecesForPlayer(GetOppositePlayer(player));
            foreach (var opponentSquare in opponentPlayerSquares)
            {
                bool canMoveIntoAttackersPath =
                    trimmedPathOfAttacker.Any(location =>
                    {
                        string dest = NotationHelper.Translate(location);
                        return CanMove(board, opponentSquare + dest, GetOppositePlayer(player), lastMoveNotation).Success;
                    });

                if (canMoveIntoAttackersPath)
                {
                    canBlockPathOfAttackers = true;
                    break;
                }
            }

            return canBlockPathOfAttackers;
        }
Example #19
0
        public ChessGame(
            ChessBoard b,
            PlayerTypeEnum player,
            Dictionary<PlayerTypeEnum,
            List<ChessPiece>> takenPieces,
            IRulesOfChess rules)
        {
            _chessBoard = b;
            _currentPlayer = player;
            _moves = new List<string>();
            _takenPieces = takenPieces ?? new Dictionary<PlayerTypeEnum, List<ChessPiece>>();

            List<ChessPiece> takenOut;
            if (!_takenPieces.TryGetValue(PlayerTypeEnum.White, out takenOut) || takenOut == null)
                _takenPieces[PlayerTypeEnum.White] = new List<ChessPiece>();

            if (!_takenPieces.TryGetValue(PlayerTypeEnum.Black, out takenOut) || takenOut == null)
                _takenPieces[PlayerTypeEnum.Black] = new List<ChessPiece>();

            _rules = rules;
        }
Example #20
0
        public MoveResult PlayerMove(PlayerTypeEnum player, string move)
        {
            if (player != _currentPlayer)
                return new MoveResult() { Error = "out of turn.", Turn = _currentPlayer };

            var moveResult = _rules.CanMove(
                _chessBoard,
                move,
                player,
                _moves.LastOrDefault());

            ChessPiece taken = null;
            if (moveResult.Success)
            {
                var o = _chessBoard.RecordMoves(
                    moveResult.Moves,
                    moveResult.TakenPiece == null ? null : new[] { moveResult.TakenPiece },
                    moveResult.Swap);

                _moves.AddRange(moveResult.Moves);

                if (o.TakenPieces != null)
                {
                    taken = o.TakenPieces.FirstOrDefault();
                    _takenPieces[_currentPlayer].Add(taken);
                }

                _currentPlayer = player == PlayerTypeEnum.White ? PlayerTypeEnum.Black : PlayerTypeEnum.White;
            }

            return new MoveResult()
            {
                Success = moveResult.Success,
                Error = moveResult.Message,
                Moves = moveResult.Moves,
                Taken = taken,
                Turn = _currentPlayer,
                MoveType = moveResult.MoveType,
            };
        }
Example #21
0
        public static IPlayer Create(PlayerTypeEnum type, GamePlayerEnum gamePlayer)
        {
            IPlayer player = new RandomComputerPlayer();

            player.Description = "RANDOM COMPUTER";


            if (type == PlayerTypeEnum.Human)
            {
                player             = new HumanPlayer();
                player.Description = "HUMAN";
            }

            if (type == PlayerTypeEnum.TaticalComputer)
            {
                player             = new TaticalComputerPlayer();
                player.Description = "TATICAL COMPUTER";
            }

            player.Index = (int)gamePlayer;
            return(player);
        }
        private Tuple<bool, List<string>> IsInCheck(PlayerTypeEnum playerType, ChessBoard board, string lastMoveNotation)
        {
            PlayerTypeEnum opponentPlayerType = GetOppositePlayer(playerType);
            List<string> opponentSquares = board.GetPiecesForPlayer(opponentPlayerType);
            string kingNotation = board.GetKing(playerType);

            if (kingNotation == null)
                return new Tuple<bool, List<string>>(false, null);

            bool isInCheck = false;
            List<string> attackers = new List<string>();
            foreach (var square in opponentSquares)
            {
                var opponentMoveResult = CanMove(board, square, kingNotation, opponentPlayerType, lastMoveNotation, false);
                if (opponentMoveResult.Success)
                {
                    isInCheck = true;
                    attackers.Add(square);
                }
            }

            return new Tuple<bool, List<string>>(isInCheck, attackers);
        }
        public ValidateMoveResult CanMove(ChessBoard board, string move, PlayerTypeEnum player,
            string lastMoveNotation)
        {
            Tuple<string, string> breakdown = NotationHelper.Breakdown(move);
            string source = breakdown.Item1;
            string destination = breakdown.Item2;

            bool playerInCheck = IsInCheck(player, board, lastMoveNotation).Item1;
            ValidateMoveResult canMoveResult = CanMove(board, source, destination, player, lastMoveNotation, playerInCheck);

            if (canMoveResult.Success)
            {
                // pawn to queen swap
                ChessPiece sourceBeforeSimulate = board.Get(source);
                bool pawnSwap =
                    sourceBeforeSimulate != null &&
                    sourceBeforeSimulate.Type == PieceTypeEnum.Pawn &&
                    (sourceBeforeSimulate.Direction == -1 ? (int.Parse(destination[1].ToString()) == 8) : (int.Parse(destination[1].ToString()) == 1));

                string swap = pawnSwap ? destination : null;
                canMoveResult.Swap = swap;

                ChessBoard boardAfterMove = board.SimulateMoves(move, canMoveResult.TakenPiece, swap);

                // did player move into check?
                var movedIntoCheckResult = IsInCheck(player, boardAfterMove, lastMoveNotation);
                if (movedIntoCheckResult.Item1)
                {
                    canMoveResult.Success = false;
                    return canMoveResult.SetMessage("cannot move into check.");
                }

                // did player put opponent in check?
                var isOpponentInCheckResult = IsInCheck(GetOppositePlayer(player), boardAfterMove, lastMoveNotation);
                bool isOpponentInCheck = isOpponentInCheckResult.Item1;
                canMoveResult.MoveType = isOpponentInCheck ? MoveTypeEnum.Check : MoveTypeEnum.Normal;

                // if player checked opponent, can opponent get out of check? if not, check mate
                if (isOpponentInCheck)
                {
                    string opponentKingNotation = boardAfterMove.GetKing(GetOppositePlayer(player));
                    Tuple<int, int> opponentKingTuple = NotationHelper.Translate(opponentKingNotation);

                    // can checked king move out of check?
                    bool canMoveOutOfCheck = CanMoveOutOfCheck(player, lastMoveNotation, boardAfterMove, opponentKingNotation, opponentKingTuple);

                    // can opponent kill piece that put king in check? is still in check afterwards?
                    bool canTakedownAttacker = false;
                    if (!canMoveOutOfCheck)
                        canTakedownAttacker = CanTakedownAttackers(player, lastMoveNotation, boardAfterMove, isOpponentInCheckResult.Item2);

                    // can block path of piece that put king in check? (brute force method)
                    bool canBlockPathOfAttackers = false;
                    if (!canMoveOutOfCheck && !canTakedownAttacker)
                        canBlockPathOfAttackers = CanMoveIntoAttackersPath(player, lastMoveNotation, boardAfterMove, isOpponentInCheckResult.Item2, opponentKingTuple);

                    if (!canMoveOutOfCheck && !canTakedownAttacker && !canBlockPathOfAttackers)
                        canMoveResult.MoveType = MoveTypeEnum.Checkmate;
                }
            }

            return canMoveResult;
        }
        private bool CanMoveOutOfCheck(PlayerTypeEnum player, string lastMoveNotation, ChessBoard board, string opponentKingNotation, Tuple<int, int> opponentKingTuple)
        {
            bool canMoveOutOfCheck = false;
            ChessPiece opponentKingPiece = board.Get(opponentKingTuple);
            var relativeMoves = m_relativeMoveProviderFactory
                .GetProviderByPieceType(opponentKingPiece.Type)
                .GetRelativePaths(opponentKingPiece);

            var absolutePaths = BoardLogic.ConvertToAbsolutePaths(opponentKingTuple, relativeMoves);

            var flattenedAbsoluteMoves = absolutePaths.SelectMany(x => x);
            foreach (var square in flattenedAbsoluteMoves)
            {
                // simulate move of king to available move
                string destinationNotation = NotationHelper.Translate(square);
                var getKingOutOfCheckMoveResult = CanMove(board, opponentKingNotation + destinationNotation,
                    GetOppositePlayer(player), lastMoveNotation);

                if (getKingOutOfCheckMoveResult.Success)
                {
                    canMoveOutOfCheck = true;
                    break;
                }
            }

            return canMoveOutOfCheck;
        }
        private bool CanTakedownAttackers(PlayerTypeEnum player, string lastMoveNotation, ChessBoard board, List<string> attackers)
        {
            if (attackers.Count > 1)
                return false;

            bool canTakedownAttacker = false;
            PlayerTypeEnum opponentPlayerType = GetOppositePlayer(player);
            List<string> opponentSquares = board.GetPiecesForPlayer(opponentPlayerType);
            string attackerNotation = attackers.First();

            foreach (var square in opponentSquares)
            {
                bool canDefeatAllAttackers = CanMove(board, square + attackerNotation, opponentPlayerType, lastMoveNotation).Success;
                if (canDefeatAllAttackers)
                {
                    canTakedownAttacker = true;
                    break;
                }
            }

            return canTakedownAttacker;
        }
Example #26
0
 public static bool Is(this Citizen citizen, PlayerTypeEnum playerType)
 {
     return(citizen.GetPlayerType() == playerType);
 }
 public SociatisAuthorize(PlayerTypeEnum playerType)
 {
     Authorized = playerType;
 }
Example #28
0
 public PlayerFactory GetPlayerFactory(PlayerTypeEnum playerType)
 {
     return(playerFactories[playerType]);
 }
Example #29
0
 public void PrintBoard(ChessPiece[,] board, PlayerTypeEnum player)
 {
     PrintBoard(board, player, null);
 }
        private ValidateMoveResult CanMove(ChessBoard board, string source, string dest, PlayerTypeEnum player, string lastMoveNotation, bool playerInCheck)
        {
            var result = new ValidateMoveResult();

            var sourceTuple = NotationHelper.Translate(source);

            if (!BoardLogic.IsOnBoard(sourceTuple))
                return result.SetMessage(source + " is not on board");

            var destTuple = NotationHelper.Translate(dest);

            if (!BoardLogic.IsOnBoard(destTuple))
                return result.SetMessage(dest + " is not on board");

            if (source.Equals(dest, StringComparison.OrdinalIgnoreCase))
                return result.SetMessage("source and dest are the same");

            var sourcePiece = board.Get(sourceTuple);

            if (sourcePiece == null)
                return result.SetMessage("source piece is null");

            if (sourcePiece.Player != player)
                return result.SetMessage("piece does not belong to player.");

            var destPiece = board.Get(destTuple);

            if (destPiece != null && sourcePiece.Player == destPiece.Player)
                return result.SetMessage("cannot move on top of own piece");

            var relativeMoves = m_relativeMoveProviderFactory
                .GetProviderByPieceType(sourcePiece.Type)
                .GetRelativePaths(sourcePiece);
            var absoluteMoves = BoardLogic.ConvertToAbsolutePaths(sourceTuple, relativeMoves);
            bool destInPath = BoardLogic.IsInAtleastOnePath(destTuple, absoluteMoves);

            if (!destInPath)
                return result.SetMessage("destination not in available path");

            string takenPiece = null;
            string additionalMove = null;

            switch (sourcePiece.Type)
            {
                case PieceTypeEnum.Pawn:
                    {
                        bool isRankOnlyMove = BoardLogic.IsRankOnlyMove(sourceTuple, destTuple);

                        if (isRankOnlyMove)
                        {
                            var pathContaingDestination = BoardLogic.GetPathContaining(destTuple, absoluteMoves);

                            if (!BoardLogic.IsPathClear(board, pathContaingDestination))
                                return result.SetMessage("path blocked");

                            var absDelta = BoardLogic.GetAbsoluteDelta(sourceTuple, destTuple);
                            if (absDelta.Item1 == 2 && sourcePiece.HasMoved)
                                return result.SetMessage("pawn has already moved, cannot jump 2 squares");
                        }
                        else
                        {
                            // en-passant
                            // > is piece in source *rank, destination *file an enemy pawn?
                            // > if yes, was its last move two squares?e
                            var pieceBehindTuple = new Tuple<int, int>(
                                sourceTuple.Item1,
                                destTuple.Item2);

                            var pieceBehind = board.Get(pieceBehindTuple);
                            bool targetWasLastMove = false;
                            bool twoSquareLastMove = false;

                            Tuple<string, string> lastMove = null;
                            if (lastMoveNotation != null)
                            {
                                lastMove = NotationHelper.Breakdown(lastMoveNotation);
                                var lastMoveSourceTuple = NotationHelper.Translate(lastMove.Item1);
                                var lastMoveDestTuple = NotationHelper.Translate(lastMove.Item2);
                                var lastMoveAbsDelta = BoardLogic.GetAbsoluteDelta(lastMoveSourceTuple, lastMoveDestTuple);

                                twoSquareLastMove = lastMoveAbsDelta.Item1 == 2;

                                targetWasLastMove =
                                    pieceBehindTuple.Item1 == lastMoveDestTuple.Item1 &&
                                    pieceBehindTuple.Item2 == lastMoveDestTuple.Item2;
                            }

                            bool enPassant =
                                pieceBehind != null &&
                                pieceBehind.Player != player &&
                                pieceBehind.Type == PieceTypeEnum.Pawn &&
                                twoSquareLastMove &&
                                targetWasLastMove
                                ;

                            if (enPassant)
                            {
                                takenPiece = lastMove.Item2;
                                break;
                            }

                            if (destPiece == null)
                                return result.SetMessage("enemy piece not present at destination");
                        }

                        break;
                    }
                case PieceTypeEnum.King:
                    {
                        // castle

                        if (BoardLogic.IsFileOnlyMove(sourceTuple, destTuple) &&
                            BoardLogic.GetAbsoluteDelta(sourceTuple, destTuple).Item2 == 2)
                        {
                            if (sourcePiece.HasMoved)
                                return result.SetMessage("king has already moved.");

                            ChessPiece rook = null;
                            Tuple<int, int> rookTuple = null;
                            Tuple<int, int> toRookDelta = null;
                            var rookNotations = board.GetPiecesOfType(player, PieceTypeEnum.Rook);
                            if (rookNotations != null && rookNotations.Count > 0)
                            {
                                var moveDelta = BoardLogic.GetDelta(sourceTuple, destTuple);

                                foreach (var rn in rookNotations)
                                {
                                    rookTuple = NotationHelper.Translate(rn);
                                    toRookDelta = BoardLogic.GetDelta(sourceTuple, rookTuple);
                                    if (BoardLogic.IsFileOnlyMove(sourceTuple, rookTuple) &&
                                        BoardLogic.AreDeltasInSameDirection(moveDelta.Item2, toRookDelta.Item2))
                                    {
                                        rook = board.Get(rn);
                                        break;
                                    }
                                }
                            }

                            if (rook == null)
                                return result.SetMessage("no rook present on rank " + sourceTuple.Item1);

                            if (rook.HasMoved)
                                return result.SetMessage("rook has moved.");

                            Tuple<int, int>[] kingToRookPath = BoardLogic.GetRankPath(sourceTuple, rookTuple);
                            Tuple<int, int>[] trimmedPath = BoardLogic.TrimToBeforeDestination(rookTuple,
                                kingToRookPath);

                            bool isPathClear = BoardLogic.IsPathClear(board, trimmedPath);

                            if (!isPathClear)
                                return result.SetMessage("path blocked");

                            if (playerInCheck)
                                return result.SetMessage("cannot castle out of check");

                            bool moveToLeft = toRookDelta.Item2 < 0;
                            additionalMove = NotationHelper.Translate(rookTuple) +
                                                NotationHelper.Translate(new Tuple<int, int>(rookTuple.Item1,
                                                    destTuple.Item2 + (moveToLeft ? 1 : -1)));
                        }

                        break;
                    }
                case PieceTypeEnum.Knight:
                    {
                        break;
                    }
                case PieceTypeEnum.Bishop:
                case PieceTypeEnum.Rook:
                case PieceTypeEnum.Queen:
                    {
                        // cases handled in general

                        var pathContaingDestination = BoardLogic.GetPathContaining(destTuple, absoluteMoves);
                        var trimmedPath = BoardLogic.TrimToBeforeDestination(destTuple, pathContaingDestination);

                        if (!BoardLogic.IsPathClear(board, trimmedPath))
                            return result.SetMessage("path blocked");

                        break;
                    }
            }

            if (destPiece != null)
                takenPiece = dest;

            result.Success = true;
            result.TakenPiece = takenPiece;
            result.Moves = new[] { source + dest, additionalMove }.Where(x => x != null).ToArray();
            return result;
        }
Example #31
0
        public PlayerObject(PlayerTypeEnum type) : this()
        {
            PlayerType = type;

            switch (type)
            {
            case PlayerTypeEnum.Fish:
                VpIpMin     = 38;
                VpIpMax     = 55;
                PfrMin      = 0;
                PfrMax      = 15;
                AggMin      = 0;
                AggMax      = 3;
                ThreeBetMin = 0;
                ThreeBetMax = 5;
                WtsdMin     = 18;
                WtsdMax     = 38;
                WsdMin      = 0;
                WsdMax      = 55;
                WwsfMin     = 0;
                WwsfMax     = 40;
                break;

            case PlayerTypeEnum.Gambler:
                VpIpMin     = 25;
                VpIpMax     = 40;
                PfrMin      = 15;
                PfrMax      = 30;
                AggMin      = 2.5;
                AggMax      = 8;
                ThreeBetMin = 5;
                ThreeBetMax = 18;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;

            case PlayerTypeEnum.Lag:
                VpIpMin     = 20;
                VpIpMax     = 25;
                PfrMin      = 17;
                PfrMax      = 23;
                AggMin      = 2.4;
                AggMax      = 4;
                ThreeBetMin = 5;
                ThreeBetMax = 8.8;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;

            case PlayerTypeEnum.Nit:
                VpIpMin     = 20;
                VpIpMax     = 25;
                PfrMin      = 17;
                PfrMax      = 23;
                AggMin      = 2.4;
                AggMax      = 4;
                ThreeBetMin = 5;
                ThreeBetMax = 8.8;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;

            case PlayerTypeEnum.Rock:
                VpIpMin     = 20;
                VpIpMax     = 25;
                PfrMin      = 17;
                PfrMax      = 23;
                AggMin      = 2.4;
                AggMax      = 4;
                ThreeBetMin = 5;
                ThreeBetMax = 8.8;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;

            case PlayerTypeEnum.Tag:
                VpIpMin     = 20;
                VpIpMax     = 25;
                PfrMin      = 17;
                PfrMax      = 23;
                AggMin      = 2.4;
                AggMax      = 4;
                ThreeBetMin = 5;
                ThreeBetMax = 8.8;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;

            case PlayerTypeEnum.Whale:
                VpIpMin     = 20;
                VpIpMax     = 25;
                PfrMin      = 17;
                PfrMax      = 23;
                AggMin      = 2.4;
                AggMax      = 4;
                ThreeBetMin = 5;
                ThreeBetMax = 8.8;
                WtsdMin     = 21;
                WtsdMax     = 26;
                WsdMin      = 48;
                WsdMax      = 57;
                WwsfMin     = 39;
                WwsfMax     = 48;
                break;
            }
        }
 protected static PlayerTypeEnum GetOppositePlayer(PlayerTypeEnum player)
 {
     return player == PlayerTypeEnum.White ? PlayerTypeEnum.Black : PlayerTypeEnum.White;
 }
Example #33
0
        public void PrintBoard(ChessPiece[,] board, PlayerTypeEnum player, HashSet<string> potentialMoves)
        {
            potentialMoves = potentialMoves ?? new HashSet<string>();
            if (player == PlayerTypeEnum.White)
            {
                for (int col = 0; col < 8; col++)
                {
                    string file = NotationHelper.TranslateToFile(col);
                    Console.Write("  {0}", file);
                }

                Console.WriteLine();

                for (int rank = 8; rank > 0; rank--)
                {
                    Console.Write(rank);

                    for (char file = 'a'; file <= 'h'; file++)
                    {
                        PrintState(board, potentialMoves, rank, file);
                    }

                    Console.WriteLine();
                }

                for (int col = 0; col < 8; col++)
                {
                    string file = NotationHelper.TranslateToFile(col);
                    Console.Write("  {0}", file);
                }
            }
            else if (player == PlayerTypeEnum.Black)
            {
                for (int col = 7; col >= 0; col--)
                {
                    string file = NotationHelper.TranslateToFile(col);
                    Console.Write("  {0}", file);
                }

                Console.WriteLine();

                for (int rank = 1; rank <= 8; rank++)
                {
                    Console.Write(rank);

                    for (char file = 'h'; file >= 'a'; file--)
                    {
                        PrintState(board, potentialMoves, rank, file);
                    }

                    Console.WriteLine();
                }

                for (int col = 7; col >= 0; col--)
                {
                    string file = NotationHelper.TranslateToFile(col);
                    Console.Write("  {0}", file);
                }
            }

            Console.WriteLine();
        }
Example #34
0
 public ChessGame(ChessBoard b, PlayerTypeEnum player, Dictionary<PlayerTypeEnum, List<ChessPiece>> takenPieces)
     : this(b, player, takenPieces, new TraditionalRulesOfChess())
 {
 }
Example #35
0
 public static bool HaveRightsOfAtLeast(this Citizen citizen, PlayerTypeEnum playerType)
 {
     return(citizen.GetPlayerType() >= playerType);
 }
Example #36
0
 public ChessPiece[] GetTakenPiecesByPlayer(PlayerTypeEnum player)
 {
     return _takenPieces[player].Select(x => x.GetCopy()).ToArray();
 }
Example #37
0
 private PlayerType(PlayerTypeEnum @enum)
 {
     Id          = (int)@enum;
     Name        = @enum.ToString();
     Description = @enum.GetDescription();
 }
Example #38
0
 public Player(IMoveStrategy strategy, PlayerTypeEnum type)
 {
     this.Strategy = strategy;
     this.Type     = type;
 }
Example #39
0
        public string GetKing(PlayerTypeEnum player)
        {
            List<string> locations = GetPiecesOfType(player, PieceTypeEnum.King);

            return locations == null || locations.Count < 1 ? null : locations.First();
        }
Example #40
0
    // Update is called once per frame
    void Update()
    {
//		if (pcvr.DongGanState == 0) {
//			return;
//		}

        if (DaoJiShiCtrl.GetInstance().GetIsPlayDaoJishi() ||
            (!XkGameCtrl.IsActivePlayerOne && !XkGameCtrl.IsActivePlayerTwo))
        {
//			pcvr.CloseQiNangQian();
//			pcvr.CloseQiNangHou();
            return;
        }

        PlayerSt = PlayerTypeEnum.TanKe;         //test.
        float eulerAngleX = 0f;
        float eulerAngleZ = 0f;
        float offsetAngle = 0f;

        switch (PlayerSt)
        {
        case PlayerTypeEnum.TanKe:
            EulerAngle = transform.eulerAngles;
            if (EulerAngle.x > 180f)
            {
                EulerAngle.x -= 360f;
            }

            if (EulerAngle.z > 180f)
            {
                EulerAngle.z -= 360f;
            }

            eulerAngleX = EulerAngle.x;
            eulerAngleZ = EulerAngle.z;
            offsetAngle = 0f;
            if (Mathf.Abs(eulerAngleX) <= offsetAngle)
            {
                //前后气囊放气.
                if (KeyQHQiNangState != 0)
                {
                    QiNangStateTK[0] = 0;
                    QiNangStateTK[1] = 0;
                    KeyQHQiNangState = 0;
                    if (KeyZYQiNangState == 0)
                    {
                        pcvr.CloseQiNangQian();
                        pcvr.CloseQiNangHou();
                    }
                }
            }
            else if (eulerAngleX < 0f)
            {
                //前气囊充气,后气囊放气.
                if (KeyQHQiNangState != 1)
                {
                    QiNangStateTK[0] = 1;
                    QiNangStateTK[1] = 0;
                    KeyQHQiNangState = 1;
                    pcvr.OpenQiNangQian();
                    pcvr.CloseQiNangHou(KeyZYQiNangState);
                }
            }
            else if (eulerAngleX > 0f)
            {
                //后气囊充气,前气囊放气.
                if (KeyQHQiNangState != 2)
                {
                    QiNangStateTK[0] = 0;
                    QiNangStateTK[1] = 1;
                    KeyQHQiNangState = 2;
                    pcvr.OpenQiNangHou();
                    pcvr.CloseQiNangQian(KeyZYQiNangState);
                }
            }

            if (Mathf.Abs(eulerAngleZ) <= offsetAngle)
            {
                //左右气囊放气.
                if (KeyZYQiNangState != 0)
                {
                    QiNangStateTK[2] = 0;
                    QiNangStateTK[3] = 0;
                    KeyZYQiNangState = 0;
                    if (KeyQHQiNangState == 0)
                    {
                        pcvr.CloseQiNangZuo();
                        pcvr.CloseQiNangYou();
                    }
                }
            }
            else if (eulerAngleZ < 0f)
            {
                //左气囊充气,右气囊放气.
                if (KeyZYQiNangState != 1)
                {
                    QiNangStateTK[2] = 1;
                    QiNangStateTK[3] = 0;
                    KeyZYQiNangState = 1;
                    pcvr.OpenQiNangZuo();
                    pcvr.CloseQiNangYou(KeyQHQiNangState);
                }
            }
            else if (eulerAngleZ > 0f)
            {
                //右气囊充气,左气囊放气.
                if (KeyZYQiNangState != 2)
                {
                    QiNangStateTK[2] = 0;
                    QiNangStateTK[3] = 1;
                    KeyZYQiNangState = 2;
                    pcvr.OpenQiNangYou();
                    pcvr.CloseQiNangZuo(KeyQHQiNangState);
                }
            }
            break;

        case PlayerTypeEnum.FeiJi:
            EulerAngle = transform.eulerAngles;
            if (EulerAngle.x > 180f)
            {
                EulerAngle.x -= 360f;
            }

            if (EulerAngle.z > 180f)
            {
                EulerAngle.z -= 360f;
            }
            eulerAngleX = EulerAngle.x;
            eulerAngleZ = EulerAngle.z;
            offsetAngle = 1f;

            if (Mathf.Abs(eulerAngleX) <= offsetAngle)
            {
                //前后气囊放气.
                QiNangStateFJ[0] = 0;
                QiNangStateFJ[1] = 0;
            }
            else if (eulerAngleX < 0f)
            {
                //前气囊充气,后气囊放气.
                QiNangStateFJ[0] = 1;
                QiNangStateFJ[1] = 0;
            }
            else if (eulerAngleX > 0f)
            {
                //后气囊充气,前气囊放气.
                QiNangStateFJ[0] = 0;
                QiNangStateFJ[1] = 1;
            }

            if (Mathf.Abs(eulerAngleZ) <= offsetAngle)
            {
                //左右气囊放气.
                QiNangStateFJ[2] = 0;
                QiNangStateFJ[3] = 0;
            }
            else if (eulerAngleZ > 0f)
            {
                //右气囊充气,左气囊放气.
                QiNangStateFJ[2] = 0;
                QiNangStateFJ[3] = 1;
            }
            else if (eulerAngleZ < 0f)
            {
                //左气囊充气,右气囊放气.
                QiNangStateFJ[2] = 1;
                QiNangStateFJ[3] = 0;
            }
            break;
        }
    }
Example #41
0
        public List<string> GetPiecesForPlayer(PlayerTypeEnum player)
        {
            List<string> s = new List<string>();

            for (int row = 0; row < 8; row++)
            {
                for (int col = 0; col < 8; col++)
                {
                    ChessPiece p = _boardState[row, col];
                    if (p == null || p.Player != player)
                        continue;

                    string notation = NotationHelper.Translate(row, col);
                    s.Add(notation);
                }
            }

            return s;
        }
Example #42
0
    // Use this for initialization
    void Start()
    {
        CameraObj    = gameObject;
        PlayerCamera = GetComponent <Camera>();
        if (PlayerCamera != null)
        {
            PlayerCamera.targetTexture = null;
        }

        if (PlayerMainCamTmp != null && PlayerMainCamTmp.Length >= 2)
        {
            PlayerMainCameraTmp = new Camera[2];
            if (PlayerMainCamTmp[0] != null)
            {
                PlayerMainCameraTmp[0] = PlayerMainCamTmp[0].GetComponent <Camera>();
//			    if (XkGameCtrl.GetInstance().IsOpenVR) {
//				    PlayerMainCamTmp[0].SetActive(false);
//			    }
            }

            if (PlayerMainCamTmp[1] != null)
            {
                PlayerMainCameraTmp[1] = PlayerMainCamTmp[1].GetComponent <Camera>();
//			    if (XkGameCtrl.GetInstance().IsOpenVR) {
//				    PlayerMainCamTmp[1].SetActive(false);
//			    }
            }
        }

        CameraTran   = transform;
        PlayerScript = GetComponentInParent <XkPlayerCtrl>();
        switch (PlayerScript.PlayerSt)
        {
        case PlayerTypeEnum.FeiJi:
            _InstanceFeiJi = this;
            PlayerSt       = PlayerTypeEnum.FeiJi;
            FeiJiCameraTan = transform;
            if (!XkGameCtrl.IsTiaoGuoStartCartoon)
            {
                CameraObj.SetActive(false);
            }
//			else {
//				CameraObj.SetActive(XkGameCtrl.GetInstance().IsOpenVR);
//			}
            break;

        case PlayerTypeEnum.TanKe:
            _InstanceTanKe = this;
            PlayerSt       = PlayerTypeEnum.TanKe;
            TanKeCameraTan = transform;
            CameraObj.SetActive(false);
            break;

        case PlayerTypeEnum.CartoonCamera:
            _InstanceCartoon = this;
            PlayerSt         = PlayerTypeEnum.CartoonCamera;
            if (XkGameCtrl.IsTiaoGuoStartCartoon)
            {
                CameraObj.SetActive(false);
            }
            break;
        }

        if (PlayerSt != PlayerTypeEnum.CartoonCamera)
        {
            XkGameCtrl.GetInstance().ChangeAudioListParent();
        }

        if (PlayerScript != null)
        {
            PlayerScript.SetPlayerCamera(this);
        }

        GameObject obj = new GameObject();

        obj.name                   = "CameraParent";
        CameraParent               = obj.transform;
        CameraParent.parent        = CameraTran.parent;
        CameraParent.localPosition = CameraTran.localPosition;
        CameraParent.rotation      = CameraTran.rotation;
        CameraTran.parent          = null;

        if (PlayerSt != PlayerTypeEnum.CartoonCamera)
        {
            if (!XkGameCtrl.IsTiaoGuoStartCartoon)
            {
                SetEnableCamera(false);
            }

            if (XkGameCtrl.IsActivePlayerOne)
            {
                IndexPlayerNum = -1;
                TestChangePlayerCamera();
            }
            else
            {
                IndexPlayerNum = 0;
                TestChangePlayerCamera();
            }
        }
        XKGlobalData.GetInstance().PlayGuanKaBeiJingAudio();
    }
Example #43
0
 public void SetPlayerType(PlayerTypeEnum pt)
 {
     _playerTypeDropdown.value = (int)pt;
 }