Exemplo n.º 1
0
        public void Init()
        {
            BoardManager.Init();
            PiecePrefabs.Load();
            SpriteManager.Load();

            ControlForLocalObject.SetActive(!GameServer.IsOnline);
            ControlForOnlineObject.SetActive(GameServer.IsOnline);
        }
Exemplo n.º 2
0
        void DoMoveGUI()
        {
            Winner = MyColor == SColor.NB ? SColor.NB : Winner;
            var us   = Position.sideToMove;
            var from = MouseControl.PickedFrom;
            var to   = MouseControl.PickedTo;
            var pt   = Position.PieceOn(from).Type();

            bool canPromote = (from.IsBoardPiece() && pt < Piece.GOLD)
                ? (Util.CanPromote(us, (Square)from) | Util.CanPromote(us, (Square)to))
                : false;

            // 1. 駒打ち
            // 2. 成ることができないとき
            // 3. 不成ができないとき
            // 4. 成り・不成が選択できるとき

            Move m = Move.NONE;

            if (canPromote && pt == Piece.PAWN)      // 3
            {
                m = Util.MakeMove(from, to, true);
            }
            else
            {
                m = Util.MakeMove(from, to, false);  // 1,2,4
            }
            if (!Position.IsLegal(m))
            {
                MouseControl.State = MouseStateEnum.None;
                return;
            }

            if (canPromote && pt != Piece.PAWN) // 4
            {
                PiecePrefabs.PutPromotedialog((Square)MouseControl.PickedTo, Position.PieceOn(from), transform);
                MouseControl.State  = MouseStateEnum.PromoteDialog;
                MouseControl.Select = PromoteDialogSelectEnum.None;
            }
            else // 1,2,3
            {
                MouseControl.State = MouseStateEnum.None;
                if (GameServer.IsOnline)
                {
                    photonView.RPC(nameof(DoMove), RpcTarget.All, m, true);
                }
                else
                {
                    DoMove(m);
                }
            }
        }
Exemplo n.º 3
0
        void UndoMove(Move move, bool overwrite = true)
        {
            --CurrentValue;

            if (overwrite)
            {
                RemoveItem(MoveList.Count - 1, 1);
                MoveList.RemoveAt(MoveList.Count - 1);
            }
            ScreenControl.Interactable(MyColor == SColor.NB, Winner != SColor.NB);

            if (move.IsSpecial())
            {
                return;
            }

            var us = Position.sideToMove.Not();
            var st = Position.State();

            Debug.Assert(move == st.lastMove);

            Square to   = move.To();
            Piece  toPc = Position.PieceOn(to);

            PieceNo    pn   = Position.PieceNoOn(to);
            SquareHand from = move.IsDrop()
                ? Util.MakeSquareHand(us, move.DroppedPiece())
                : (SquareHand)move.From();
            Piece fromPc = move.IsPromote() ? toPc.RawType() : toPc;

            PiecePrefabs.MovePiece(from, fromPc, pn, move.IsPromote());

            Piece capPc = st.capturedPiece;

            if (capPc != Piece.NO_PIECE)
            {
                // 駒台の駒をtoに移動
                Piece   pr  = capPc.RawType();
                PieceNo pn2 = Position.HandPieceNo(us, pr, Position.Hand(us).Count(pr) - 1);

                Debug.Assert(pn2 != PieceNo.NONE);
                PiecePrefabs.CapturePiece((SquareHand)to, capPc.Type(), pn2, MyColor == SColor.NB);

                // テキストを非表示にする
                // Counters(Util.MakeSquareHand(us, pr)).text = null;
            }

            BoardManager.UnDoMove();
        }
Exemplo n.º 4
0
        void SetBoard(SColor us)
        {
            var sq = new Square[] {
                Square.SQ_55, Square.SQ_54, Square.SQ_45, Square.SQ_35, Square.SQ_25, Square.SQ_15,
                Square.SQ_11, Square.SQ_12, Square.SQ_21, Square.SQ_31, Square.SQ_41, Square.SQ_51,
            };
            var piece = new Piece[] {
                Piece.B_KING, Piece.B_PAWN, Piece.B_GOLD, Piece.B_SILVER, Piece.B_BISHOP, Piece.B_ROOK,
                Piece.W_KING, Piece.W_PAWN, Piece.W_GOLD, Piece.W_SILVER, Piece.W_BISHOP, Piece.W_ROOK,
            };

            PiecePrefabs.Clear();
            for (int i = 0; i < 12; ++i)
            {
                PiecePrefabs.PutPiece(sq[i], piece[i], Position.PieceNoOn(sq[i]), us, transform);
            }
        }
Exemplo n.º 5
0
        public void DoMove(Move move, bool overwrite = true)
        {
            //Debug.Log(USIExtensions.USI(move));

            if (overwrite)
            {
                // 上書きする指し手の数
                var num = MoveList.Count - Position.gamePly;
                if (num > 0)
                {
                    // 棋譜を上書きする
                    RemoveItem(Position.gamePly, num);
                    MoveList.RemoveRange(Position.gamePly, num);
                    CurrentValue = Position.gamePly;
                }

                EntryItem(move);
                MoveList.Add(move);
            }
            ++CurrentValue;
            //Debug.Log(CurrentValue);

            var us   = Position.sideToMove;
            var from = move.From();

            if (move.IsSpecial())
            {
                if (move == Move.RESIGN)
                {
                    Winner = us.Not();
                }

                ScreenControl.Interactable(MyColor == SColor.NB, true);
                return;
            }
            ScreenControl.Interactable(MyColor == SColor.NB, false);

            Piece movedPc      = move.IsDrop() ? move.DroppedPiece() : Position.PieceOn(from);
            Piece movedAfterPc = move.IsPromote() ? movedPc.ToInt() + Piece.PROMOTE : movedPc;

            PieceNo pn = move.IsDrop()
                ? Position.HandPieceNo(us, movedPc, Position.Hand(us).Count(movedPc) - 1)
                : Position.PieceNoOn(from);

            Debug.Assert(pn != PieceNo.NONE);
            PiecePrefabs.MovePiece((SquareHand)move.To(), movedAfterPc, pn, move.IsPromote());

            PieceNo pn2 = Position.PieceNoOn(move.To());

            if (pn2 != PieceNo.NONE)
            {
                var toPr = Position.PieceOn(move.To()).RawType();
                var sq   = Util.MakeSquareHand(us, toPr);
                PiecePrefabs.CapturePiece(sq, toPr, pn2, true);

                // テキストを表示
                // if (Position.Hand(us).Count(toPr) == 1)
                //    Counters(Util.MakeSquareHand(us, toPr)).text = "2";
            }

            BoardManager.DoMove(move);
            EndGame();
        }