private void LoadGame(string path) { using var stream = File.OpenRead(path); var buffer = new byte[stream.Length]; stream.Read(buffer); NewGame(TaikyokuShogi.Deserlialize(buffer)); }
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)); }
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)); }
private void NewGame(TaikyokuShogi game = null) { Game = game ?? new TaikyokuShogi(); gameBoard.SetGame(Game); Game.OnPlayerChange += OnPlayerChange; Game.OnGameEnd += OnGameEnd; SetPlayer(Game.CurrentPlayer); InvalidateVisual(); }
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 });
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); }