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 ratatui::{
buffer::Buffer,
layout::{Constraint, Layout, Rect},
style::Stylize,
layout::{Constraint, Layout, Rect, Flex},
style::{Style, Stylize, Color},
symbols::border,
text::{Line, Text},
widgets::{block::title, Block, BorderType, Borders, Paragraph, Widget, Padding, ListItem, List},
@@ -18,56 +18,68 @@ pub struct App {
exit: bool,
}
const CARD_HEIGHT: u16 = 12;
const CARD_WIDTH: u16 = 17;
const CARD_HEIGHT: u16 = 11;
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 = [
format!("{value}{suit} ", value=card.value, suit=card.suit),
format!(" "),
format!(" {suit} {suit} ", suit=card.suit),
format!(" "),
format!(" "),
format!(" {suit} ", suit=card.suit),
format!(" "),
format!(" "),
format!(" {suit} {suit} ", 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())
.style(card_style)
})
.collect();
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
if top {
borders |= Borders::BOTTOM;
}
List::new(card)
.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))
}
fn turned_over_card() -> List<'static> {
fn turned_over_card(top: bool) -> List<'static> {
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())
})
.collect();
let mut borders = Borders::TOP | Borders::LEFT | Borders::RIGHT;
if top {
borders |= Borders::BOTTOM;
}
List::new(card)
.block(Block::new()
.borders(Borders::ALL)
.borders(borders)
.border_type(BorderType::Rounded))
}
@@ -120,21 +132,38 @@ impl App {
Constraint::Length(CARD_WIDTH),
Constraint::Length(CARD_WIDTH),
Constraint::Length(CARD_WIDTH),
]);
]).flex(Flex::SpaceAround);
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 {
let mut constraints = Vec::new();
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 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() {
match self.cards.piles[pile].get(i) {
None => break,
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(
&a_card,
*card