Draw board #3

Merged
Simponic merged 12 commits from draw_board into main 2023-01-13 19:02:31 -05:00
3 changed files with 57 additions and 185 deletions
Showing only changes of commit ce62dd6106 - Show all commits

View File

@ -34,8 +34,9 @@ defmodule Chessh.SSH.Client.Board do
rows = rows =
Enum.map(0..(@chess_board_height - 1), fn i -> Enum.map(0..(@chess_board_height - 1), fn i ->
Enum.map(0..(@chess_board_width - 1), fn j -> 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) end)
|> Enum.join("")
end) end)
Enum.flat_map(rows, fn row -> Enum.map(1..tile_height, fn _ -> row end) 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, data,
"#{rowI}, #{curr_column}", "#{rowI}, #{curr_column}",
@ascii_chars["pieces"][ @ascii_chars["pieces"][
if(char != String.capitalize(char), do: "light", else: "dark") if(char != String.capitalize(char), do: "dark", else: "light")
][type] ][type]
)} )}
end end
@ -86,20 +87,32 @@ defmodule Chessh.SSH.Client.Board do
board = make_board(tile_dims) board = make_board(tile_dims)
Enum.zip_with([board, 1..length(board)], fn [row, rowI] -> Enum.zip_with([board, 0..(length(board) - 1)], fn [rowStr, row] ->
curr_y = div(rowI, tile_height) 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) curr_x = div(col, tile_width)
key = "#{rowI}, #{col}" key = "#{curr_y}, #{curr_x}"
if Map.has_key?(coordinate_to_piece, key) do if Map.has_key?(coordinate_to_piece, key) do
piece_char = piece_row =
Map.fetch!(coordinate_to_piece, key) Map.fetch!(coordinate_to_piece, key)
|> Enum.at(rowI - curr_y * tile_height) |> Enum.at(row - curr_y * tile_height)
|> String.at(col - curr_x * tile_width)
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 else
char char
end end
@ -109,11 +122,11 @@ defmodule Chessh.SSH.Client.Board do
end end
def render(%Client.State{} = _state) do 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()] ++ [ANSI.home()] ++
Enum.map( Enum.map(
Enum.zip(0..(length(board) - 1), board), Enum.zip(1..length(board), board),
fn {i, line} -> fn {i, line} ->
[ANSI.cursor(i, 0), line] [ANSI.cursor(i, 0), line]
end 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}) {y, x} = center_rect({logo_width, logo_height + length(text)}, {width, height})
Enum.flat_map( Enum.flat_map(
Enum.zip(0..(length(text) - 1), text), Enum.zip(1..length(text), text),
fn {i, line} -> fn {i, line} ->
[ [
ANSI.cursor(y + i + dy, x + dx), ANSI.cursor(y + i + dy, x + dx),

View File

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