Board drawing working

This commit is contained in:
Logan Hunt 2023-01-06 17:02:56 -07:00
parent bff9fd0a6a
commit ce62dd6106
No known key found for this signature in database
GPG Key ID: 8AC6A4B840C0EC49
3 changed files with 57 additions and 185 deletions

View File

@ -34,8 +34,9 @@ defmodule Chessh.SSH.Client.Board do
rows =
Enum.map(0..(@chess_board_height - 1), fn i ->
Enum.map(0..(@chess_board_width - 1), fn j ->
List.duplicate(if(tileIsLight(i, j), do: ' ', else: '#'), tile_width)
List.duplicate(if(tileIsLight(i, j), do: ' ', else: ''), tile_width)
end)
|> Enum.join("")
end)
Enum.flat_map(rows, fn row -> Enum.map(1..tile_height, fn _ -> row end) end)
@ -70,7 +71,7 @@ defmodule Chessh.SSH.Client.Board do
data,
"#{rowI}, #{curr_column}",
@ascii_chars["pieces"][
if(char != String.capitalize(char), do: "light", else: "dark")
if(char != String.capitalize(char), do: "dark", else: "light")
][type]
)}
end
@ -86,20 +87,32 @@ defmodule Chessh.SSH.Client.Board do
board = make_board(tile_dims)
Enum.zip_with([board, 1..length(board)], fn [row, rowI] ->
curr_y = div(rowI, tile_height)
Enum.zip_with([board, 0..(length(board) - 1)], fn [rowStr, row] ->
curr_y = div(row, tile_height)
Enum.zip_with([row, 1..length(row)], fn [char, col] ->
Enum.zip_with([String.graphemes(rowStr), 0..(String.length(rowStr) - 1)], fn [char, col] ->
curr_x = div(col, tile_width)
key = "#{rowI}, #{col}"
key = "#{curr_y}, #{curr_x}"
if Map.has_key?(coordinate_to_piece, key) do
piece_char =
piece_row =
Map.fetch!(coordinate_to_piece, key)
|> Enum.at(rowI - curr_y * tile_height)
|> String.at(col - curr_x * tile_width)
|> Enum.at(row - curr_y * tile_height)
if piece_char == " ", do: String.Chars.to_string(char), else: piece_char
piece_row_len = String.length(piece_row)
centered_col = div(tile_width - piece_row_len, 2)
relative_to_tile_col = col - curr_x * tile_width
Logger.debug("#{piece_row_len}, #{centered_col}, #{relative_to_tile_col}")
piece_char =
if relative_to_tile_col >= centered_col &&
relative_to_tile_col <= tile_width - centered_col - 1,
do: String.at(piece_row, relative_to_tile_col - centered_col),
else: " "
if piece_char == " ",
do: char,
else: piece_char
else
char
end
@ -109,11 +122,11 @@ defmodule Chessh.SSH.Client.Board do
end
def render(%Client.State{} = _state) do
board = make_board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", {9, 5})
board = make_board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", {7, 4})
[ANSI.home()] ++
Enum.map(
Enum.zip(0..(length(board) - 1), board),
Enum.zip(1..length(board), board),
fn {i, line} ->
[ANSI.cursor(i, 0), line]
end

View File

@ -38,7 +38,7 @@ defmodule Chessh.SSH.Client.Menu do
{y, x} = center_rect({logo_width, logo_height + length(text)}, {width, height})
Enum.flat_map(
Enum.zip(0..(length(text) - 1), text),
Enum.zip(1..length(text), text),
fn {i, line} ->
[
ANSI.cursor(y + i + dy, x + dx),

View File

@ -1,184 +1,43 @@
{
"letters": {
"a": [
" ",
" /\\ ",
"/--\\"
],
"b": [
" __ ",
"|__)",
"|__)"
],
"c": [
" __ ",
"/ ",
"\\__ "
],
"d": [
" __ ",
"| \\",
"|__/"
],
"e": [
" __ ",
"|_ ",
"|__ "
],
"f": [
" __ ",
"|_ ",
"| "
],
"g": [
" __ ",
"/ _ ",
"\\__\\"
],
"h": [
"| |",
"|__|",
"| |"
]
"a": [" ", " /\\ ", "/--\\"],
"b": [" __ ", "|__)", "|__)"],
"c": [" __ ", "/ ", "\\__ "],
"d": [" __ ", "| \\", "|__/"],
"e": [" __ ", "|_ ", "|__ "],
"f": [" __ ", "|_ ", "| "],
"g": [" __ ", "/ _ ", "\\__\\"],
"h": ["| |", "|__|", "| |"]
},
"numbers": {
"0": [
" _ ",
"| |",
"|_|"
],
"1": [
" ",
" /|",
" |"
],
"2": [
" _ ",
" )",
" /_"
],
"3": [
" _ ",
" _)",
" _)"
],
"4": [
" .",
" /|",
"'-|"
],
"5": [
" _ ",
"|_ ",
" _)"
],
"6": [
" ",
" / ",
"(_)"
],
"7": [
" __",
" /",
" / "
],
"8": [
" _ ",
"(_)",
"(_)"
],
"9": [
" _ ",
"(_)",
" )"
]
"0": [" _ ", "| |", "|_|"],
"1": [" ", " /|", " |"],
"2": [" _ ", " )", " /_"],
"3": [" _ ", " _)", " _)"],
"4": [" .", " /|", "'-|"],
"5": [" _ ", "|_ ", " _)"],
"6": [" ", " / ", "(_)"],
"7": [" __", " /", " / "],
"8": [" _ ", "(_)", "(_)"],
"9": [" _ ", "(_)", " )"]
},
"pieces": {
"light": {
"rook": [
" ",
" [`'`'] ",
" | | ",
" |__| ",
" "
],
"knight": [
" _ _ ",
" \\` '/ ",
" (o o) ",
" \\ / \\",
" ^ "
],
"queen": [
" /\\+/\\ ",
" /(o o)\\ ",
" (_) ",
" "
],
"king": [
" ",
" |`+'| ",
" (o o) ",
" (_) ",
" "
],
"bishop": [
" ",
" |v| ",
" (0 o) ",
" (_) ",
" "
],
"pawn": [
" _ ",
" ( ) ",
" | | ",
" |_| ",
" "
]
"rook": [" ", "L_|", " U ", "[.]"],
"knight": [" ", "/`)", " U ", "[.]"],
"bishop": [" . ", "(\\)", " U ", "[.]"],
"queen": [" . ", ").(", ").(", "[.]"],
"king": [" + ", ").(", ").(", "[.]"],
"pawn": [" ", " o ", " U ", "[.]"]
},
"dark": {
"rook": [
" ",
" [`'`'] ",
" |::| ",
" |::| ",
" "
],
"knight": [
" _ _ ",
" \\`.'/ ",
" (o:o) ",
" \\:/:\\",
" ^ "
],
"queen": [
" /\\+/\\ ",
" /(o:o)\\ ",
" (:) ",
" "
],
"king": [
" ",
" |`+'| ",
" (o:o) ",
" (:) ",
" "
],
"bishop": [
" ",
" |v| ",
" (o:o) ",
" (:) ",
" "
],
"pawn": [
" _ ",
" (:) ",
" |:| ",
" |_| ",
" "
]
"rook": [" ", "L-|", " U ", "[#]"],
"knight": [" ", "/`)", " U ", "[#]"],
"bishop": [" . ", "(\\)", " U ", "[#]"],
"king": [" + ", ")#(", ")#(", "[#]"],
"queen": [" . ", ")#(", ")#(", "[#]"],
"pawn": [" ", " o ", " U ", "[#]"]
}
}
}