Fiddled with some spacing and stuff

This commit is contained in:
2025-02-25 23:59:53 +00:00
parent added3ad03
commit dcbcb92376

View File

@@ -4,8 +4,8 @@ use card_stuffs::{self, NUM_PILES_KLONDIKE};
use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind}; use crossterm::event::{self, Event, KeyCode, KeyEvent, KeyEventKind};
use ratatui::{ use ratatui::{
buffer::Buffer, buffer::Buffer,
layout::{Constraint, Layout, Rect}, layout::{Constraint, Layout, Rect, Flex},
style::Stylize, style::{Style, Stylize, Color},
symbols::border, symbols::border,
text::{Line, Text}, text::{Line, Text},
widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List}, widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List},
@@ -18,56 +18,68 @@ pub struct App {
exit: bool, exit: bool,
} }
const CARD_HEIGHT: u16 = 12; const CARD_HEIGHT: u16 = 11;
const CARD_WIDTH: u16 = 17; const CARD_WIDTH: u16 = 15;
fn card_widget(card: &card_stuffs::Card) -> List { fn card_widget(card: &card_stuffs::Card, top: bool) -> List {
let five_card = [ let five_card = [
format!("{value}{suit} ", value=card.value, suit=card.suit), format!("{value}{suit} ", value=card.value, suit=card.suit),
format!(" "), format!(" "),
format!(" {suit} {suit} ", suit=card.suit), format!(" {suit} {suit} ", suit=card.suit),
format!(" "), format!(" "),
format!(" "), format!(" {suit} ", suit=card.suit),
format!(" {suit} ", suit=card.suit), format!(" "),
format!(" "), format!(" {suit} {suit} ", suit=card.suit),
format!(" "), format!(" "),
format!(" {suit} {suit} ", suit=card.suit), format!(" {value}{suit}", value=card.value, suit=card.suit),
format!(" "),
format!(" {value}{suit}", value=card.value, suit=card.suit),
]; ];
let card: Vec<ListItem> = five_card.iter().map(|(m)| { let card_style = match card.suit.colour() {
card_stuffs::Colour::Black => Style::new().black().bg(Color::White),
card_stuffs::Colour::Red => Style::new().red().bg(Color::White),
};
let card: Vec<ListItem> = five_card.iter().map(|m| {
ListItem::new(m.to_string()) ListItem::new(m.to_string())
.style(card_style)
}) })
.collect(); .collect();
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
if top {
borders |= Borders::BOTTOM;
}
List::new(card) List::new(card)
.block(Block::new() .block(Block::new()
.borders(Borders::ALL) //.style(Style::new().red().bold().italic())
// Might use something like this for "active"/"selected"
.borders(borders)
.border_type(BorderType::Rounded)) .border_type(BorderType::Rounded))
} }
fn turned_over_card() -> List<'static> { fn turned_over_card(top: bool) -> List<'static> {
let hidden_card = [ let hidden_card = [
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"), format!("#############"),
format!("###############"),
format!("###############"),
format!("###############"),
]; ];
let card: Vec<ListItem> = hidden_card.iter().map(|(m)| { let card: Vec<ListItem> = hidden_card.iter().map(|m| {
ListItem::new(m.to_string()) ListItem::new(m.to_string())
}) })
.collect(); .collect();
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
if top {
borders |= Borders::BOTTOM;
}
List::new(card) List::new(card)
.block(Block::new() .block(Block::new()
.borders(Borders::ALL) .borders(borders)
.border_type(BorderType::Rounded)) .border_type(BorderType::Rounded))
} }
@@ -120,21 +132,38 @@ impl App {
Constraint::Length(CARD_WIDTH), Constraint::Length(CARD_WIDTH),
Constraint::Length(CARD_WIDTH), Constraint::Length(CARD_WIDTH),
Constraint::Length(CARD_WIDTH), Constraint::Length(CARD_WIDTH),
]); ]).flex(Flex::SpaceAround);
let pileses: [Rect; 7] = horizontal.areas(piles_area); let pileses: [Rect; 7] = horizontal.areas(piles_area);
let a_card = card_widget(&self.cards.piles[0][0]);
for pile in 0..card_stuffs::NUM_PILES_KLONDIKE { for pile in 0..card_stuffs::NUM_PILES_KLONDIKE {
let mut constraints = Vec::new(); let mut constraints = Vec::new();
for card in 0..(card_stuffs::NUM_PILES_KLONDIKE + 13) { for card in 0..(card_stuffs::NUM_PILES_KLONDIKE + 13) {
constraints.push(Constraint::Min(2)); match self.cards.piles[pile].get(card) {
Some(_) => {
if card == self.cards.piles[pile].len() - 1 {
constraints.push(Constraint::Length(CARD_HEIGHT));
} else {
constraints.push(Constraint::Length(2));
}
}
None => {
constraints.push(Constraint::Length(0));
}
}
} }
let vertical = Layout::vertical(constraints); let vertical = Layout::vertical(constraints);
let card_display: [Rect; 20] = vertical.areas(pileses[pile]); let card_display: [Rect; card_stuffs::NUM_PILES_KLONDIKE + 13] = vertical.areas(pileses[pile]);
for (i, card) in card_display.iter().enumerate() { for (i, card) in card_display.iter().enumerate() {
match self.cards.piles[pile].get(i) { match self.cards.piles[pile].get(i) {
None => break, None => break,
Some(c) => { Some(c) => {
let is_top_card = i == self.cards.piles[pile].len() - 1;
let a_card = match c.visible {
true => card_widget(c, is_top_card),
//false => turned_over_card(is_top_card),
false => card_widget(c, is_top_card),
};
frame.render_widget( frame.render_widget(
&a_card, &a_card,
*card *card