1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-10-17 22:22:26 +00:00
serenity/Userland/Games/Hearts/Helpers.h
Lenny Maiorani a51fce6c0f LibCards+Games: Change name of card type to card suit
Playing cards have a `suit` such as `hearts`/`diamonds`, not a
`type`. Make the internal naming consistent with the way playing cards
are typically named.
2022-03-18 23:49:34 +00:00

58 lines
1.1 KiB
C++

/*
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibCards/Card.h>
using Cards::Card;
namespace Hearts {
enum class CardValue : uint8_t {
Number_2,
Number_3,
Number_4,
Number_5,
Number_6,
Number_7,
Number_8,
Number_9,
Number_10,
Jack,
Queen,
King,
Ace
};
inline CardValue hearts_card_value(Card const& card)
{
// Ace has a higher value than all other cards in Hearts
if (card.value() == 0)
return CardValue::Ace;
else
return static_cast<CardValue>(card.value() - 1);
}
inline uint8_t hearts_card_points(Card const& card)
{
if (card.suit() == Card::Suit::Hearts)
return 1;
else if (card.suit() == Card::Suit::Spades && hearts_card_value(card) == CardValue::Queen)
return 13;
else
return 0;
}
inline bool hearts_card_less(RefPtr<Card>& card1, RefPtr<Card>& card2)
{
if (card1->suit() != card2->suit())
return card1->suit() < card2->suit();
else
return hearts_card_value(*card1) < hearts_card_value(*card2);
}
}