summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Main.gd182
-rw-r--r--MoveTile.gd5
2 files changed, 111 insertions, 76 deletions
diff --git a/Main.gd b/Main.gd
index 37f7052..34ca12f 100644
--- a/Main.gd
+++ b/Main.gd
@@ -38,12 +38,9 @@ func _ready():
#spawn_piece('pawn', 'teal', 1, 6, team1)
#spawn_piece('pawn', 'orange', 2, 4, team2)
- #team1_king = spawn_piece('king', 'orange', 4, 7, team1)
- #spawn_piece('bishop', 'orange', 3, 7, team1)
- #spawn_piece('pawn', 'orange', 5, 6, team1)
- #spawn_piece('pawn', 'orange', 3, 6, team1)
- #spawn_piece('pawn', 'orange', 4, 6, team1)
- #spawn_piece('rook', 'teal', 7, 3, team2)
+ #checkmatet1()
+ #checkmatet2()
+
#spawn_piece('rook', 'orange', 0, 0, team2)
#spawn_piece('rook', 'orange', 7, 0, team2)
#team1_king = spawn_piece('rook', 'teal', 5, 3, team1)
@@ -55,7 +52,23 @@ func _ready():
OS.set_window_size(Vector2(700,700))
#OS.set_window_always_on_top(true)
-# horrifying discovery: this occurs after the signal capturing functions
+
+func checkmatet1():
+ team1_king = spawn_piece('king', 'orange', 4, 7, team1)
+ spawn_piece('bishop', 'orange', 3, 7, team1)
+ spawn_piece('pawn', 'orange', 5, 6, team1)
+ spawn_piece('pawn', 'orange', 3, 6, team1)
+ spawn_piece('pawn', 'orange', 4, 6, team1)
+ spawn_piece('rook', 'teal', 7, 3, team2)
+
+func checkmatet2():
+ team2_king = spawn_piece('king', 'teal', 4, 0, team2)
+ spawn_piece('bishop', 'teal', 3, 0, team2)
+ spawn_piece('pawn', 'teal', 5, 1, team2)
+ spawn_piece('pawn', 'teal', 3, 1, team2)
+ spawn_piece('pawn', 'teal', 4, 1, team2)
+ spawn_piece('rook', 'orange', 7, 2, team1)
+
func _process(_delta):
safely_handle_movement = false
if Input.is_action_just_pressed("mouse2"):
@@ -66,8 +79,25 @@ func _process(_delta):
print("whoops")
if click_spot() == Vector2(2,0):
print(board_to_text_board(board))
+ if click_spot() == Vector2(4,0):
+ for i in 8:
+ for k in 8:
+ if team2_capture[i][k] == 1:
+ var move_tile = movetile_scene.instance()
+ add_child(move_tile)
+ move_tile.set_color("red")
+ move_tile.position = in_square(Vector2(i * board_cell, k * board_cell))
+ if click_spot() == Vector2(5,0):
+ for i in 8:
+ for k in 8:
+ if team1_capture[i][k] == 1:
+ var move_tile = movetile_scene.instance()
+ add_child(move_tile)
+ move_tile.set_color("red")
+ move_tile.position = in_square(Vector2(i * board_cell, k * board_cell))
func new_turn():
+ check_for_promotion()
var text_board = board_to_text_board(board)
var captures = update_capture_tables(text_board)
team1_capture = captures[0]
@@ -75,10 +105,11 @@ func new_turn():
#print(captures)
is_king_team1_checked(text_board, true, team2_capture)
is_king_team2_checked(text_board, true, team1_capture)
- check_for_promotion()
+
turn += 1
print("Turn: %s" % turn)
save_turn()
+ print("-------------------")
func save_turn():
var text_board = board_to_text_board(board)
@@ -112,7 +143,7 @@ func board_to_text_board(boarde):
text_board[i][k] = 0
return text_board
-func update_capture_tables(text_board):
+func update_capture_tables(text_board, setting=tile_setting.hide_tiles_and_cover_allies):
var t1_capture = new_board()
var t2_capture = new_board()
var pieces = get_pieces(text_board)
@@ -125,9 +156,8 @@ func update_capture_tables(text_board):
for e in pieces:
var coords = e[chess_enum.pos]
var pattern = get_move_pattern(e, coords)
- var captured = can_chess_move(pattern, coords, text_board, tile_setting.hide_tiles_and_cover_allies)
+ var captured = can_chess_move(pattern, coords, text_board, setting)
if e[chess_enum.team] == team1:
- #rint(captured)
for c in captured:
if c.size() == 3:
if c[2] == "not attacking":
@@ -141,15 +171,19 @@ func update_capture_tables(text_board):
t2_capture[c[0]][c[1]] = 1
#print(team1_capture)
#print(team2_capture)
- #for i in 8:
- # for k in 8:
- # if t1_capture[i][k] == 1:
- # var move_tile = movetile_scene.instance()
- # add_child(move_tile)
- # move_tile.set_color("red")
- # move_tile.position = in_square(Vector2(i * board_cell, k * board_cell))
+ #color_tiles(t2_capture, "red")
+ #color_tiles(t1_capture, "green")
return [t1_capture, t2_capture]
+func color_tiles(capture, color):
+ for i in 8:
+ for k in 8:
+ if capture[i][k] == 1:
+ var move_tile = movetile_scene.instance()
+ add_child(move_tile)
+ move_tile.set_color(color)
+ move_tile.position = in_square(Vector2(i * board_cell, k * board_cell))
+
func check_for_promotion():
var pieces = get_tree().get_nodes_in_group("piece")
for e in pieces:
@@ -201,24 +235,22 @@ func enumerate_checkmate(text_board, which_king=1):
var piece = every_move[0]
#rint("piece at (%s,%s)" % [piece[0],piece[1]])
for move in every_move[1]:
- #rint("can move to: (%s,%s)" % [move[0],move[1]])
+ #print("can move to: (%s,%s)" % [move[0],move[1]])
var fake_board = pretend_text_board_movement(text_board.duplicate(true), piece, move)
#print(text_board)
#print(fake_board)
- var fake_captures = update_capture_tables(fake_board)
+ var fake_captures = update_capture_tables(fake_board.duplicate(true))
+ var t1_captures = fake_captures[0]
+ var t2_captures = fake_captures[1]
if which_king == 1:
- if is_king_team1_checked(fake_board, false, fake_captures[1]):
+ if is_king_team1_checked(fake_board, false, t2_captures):
pass
- #rint("King in check on this fake board!!")
else:
- #rint("King ***NOT*** in check! Not a ckeckmate!")
checkmate = false
else: # team2
- if is_king_team2_checked(fake_board, false, fake_captures[0]):
+ if is_king_team2_checked(fake_board, false, t1_captures):
pass
- #rint("King in check on this fake board!!")
else:
- #rint("King ***NOT*** in check! Not a ckeckmate!")
checkmate = false
return checkmate
@@ -241,7 +273,7 @@ func team_every_legal_move(text_board, team):
var coords = [i,k]
var move_pattern
#var name_of_this = match_piece_names_enums(piece_name)
- move_pattern = get_move_pattern([piece_name, team2], coords)
+ move_pattern = get_move_pattern([piece_name, team], coords)
every_legal_move.append([[i,k], can_chess_move(move_pattern, coords, text_board, tile_setting.hide_tiles_no_cover_allies)])
#rint(every_legal_move)
return every_legal_move
@@ -467,81 +499,81 @@ func can_chess_move(pattern, coords, text_board, create_tiles=tile_setting.show_
for e in pattern:
match (e):
move_1_down_pawn:
- var test = make_tiles(coords, [0,1], 1, true, curr_team, {}, create_tiles)
+ var test = make_tiles(coords, [0,1], 1, true, curr_team, {}, create_tiles, text_board)
if test:
test[0].push_back("not attacking")
can_move.append_array(test)
move_2_down_pawn:
- var test = make_tiles(coords, [0,1], 1, true, curr_team, {}, create_tiles)
+ var test = make_tiles(coords, [0,1], 1, true, curr_team, {}, create_tiles, text_board)
if test:
test[0].push_back("not attacking")
can_move.append_array(test)
- var test2 = make_tiles(coords, [0,2], 1, true, curr_team, {'tile_is_en_passant': true}, create_tiles)
+ var test2 = make_tiles(coords, [0,2], 1, true, curr_team, {'tile_is_en_passant': true}, create_tiles, text_board)
if test2:
test2[0].push_back("not attacking")
can_move.append_array(test2)
attack_1_sw:
- var test = make_tiles(coords, [-1,1], 1, false, curr_team, {"must_attack": true}, create_tiles)
+ var test = make_tiles(coords, [-1,1], 1, false, curr_team, {"must_attack": true}, create_tiles, text_board)
if test:
test[0].push_back("must attack")
can_move.append_array(test)
attack_1_se:
- var test = make_tiles(coords, [1,1], 1, false, curr_team, {"must_attack": true}, create_tiles)
+ var test = make_tiles(coords, [1,1], 1, false, curr_team, {"must_attack": true}, create_tiles, text_board)
if test:
test[0].push_back("must attack")
can_move.append_array(test)
en_passant_sw:
var pawn_maybe = text_board[coords[0]-1][coords[1]]
if pawn_maybe and pawn_maybe[chess_enum.piece_enum] == piece_names["pawn"] and pawn_maybe[chess_enum.en_passant] == 1 and pawn_maybe[chess_enum.team] != curr_team:
- can_move.append_array(make_tiles(coords, [-1,1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles, text_board))
en_passant_se:
if ! coords[0] + 1 > BOARD_WIDTH:
var pawn_maybe = text_board[coords[0]+1][coords[1]]
if pawn_maybe and pawn_maybe[chess_enum.piece_enum] == piece_names["pawn"] and pawn_maybe[chess_enum.en_passant] == 1 and pawn_maybe[chess_enum.team] != curr_team:
- can_move.append_array(make_tiles(coords, [1,1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles, text_board))
move_1_up_pawn:
- var test = make_tiles(coords, [0,-1], 1, true, curr_team, {}, create_tiles)
+ var test = make_tiles(coords, [0,-1], 1, true, curr_team, {}, create_tiles, text_board)
if test:
test[0].push_back("not attacking")
can_move.append_array(test)
move_2_up_pawn:
- var test = make_tiles(coords, [0,-1], 1, true, curr_team, {}, create_tiles)
+ var test = make_tiles(coords, [0,-1], 1, true, curr_team, {}, create_tiles, text_board)
if test:
test[0].push_back("not attacking")
can_move.append_array(test)
- var test2 = make_tiles(coords, [0,-2], 1, true, curr_team, {'tile_is_en_passant': true}, create_tiles)
+ var test2 = make_tiles(coords, [0,-2], 1, true, curr_team, {'tile_is_en_passant': true}, create_tiles, text_board)
if test2:
test2[0].push_back("not attacking")
can_move.append_array(test2)
attack_1_nw:
- var test = make_tiles(coords, [-1,-1], 1, false, curr_team, {"must_attack": true}, create_tiles)
+ var test = make_tiles(coords, [-1,-1], 1, false, curr_team, {"must_attack": true}, create_tiles, text_board)
if test:
test[0].push_back("must attack")
can_move.append_array(test)
attack_1_ne:
- var test = make_tiles(coords, [1,-1], 1, false, curr_team, {"must_attack": true}, create_tiles)
+ var test = make_tiles(coords, [1,-1], 1, false, curr_team, {"must_attack": true}, create_tiles, text_board)
if test:
test[0].push_back("must attack")
can_move.append_array(test)
en_passant_nw:
var pawn_maybe = text_board[coords[0]-1][coords[1]]
if pawn_maybe and pawn_maybe[chess_enum.piece_enum] == piece_names["pawn"] and pawn_maybe[chess_enum.en_passant] == 1 and pawn_maybe[chess_enum.team] != curr_team:
- can_move.append_array(make_tiles(coords, [-1,-1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,-1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles, text_board))
en_passant_ne:
if ! coords[0] + 1 > BOARD_WIDTH:
var pawn_maybe = text_board[coords[0]+1][coords[1]]
if pawn_maybe and pawn_maybe[chess_enum.piece_enum] == piece_names["pawn"] and pawn_maybe[chess_enum.en_passant] == 1 and pawn_maybe[chess_enum.team] != curr_team:
- can_move.append_array(make_tiles(coords, [1,-1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,-1], 1, true, curr_team, {"en_passant_pawn": pawn_maybe}, create_tiles, text_board))
move_up_inf:
- can_move.append_array(make_tiles(coords, [0,-1], BOARD_HEIGHT, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [0,-1], BOARD_HEIGHT, false, curr_team, {}, create_tiles, text_board))
move_down_inf:
- can_move.append_array(make_tiles(coords, [0,1], BOARD_HEIGHT, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [0,1], BOARD_HEIGHT, false, curr_team, {}, create_tiles, text_board))
move_left_inf:
- can_move.append_array(make_tiles(coords, [-1,0], BOARD_WIDTH, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,0], BOARD_WIDTH, false, curr_team, {}, create_tiles, text_board))
move_right_inf:
- can_move.append_array(make_tiles(coords, [1,0], BOARD_WIDTH, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,0], BOARD_WIDTH, false, curr_team, {}, create_tiles, text_board))
castling:
if ! curr_piece[chess_enum.has_moved] and ! curr_piece[chess_enum.in_check]:
var y = coords[1]
@@ -569,7 +601,7 @@ func can_chess_move(pattern, coords, text_board, create_tiles=tile_setting.show_
#rint("There is something at (%s,%s) %s" % [king_x + i,y, board[king_x + i][y].get_piece() ])
if ! blocked:
- can_move.append_array(make_tiles(coords, [2,0], 1, false, curr_team, {"castling_rook": ele}, create_tiles))
+ can_move.append_array(make_tiles(coords, [2,0], 1, false, curr_team, {"castling_rook": ele}, create_tiles, text_board))
else:
var blocked = false
var diff = king_x - rook_x
@@ -586,43 +618,43 @@ func can_chess_move(pattern, coords, text_board, create_tiles=tile_setting.show_
blocked = true
#rint("There is something at (%s,%s) %s" % [rook_x + i, y, board[rook_x + i][y].get_piece()])
if ! blocked:
- can_move.append_array(make_tiles(coords, [-2,0], 1, false, curr_team, {"castling_rook": ele}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-2,0], 1, false, curr_team, {"castling_rook": ele}, create_tiles, text_board))
move_ne_inf:
- can_move.append_array(make_tiles(coords, [1,-1], 8, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,-1], 8, false, curr_team, {}, create_tiles, text_board))
move_nw_inf:
- can_move.append_array(make_tiles(coords, [-1,-1], 8, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,-1], 8, false, curr_team, {}, create_tiles, text_board))
move_sw_inf:
- can_move.append_array(make_tiles(coords, [-1,1], 8, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,1], 8, false, curr_team, {}, create_tiles, text_board))
move_se_inf:
- can_move.append_array(make_tiles(coords, [1,1], 8, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,1], 8, false, curr_team, {}, create_tiles, text_board))
knight:
- can_move.append_array(make_tiles(coords, [1,2], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [1,-2], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [-1,-2], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [-1,2], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [2,1], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [2,-1], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [-2,-1], 1, false, curr_team, {}, create_tiles))
- can_move.append_array(make_tiles(coords, [-2,1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,2], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [1,-2], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [-1,-2], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [-1,2], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [2,1], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [2,-1], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [-2,-1], 1, false, curr_team, {}, create_tiles, text_board))
+ can_move.append_array(make_tiles(coords, [-2,1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_down:
- can_move.append_array(make_tiles(coords, [0,1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [0,1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_up:
- can_move.append_array(make_tiles(coords, [0,-1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [0,-1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_right:
- can_move.append_array(make_tiles(coords, [1,0], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,0], 1, false, curr_team, {}, create_tiles, text_board))
move_1_left:
- can_move.append_array(make_tiles(coords, [-1,0], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,0], 1, false, curr_team, {}, create_tiles, text_board))
move_1_ne:
- can_move.append_array(make_tiles(coords, [1,-1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,-1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_nw:
- can_move.append_array(make_tiles(coords, [-1,-1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,-1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_se:
- can_move.append_array(make_tiles(coords, [1,1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [1,1], 1, false, curr_team, {}, create_tiles, text_board))
move_1_sw:
- can_move.append_array(make_tiles(coords, [-1,1], 1, false, curr_team, {}, create_tiles))
+ can_move.append_array(make_tiles(coords, [-1,1], 1, false, curr_team, {}, create_tiles, text_board))
return can_move
func position_to_board_cell(vect2):
@@ -706,7 +738,7 @@ func make_tiles(coords, pattern, go_range, cant_attack, curr_team,
'tile_is_en_passant': false,
'en_passant_pawn': null,
'castling_rook': null
- }, create_tiles = 1):
+ }, create_tiles = tile_setting.show_tiles, text_board=[]):
var x = coords[0]
var y = coords[1]
var pattern0 = pattern[0]
@@ -721,24 +753,24 @@ func make_tiles(coords, pattern, go_range, cant_attack, curr_team,
b += pattern1
# dont go out of bounds: not bigger than board size but not smaller than 0
if (x + a) <= BOARD_WIDTH and (y + b) <= BOARD_HEIGHT and (x + a) >= 0 and (y + b) >= 0 :
- var check = board[x + a][y + b]
+ var check = text_board[x + a][y + b]
if ! check and ! dict.get("must_attack"):
- if create_tiles == 1:
+ if create_tiles == tile_setting.show_tiles:
spawn_move_tile([x + a, y + b], dict.get("tile_is_en_passant"), dict.get("en_passant_pawn"), dict.get("castling_rook"))
made_tile.push_back([x + a, y + b])
elif dict.get("must_attack"): # pawn setting
- if check and check.get_team() != curr_team:
- if create_tiles == 1:
+ if check and check[chess_enum.team] != curr_team:
+ if create_tiles == tile_setting.show_tiles:
spawn_move_tile([x + a, y + b])
made_tile.push_back([x + a, y + b])
elif create_tiles == 0:
made_tile.push_back([x + a, y + b])
- elif ! cant_attack and check.get_team() != curr_team:
- if create_tiles == 1:
+ elif ! cant_attack and check[chess_enum.team] != curr_team:
+ if create_tiles == tile_setting.show_tiles:
spawn_move_tile([x + a, y + b], dict.get("tile_is_en_passant"), dict.get("en_passant_pawn"))
made_tile.push_back([x + a, y + b])
break # rules of chess say pieces cant go past another
- elif ! create_tiles and ! cant_attack and check.get_team() == curr_team :
+ elif create_tiles == tile_setting.hide_tiles_and_cover_allies and ! cant_attack and check[chess_enum.team] == curr_team :
# ^ in otherwords: we won't mark it on map but will 'mark' it for non-maps (like capture board)
made_tile.push_back([x + a, y + b])
break # but still can't go past teammate
diff --git a/MoveTile.gd b/MoveTile.gd
index bb74eba..4ae1ea1 100644
--- a/MoveTile.gd
+++ b/MoveTile.gd
@@ -3,7 +3,8 @@ extends Node2D
signal move_clicked
const blue = Color(0.30, 0.71, 0.96, 0.54)
-const red = Color(1.00, 0.00, 0.00, 0.54)
+const red = Color(1.00, 0.00, 0.00, 0.15)
+const green = Color(0.00, 1.00, 0.00, 0.15)
export var en_passant_tile = false
export var en_passant_kill_tile = false
@@ -18,3 +19,5 @@ func set_color(color):
$Rect.color = blue
elif color == "red":
$Rect.color = red
+ elif color == "green":
+ $Rect.color = green