online multiplayer chess game (note server currently down)
attempts at creating a check system
bendn 2022-04-26
parent c930618 · commit 6705f17
-rw-r--r--Events.gd4
-rw-r--r--Globals.gd2
-rw-r--r--Grid.gd20
-rw-r--r--Piece.gd97
-rw-r--r--Square.gd7
-rw-r--r--World.tscn1
-rw-r--r--project.godot18
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
diff --git a/Globals.gd b/Globals.gd
index ea34f25..daab65b 100644
--- a/Globals.gd
+++ b/Globals.gd
@@ -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
diff --git a/Grid.gd b/Grid.gd
index 57a456a..987d7f0 100644
--- a/Grid.gd
+++ b/Grid.gd
@@ -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()
diff --git a/Piece.gd b/Piece.gd
index 966319a..2f01a6f 100644
--- a/Piece.gd
+++ b/Piece.gd
@@ -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
diff --git a/Square.gd b/Square.gd
index e5dc2aa..818561c 100644
--- a/Square.gd
+++ b/Square.gd
@@ -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
diff --git a/World.tscn b/World.tscn
index 2a5f680..d43dfb8 100644
--- a/World.tscn
+++ b/World.tscn
@@ -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 )