Draw board #3
@ -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
|
||||||
|
@ -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),
|
||||||
|
@ -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": [
|
|
||||||
" _ ",
|
|
||||||
" (:) ",
|
|
||||||
" |:| ",
|
|
||||||
" |_| ",
|
|
||||||
" "
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user