online multiplayer chess game (note server currently down)
attempts at creating a check system
| -rw-r--r-- | Events.gd | 4 | ||||
| -rw-r--r-- | Globals.gd | 2 | ||||
| -rw-r--r-- | Grid.gd | 20 | ||||
| -rw-r--r-- | Piece.gd | 97 | ||||
| -rw-r--r-- | Square.gd | 7 | ||||
| -rw-r--r-- | World.tscn | 1 | ||||
| -rw-r--r-- | project.godot | 18 |
7 files changed, 107 insertions, 42 deletions
diff --git a/Events.gd b/Events.gd new file mode 100644 index 0000000..608efaa --- /dev/null +++ b/Events.gd @@ -0,0 +1,4 @@ +extends Node + +# warning-ignore-all:unused_signal +signal turn_over @@ -2,5 +2,7 @@ extends Node var grid: Grid = null var turns := 0 +var black_incheck = false +var white_incheck = false var turn := true # true for white, false for black # true cuz white goes first @@ -26,6 +26,16 @@ func _ready(): Globals.grid = self init_board() init_matrix() + Events.connect("turn_over", self, "_on_turn_over") + + +func _on_turn_over(): + for i in range(0, 8): + for j in range(0, 8): + var spot = matrix[i][j] + if spot and spot.white != Globals.turn: # enemie + if matrix[i][j].create_circles(false): + print("woaw") func _exit_tree(): @@ -68,7 +78,6 @@ func init_board(): background.add_child(square) square.connect("clicked", self, "square_clicked") background_matrix[i].append(square) - print_matrix_pretty(background_matrix) func add_pieces(): @@ -134,13 +143,13 @@ func print_matrix_pretty(mat = matrix): func check_for_circle(position: Vector2): - return background_matrix[position.x][position.y].circle.visible + return background_matrix[position.x][position.y].circle_on func check_for_frame(position: Vector2): if !matrix[position.y][position.x]: return false - return matrix[position.y][position.x].frame.visible + return matrix[position.y][position.x].frameon func square_clicked(position: Vector2): @@ -174,3 +183,8 @@ func clear_frames(): var square = matrix[i][j] if square: square.set_frame(false) + + +func _input(event): + if event.is_action("debug"): + print_matrix_pretty() @@ -6,7 +6,7 @@ var white := true var realname = "pawn" var has_moved = false var sprite - +var frameon = false var black_holder onready var tween = $Tween @@ -55,6 +55,7 @@ func moveto(position): move(position) Globals.turn = not Globals.turn Globals.turns += 1 + Events.emit_signal("turn_over") func pos_around(around_vector): @@ -74,7 +75,16 @@ func all_dirs(): ] -func create_circles(): +func reality(carry, real): + if real: + set_circle(carry) + set_circle(carry, "take") + else: + var result = set_circle(carry, "take", false) + return result # checking if king is takeable + + +func create_circles(real = true): # for motion match realname: "pawn": @@ -89,18 +99,22 @@ func create_circles(): if has_moved else [pos_around(Vector2.DOWN), pos_around(Vector2.DOWN * 2)] ) - set_circle(carry) + if real: + set_circle(carry) # deal with the take logic carry = [] var takes = [pos_around(Vector2(-1, -1)), pos_around(Vector2(1, -1))] if !white: takes = [pos_around(Vector2(-1, 1)), pos_around(Vector2(1, 1))] for i in takes: - i = clamp_vector(i) - if i == null: + i = check_bounds(i) + if !i: continue carry.append(i) - set_circle(carry, "take") + if real: + set_circle(carry, "take") + else: + return set_circle(carry, "take", false) "king": var carry = [ pos_around(Vector2.UP), @@ -112,8 +126,7 @@ func create_circles(): pos_around(Vector2(-1, 1)), pos_around(Vector2(-1, -1)) ] - set_circle(carry) - set_circle(carry, "take") # king ez + return reality(carry, real) "knight": var carry = [ pos_around(Vector2(-2, -1)), @@ -125,20 +138,16 @@ func create_circles(): pos_around(Vector2(-1, 2)), pos_around(Vector2(1, 2)) ] - set_circle(carry) - set_circle(carry, "take") + return reality(carry, real) "rook": var carry = traverse(all_dirs().slice(0, 4)) - set_circle(carry) - set_circle(carry, "take") + return reality(carry, real) "bishop": var carry = traverse(all_dirs().slice(4, 8)) - set_circle(carry) - set_circle(carry, "take") + return reality(carry, real) "queen": var carry = traverse(all_dirs()) - set_circle(carry) - set_circle(carry, "take") + return reality(carry, real) func traverse(arr = [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT]): @@ -148,34 +157,35 @@ func traverse(arr = [Vector2.UP, Vector2.DOWN, Vector2.LEFT, Vector2.RIGHT]): var pos = real_position while true: pos = pos + i - pos = clamp_vector(pos) - if !traverse_helper(pos): + pos = check_bounds(pos) + if blocking(pos): break carry.append(pos) black_holder = false + pd(carry, realname == "queen") return carry -func traverse_helper(pos): - if pos == null: - return null - pos = at_pos(pos) - if pos: - if pos.white != Globals.turn and !black_holder: - black_holder = true - return true - return null - return true +func blocking(pos): + if pos == null: # its null + return true + var piece = at_pos(pos) # get the piece at pos + if piece: # it isnt null + if piece.white != Globals.turn and !black_holder: # other team + black_holder = true # store a variable so we can have one black thing + return false + return true + return false # it is null func at_pos(vector): return Globals.grid.matrix[vector.y][vector.x] -func set_circle(positions: Array, type := "move"): +func set_circle(positions: Array, type := "move", real = true): for i in range(len(positions)): - var pos = clamp_vector(positions[i]) - if pos == null: + var pos = check_bounds(positions[i]) + if !pos: continue var spot = at_pos(pos) if type == "move": @@ -183,19 +193,32 @@ func set_circle(positions: Array, type := "move"): continue Globals.grid.background_matrix[pos.x][pos.y].set_circle(true) elif type == "take": - if spot and spot.white != Globals.turn: + var team = Globals.turn if real else !Globals.turn + if spot and spot.white != team: spot.set_frame(true) + if spot.realname == "king": + if real: + printerr("shit") + else: + print("chec") + return true + return false + + +func pd(string, toprint): + if toprint: + print(string) -func set_frame(boolean): - frame.visible = boolean +func set_frame(boolean, real = true): + frameon = boolean + if real: + frame.visible = boolean -func clamp_vector(vector: Vector2): +func check_bounds(vector: Vector2): if vector.y < 0 or vector.y > 7 or vector.x < 0 or vector.x > 7: return null - vector.x = clamp(vector.x, 0, 7) - vector.y = clamp(vector.y, 0, 7) return vector @@ -2,6 +2,7 @@ extends ColorRect var realname = "Square" var real_position = Vector2() +var circle_on = false onready var area = $Squarea onready var areacollisionshape = $Squarea/CollisionShape2D @@ -23,5 +24,7 @@ func _on_Squarea_input_event(_viewport: Node, event: InputEvent, _shape_idx: int emit_signal("clicked", real_position) -func set_circle(boolean: bool): - circle.visible = boolean +func set_circle(boolean: bool, real = true): + circle_on = boolean + if real: + circle.visible = boolean @@ -6,5 +6,6 @@ [node name="Grid" type="Node2D" parent="."] script = ExtResource( 1 ) +board_color1 = Color( 0.870588, 0.890196, 0.901961, 1 ) [node name="Background" type="Node2D" parent="Grid"] diff --git a/project.godot b/project.godot index d06d06b..dcfea19 100644 --- a/project.godot +++ b/project.godot @@ -26,11 +26,21 @@ _global_script_class_icons={ [application] +config/name="chess" +config/description="pog" run/main_scene="res://World.tscn" +config/use_custom_user_dir=true +config/custom_user_dir_name="chess" +config/icon="res://assets/california/wP.png" [autoload] Globals="*res://Globals.gd" +Events="*res://Events.gd" + +[debug] + +gdscript/warnings/return_value_discarded=false [display] @@ -67,6 +77,14 @@ texture={ "svg/scale": 1.0 } +[input] + +debug={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":92,"physical_scancode":0,"unicode":0,"echo":false,"script":null) + ] +} + [rendering] environment/default_clear_color=Color( 0.301961, 0.301961, 0.301961, 1 ) |