Esempio n. 1
0
        private void LoadGame(string path)
        {
            using var stream = File.OpenRead(path);
            var buffer = new byte[stream.Length];

            stream.Read(buffer);
            NewGame(TaikyokuShogi.Deserlialize(buffer));
        }
Esempio n. 2
0
        public void NoPiece()
        {
            var game = new TaikyokuShogi(); // empty board
            var loc  = (17, 17);

            Assert.Null(game.GetPiece(loc));
            Assert.False(game.MakeMove(loc, Movement.ComputeMove(loc, Movement.Up, 1).Value));
        }
Esempio n. 3
0
        public void OtherPlayersPiece()
        {
            var game      = new TaikyokuShogi();
            var testPiece = new Piece(Player.White, PieceIdentity.Queen);
            var startLoc  = (17, 17);

            game.Debug_SetPiece(testPiece, startLoc);
            Assert.False(game.MakeMove(startLoc, Movement.ComputeMove(startLoc, Movement.Up, 1).Value));
        }
Esempio n. 4
0
        private void NewGame(TaikyokuShogi game = null)
        {
            Game = game ?? new TaikyokuShogi();
            gameBoard.SetGame(Game);

            Game.OnPlayerChange += OnPlayerChange;
            Game.OnGameEnd      += OnGameEnd;

            SetPlayer(Game.CurrentPlayer);
            InvalidateVisual();
        }
Esempio n. 5
0
        public MainWindow()
        {
            InitializeComponent();

#if !DEBUG
            debugModeMenuItem.IsEnabled = false;
#endif

            MouseMove += ShowPieceInfo;
            Closed    += OnClose;

            corners.Add(borderTopLeft);
            corners.Add(borderTopRight);
            corners.Add(borderBottomLeft);
            corners.Add(borderBottomRight);

            borders.Add(borderTop);
            borders.Add(borderBottom);
            borders.Add(borderLeft);
            borders.Add(borderRight);

            foreach (var pieceId in (Enum.GetValues(typeof(PieceIdentity)) as PieceIdentity[]).OrderBy(piece => piece.Name()))
            {
                var blackMenuItem = new MenuItem()
                {
                    Header = pieceId.Name()
                };
                var whiteMenuItem = new MenuItem()
                {
                    Header = pieceId.Name()
                };

                pieceMenuItems.Add(blackMenuItem, new Piece(Player.Black, pieceId));
                addBlackPieceMenuItem.Items.Add(blackMenuItem);
                pieceMenuItems.Add(whiteMenuItem, new Piece(Player.White, pieceId));
                addWhitePieceMenuItem.Items.Add(whiteMenuItem);
            }

            TaikyokuShogi savedGame = null;

            try
            {
                savedGame = TaikyokuShogi.Deserlialize(Properties.Settings.Default.SavedGame);
            }
            catch (System.Text.Json.JsonException)
            {
                // silently ignore failure to parse the game
            }

            NewGame(savedGame);
        }
        // render moves in a grid
        //     | ○ |
        //  ---+---+---
        //   ─ | ☖| ─
        //  ---+---+---
        //   ○ |   | ○
        public void SetPiece(TaikyokuShogi game, PieceIdentity id)
        {
            var moves = game.GetMovement(id);

            headerText.Text = $"{Pieces.Name(id)}\n{Pieces.Kanji(id)} ({Pieces.Romanji(id)})";

            //////
            //
            // figure out the grid size
            //
            int maxMoves = 1;

            for (int i = 0; i < moves.StepRange.Length; ++i)
            {
                maxMoves = Math.Max(maxMoves, moves.StepRange[i] == Movement.Unlimited ? 2 : moves.StepRange[i]);
            }

            for (int i = 0; i < moves.JumpRange.Length; ++i)
            {
                var maxJump   = moves.JumpRange[i].JumpDistances?.Max();
                var jumpRange = maxJump == Movement.Unlimited ? 2 : maxJump + 1;
                jumpRange += moves.JumpRange[i].RangeAfter == Movement.Unlimited ? 1 : moves.JumpRange[i].RangeAfter;
                maxMoves   = Math.Max(maxMoves, jumpRange ?? 0);
            }

            for (int i = 0; i < moves.RangeCapture.Count; ++i)
            {
                maxMoves = Math.Max(maxMoves, moves.RangeCapture[i] ? 2 : 0);
            }

            maxMoves = Math.Max(maxMoves, moves.LionMove ? 3 : 0);

            maxMoves = Math.Max(maxMoves, moves.HookMove switch
            {
                HookType.Orthogonal => 2,
                HookType.Diagonal => 2,
                HookType.ForwardDiagnal => 3,
                _ => 0
            });
Esempio n. 7
0
 public void SetPiece(TaikyokuShogi game, PieceIdentity id) =>
 pieceInfoDisplay.SetPiece(game, id);
 public bool ShowDialog(TaikyokuShogi game, PieceIdentity idBefore, PieceIdentity idAfter)
 {
     originalPieceDisplay.SetPiece(game, idBefore);
     promotedPieceDisplay.SetPiece(game, idAfter);
     return(ShowDialog() ?? false);
 }