Solitaire: Move cards functionality into LibCards

This commit is contained in:
Gunnar Beutner 2021-05-20 13:01:14 +02:00 committed by Andreas Kling
parent 9440a3c280
commit 3e47eec862
Notes: sideshowbarker 2024-07-18 17:36:00 +09:00
9 changed files with 32 additions and 23 deletions

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -1,12 +1,10 @@
compile_gml(Solitaire.gml SolitaireGML.h solitaire_gml)
set(SOURCES
Card.cpp
CardStack.cpp
Game.cpp
main.cpp
SolitaireGML.h
)
serenity_app(Solitaire ICON app-solitaire)
target_link_libraries(Solitaire LibGUI LibGfx LibCore)
target_link_libraries(Solitaire LibCards LibGUI LibGfx LibCore)

View file

@ -6,10 +6,13 @@
#pragma once
#include "CardStack.h"
#include <LibCards/CardStack.h>
#include <LibGUI/Frame.h>
#include <LibGUI/Painter.h>
using Cards::Card;
using Cards::CardStack;
namespace Solitaire {
enum class Mode : u8 {

View file

@ -1,6 +1,7 @@
add_subdirectory(LibArchive)
add_subdirectory(LibAudio)
add_subdirectory(LibC)
add_subdirectory(LibCards)
add_subdirectory(LibChess)
add_subdirectory(LibCompress)
add_subdirectory(LibCore)

View file

@ -0,0 +1,7 @@
set(SOURCES
Card.cpp
CardStack.cpp
)
serenity_lib(LibCards cards)
target_link_libraries(LibCards LibC LibCore)

View file

@ -9,7 +9,7 @@
#include <LibGfx/Font.h>
#include <LibGfx/FontDatabase.h>
namespace Solitaire {
namespace Cards {
static const NonnullRefPtr<Gfx::CharacterBitmap> s_diamond = Gfx::CharacterBitmap::create_from_ascii(
" # "
@ -75,7 +75,7 @@ Card::Card(Type type, uint8_t value)
Gfx::Painter bg_painter(*s_background);
s_background->fill(Color::White);
auto image = Gfx::Bitmap::load_from_file("/res/icons/solitaire/buggie-deck.png");
auto image = Gfx::Bitmap::load_from_file("/res/icons/cards/buggie-deck.png");
VERIFY(!image.is_null());
float aspect_ratio = image->width() / static_cast<float>(image->height());

View file

@ -15,7 +15,7 @@
#include <LibGfx/Rect.h>
#include <ctype.h>
namespace Solitaire {
namespace Cards {
class Card final : public Core::Object {
C_OBJECT(Card)
@ -74,28 +74,28 @@ private:
}
template<>
struct AK::Formatter<Solitaire::Card> : Formatter<FormatString> {
void format(FormatBuilder& builder, const Solitaire::Card& card)
struct AK::Formatter<Cards::Card> : Formatter<FormatString> {
void format(FormatBuilder& builder, const Cards::Card& card)
{
StringView type;
switch (card.type()) {
case Solitaire::Card::Type::Clubs:
case Cards::Card::Type::Clubs:
type = "C"sv;
break;
case Solitaire::Card::Type::Diamonds:
case Cards::Card::Type::Diamonds:
type = "D"sv;
break;
case Solitaire::Card::Type::Hearts:
case Cards::Card::Type::Hearts:
type = "H"sv;
break;
case Solitaire::Card::Type::Spades:
case Cards::Card::Type::Spades:
type = "S"sv;
break;
default:
VERIFY_NOT_REACHED();
}
Formatter<FormatString>::format(builder, "{:>2}{}", Solitaire::Card::labels[card.value()], type);
Formatter<FormatString>::format(builder, "{:>2}{}", Cards::Card::labels[card.value()], type);
}
};

View file

@ -6,7 +6,7 @@
#include "CardStack.h"
namespace Solitaire {
namespace Cards {
CardStack::CardStack()
: m_position({ 0, 0 })

View file

@ -10,7 +10,7 @@
#include <AK/Format.h>
#include <AK/Vector.h>
namespace Solitaire {
namespace Cards {
class CardStack final {
public:
@ -88,25 +88,25 @@ private:
}
template<>
struct AK::Formatter<Solitaire::CardStack> : Formatter<FormatString> {
void format(FormatBuilder& builder, const Solitaire::CardStack& stack)
struct AK::Formatter<Cards::CardStack> : Formatter<FormatString> {
void format(FormatBuilder& builder, const Cards::CardStack& stack)
{
StringView type;
switch (stack.type()) {
case Solitaire::CardStack::Type::Stock:
case Cards::CardStack::Type::Stock:
type = "Stock"sv;
break;
case Solitaire::CardStack::Type::Normal:
case Cards::CardStack::Type::Normal:
type = "Normal"sv;
break;
case Solitaire::CardStack::Type::Foundation:
case Cards::CardStack::Type::Foundation:
type = "Foundation"sv;
break;
case Solitaire::CardStack::Type::Waste:
case Cards::CardStack::Type::Waste:
type = "Waste"sv;
break;
case Solitaire::CardStack::Type::Play:
case Cards::CardStack::Type::Play:
type = "Play"sv;
break;
default: