From 5f65f10848fdc08269bbf0932e111715fe66b53c Mon Sep 17 00:00:00 2001 From: Alan <alanjfogel@gmail.com> Date: Fri, 31 Jan 2025 13:48:29 -0600 Subject: [PATCH] Added Bishop piece --- .godot/editor/editor_layout.cfg | 10 +-- .godot/editor/filesystem_update4 | 2 + ...state-c2a7af834e91ff64325daddf58e45dc0.cfg | 2 +- .godot/editor/project_metadata.cfg | 4 +- .godot/editor/script_editor_cache.cfg | 28 ++++-- .godot/global_script_class_cache.cfg | 6 ++ .godot/uid_cache.bin | Bin 3004 -> 3040 bytes scenes/Bishop.tscn | 10 +++ scripts/Bishop.gd | 82 ++++++++++++++++++ scripts/King.gd | 0 scripts/Knight.gd | 0 scripts/Queen.gd | 0 scripts/game.gd | 4 + 13 files changed, 131 insertions(+), 17 deletions(-) create mode 100644 scenes/Bishop.tscn create mode 100644 scripts/Bishop.gd create mode 100644 scripts/King.gd create mode 100644 scripts/Knight.gd create mode 100644 scripts/Queen.gd diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg index 3eb99a4..5340275 100644 --- a/.godot/editor/editor_layout.cfg +++ b/.godot/editor/editor_layout.cfg @@ -25,17 +25,17 @@ dock_5="Inspector,Node,History" [EditorNode] -open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn", "res://scenes/Pawn.tscn", "res://scenes/Rook.tscn") -current_scene="res://scenes/Pawn.tscn" -center_split_offset=-320 +open_scenes=PackedStringArray("res://scenes/game.tscn", "res://scenes/explosion.tscn", "res://scenes/Pawn.tscn", "res://scenes/Rook.tscn", "res://scenes/Bishop.tscn") +current_scene="res://scenes/Bishop.tscn" +center_split_offset=-313 selected_default_debugger_tab_idx=0 selected_main_editor_idx=2 selected_bottom_panel_item=0 [ScriptEditor] -open_scripts=["res://scripts/game.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "res://scripts/Rook.gd"] -selected_script="res://scripts/Rook.gd" +open_scripts=["res://scripts/Bishop.gd", "res://scripts/game.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "res://scripts/Rook.gd"] +selected_script="res://scripts/Bishop.gd" open_help=[] script_split_offset=70 list_split_offset=0 diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4 index b75cf9f..8a81da6 100644 --- a/.godot/editor/filesystem_update4 +++ b/.godot/editor/filesystem_update4 @@ -13,3 +13,5 @@ res://scripts/board.gd res://scenes/Pawn.tscn res://scenes/Rook.tscn res://scripts/Piece.gd +res://scripts/Bishop.gd +res://scenes/Bishop.tscn diff --git a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg index 1c808c5..81cedcf 100644 --- a/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg +++ b/.godot/editor/game.tscn-editstate-c2a7af834e91ff64325daddf58e45dc0.cfg @@ -175,4 +175,4 @@ Anim={ "zfar": 4000.01, "znear": 0.05 } -selected_nodes=Array[NodePath]([]) +selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@16886/@Panel@13/@VBoxContainer@14/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@25/DockVSplitCenter/@VSplitContainer@52/@VBoxContainer@53/@PanelContainer@98/MainScreen/@CanvasItemEditor@9272/@VSplitContainer@9094/@HSplitContainer@9096/@HSplitContainer@9098/@Control@9099/@SubViewportContainer@9100/@SubViewport@9101/Node2D/Sprite2D")]) diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg index f386566..c1e3fa6 100644 --- a/.godot/editor/project_metadata.cfg +++ b/.godot/editor/project_metadata.cfg @@ -13,8 +13,8 @@ last_selected_language="GDScript" [recent_files] -scripts=["res://scripts/Rook.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "@GDScript", "int", "res://background.gd", "res://chess_board.tscn::GDScript_fv0wj", "res://tile_container.gd", "res://chess_board.gd"] -scenes=["res://scenes/Rook.tscn", "res://scenes/Pawn.tscn", "res://scenes/explosion.tscn", "res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_board.tscn"] +scripts=["res://scripts/Bishop.gd", "res://scripts/Rook.gd", "res://scripts/Pawn.gd", "res://scripts/Piece.gd", "@GDScript", "int", "res://background.gd", "res://chess_board.tscn::GDScript_fv0wj", "res://tile_container.gd", "res://chess_board.gd"] +scenes=["res://scenes/Bishop.tscn", "res://scenes/Rook.tscn", "res://scenes/Pawn.tscn", "res://scenes/explosion.tscn", "res://scenes/game.tscn", "res://scenes/chess_board.tscn", "res://chess_board.tscn"] [color_picker] diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg index b3cfa14..ca83cea 100644 --- a/.godot/editor/script_editor_cache.cfg +++ b/.godot/editor/script_editor_cache.cfg @@ -3,7 +3,7 @@ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 40, +"column": 31, "folded_lines": Array[int]([]), "h_scroll_position": 0, "row": 122, @@ -34,7 +34,7 @@ state={ "column": 0, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 10, +"row": 17, "scroll_position": 0.0, "selection": false, "syntax_highlighter": "GDScript" @@ -45,15 +45,25 @@ state={ state={ "bookmarks": PackedInt32Array(), "breakpoints": PackedInt32Array(), -"column": 0, +"column": 45, "folded_lines": Array[int]([]), "h_scroll_position": 0, -"row": 10, +"row": 11, "scroll_position": 0.0, -"selection": true, -"selection_from_column": 0, -"selection_from_line": 10, -"selection_to_column": 43, -"selection_to_line": 10, +"selection": false, +"syntax_highlighter": "GDScript" +} + +[res://scripts/Bishop.gd] + +state={ +"bookmarks": PackedInt32Array(), +"breakpoints": PackedInt32Array(), +"column": 19, +"folded_lines": Array[int]([]), +"h_scroll_position": 0, +"row": 80, +"scroll_position": 61.0, +"selection": false, "syntax_highlighter": "GDScript" } diff --git a/.godot/global_script_class_cache.cfg b/.godot/global_script_class_cache.cfg index ae52abd..762b814 100644 --- a/.godot/global_script_class_cache.cfg +++ b/.godot/global_script_class_cache.cfg @@ -1,4 +1,10 @@ list=Array[Dictionary]([{ +"base": &"Piece", +"class": &"Bishop", +"icon": "", +"language": &"GDScript", +"path": "res://scripts/Bishop.gd" +}, { "base": &"Sprite2D", "class": &"Board", "icon": "", diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin index 0599803417112f698de30a8febc454cd55790e8a..6909301c1a32ae2cb252b0ca334ad9019df34af7 100644 GIT binary patch delta 47 zcmdlZ{y?13Vk6^jZj~QqxooO)wy8-lFfbIQ7F+4-7bmCYr55WuWfo`T7wDA~C+7hG DbYc(F delta 10 RcmaDLzDJzVd?Vv-ZU7Z~1A71f diff --git a/scenes/Bishop.tscn b/scenes/Bishop.tscn new file mode 100644 index 0000000..eb713ca --- /dev/null +++ b/scenes/Bishop.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=3 uid="uid://bf0kea272jnpo"] + +[ext_resource type="Script" path="res://scripts/Bishop.gd" id="1_l7uw0"] +[ext_resource type="Texture2D" uid="uid://b68o4mj7wcwvq" path="res://assets/sprites/bishop.png" id="2_m57j0"] + +[node name="Node2D" type="Node2D"] +script = ExtResource("1_l7uw0") + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = ExtResource("2_m57j0") diff --git a/scripts/Bishop.gd b/scripts/Bishop.gd new file mode 100644 index 0000000..1e272c8 --- /dev/null +++ b/scripts/Bishop.gd @@ -0,0 +1,82 @@ +extends Piece + +class_name Bishop + +enum Upgrade { + MOVE_CARDINAL_ONE, +} + +func _init(is_white: bool, position: Vector2): + super._init(is_white, position) + # Testing upgrades + upgrades.append(Upgrade.MOVE_CARDINAL_ONE) + +func get_valid_moves(board_state: Array, pos: Vector2) -> Array[Vector2]: + var valid_moves: Array[Vector2] = [] + var x = pos.x + var y = pos.y + + # Check moves in the top-right diagonal + for i in range(1, 8): + if x + i < 8 and y - i >= 0: + if board_state[x + i][y - i] == null: + valid_moves.append(Vector2(x + i, y - i)) + elif not board_state[x + i][y - i].is_white: + valid_moves.append(Vector2(x + i, y - i)) + break + else: + break + else: + break + + # Check moves in the top-left diagonal + for i in range(1, 8): + if x - i >= 0 and y - i >= 0: + if board_state[x - i][y - i] == null: + valid_moves.append(Vector2(x - i, y - i)) + elif not board_state[x - i][y - i].is_white: + valid_moves.append(Vector2(x - i, y - i)) + break + else: + break + else: + break + + # Check moves in the bottom-right diagonal + for i in range(1, 8): + if x + i < 8 and y + i < 8: + if board_state[x + i][y + i] == null: + valid_moves.append(Vector2(x + i, y + i)) + elif not board_state[x + i][y + i].is_white: + valid_moves.append(Vector2(x + i, y + i)) + break + else: + break + else: + break + + # Check moves in the bottom-left diagonal + for i in range(1, 8): + if x - i >= 0 and y + i < 8: + if board_state[x - i][y + i] == null: + valid_moves.append(Vector2(x - i, y + i)) + elif not board_state[x - i][y + i].is_white: + valid_moves.append(Vector2(x - i, y + i)) + break + else: + break + else: + break + # Check for MOVE_CARDINAL_ONE upgrade + if Upgrade.MOVE_CARDINAL_ONE in upgrades: + # Check cardinal moves (one space) + if x > 0 and (board_state[x - 1][y] == null or not board_state[x - 1][y].is_white): + valid_moves.append(Vector2(x - 1, y)) + if x < 7 and (board_state[x + 1][y] == null or not board_state[x + 1][y].is_white): + valid_moves.append(Vector2(x + 1, y)) + if y > 0 and (board_state[x][y - 1] == null or not board_state[x][y - 1].is_white): + valid_moves.append(Vector2(x, y - 1)) + if y < 7 and (board_state[x][y + 1] == null or not board_state[x][y + 1].is_white): + valid_moves.append(Vector2(x, y + 1)) + + return valid_moves diff --git a/scripts/King.gd b/scripts/King.gd new file mode 100644 index 0000000..e69de29 diff --git a/scripts/Knight.gd b/scripts/Knight.gd new file mode 100644 index 0000000..e69de29 diff --git a/scripts/Queen.gd b/scripts/Queen.gd new file mode 100644 index 0000000..e69de29 diff --git a/scripts/game.gd b/scripts/game.gd index 1c2eac7..ebad288 100644 --- a/scripts/game.gd +++ b/scripts/game.gd @@ -44,11 +44,13 @@ func _ready() -> void: #hard-coded setup of pieces board[0][7] = Rook.new(true, Vector2(0, 7)) + board[1][7] = Bishop.new(true, Vector2(1, 7)) board[3][7] = Pawn.new(true, Vector2(3, 7)) board[4][7] = Pawn.new(true, Vector2(4, 7)) board[7][7] = Rook.new(true, Vector2(7, 7)) board[0][4] = Rook.new(false, Vector2(0, 4)) + board[1][5] = Bishop.new(false, Vector2(1, 5)) board[3][5] = Pawn.new(false, Vector2(3, 5)) board[4][4] = Pawn.new(false, Vector2(4, 4)) board[3][4] = Pawn.new(false, Vector2(3, 4)) @@ -111,6 +113,8 @@ func draw_pieces(): piece_scene = preload("res://scenes/Pawn.tscn") elif board[x][y] is Rook: piece_scene = preload("res://scenes/Rook.tscn") + elif board[x][y] is Bishop: + piece_scene = preload("res://scenes/Bishop.tscn") # Add other piece types here (e.g., Knight, Bishop, Queen, King) if piece_scene: -- GitLab