From c5b75b347ecaca4f62280e04508d6362cd8fa093 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Thu, 28 Mar 2019 18:53:21 -0400 Subject: Simplify (sort of) Cards API and add FreeCell loading --- sol.c | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'sol.c') diff --git a/sol.c b/sol.c index c7ad5ec..a2bd7c3 100644 --- a/sol.c +++ b/sol.c @@ -172,27 +172,30 @@ static bool gameMove(uint dest, Card card) { } enum { + CardWidth = Cards_CardWidth, + CardHeight = Cards_CardHeight, + StackMarginX = 11, StackMarginY = 6, StockX = StackMarginX, StockY = StackMarginY, - WasteX = StockX + Cards_Width + StackMarginX, + WasteX = StockX + CardWidth + StackMarginX, WasteY = StackMarginY, - FoundationX = WasteX + 2 * (Cards_Width + StackMarginX), + FoundationX = WasteX + 2 * (CardWidth + StackMarginX), FoundationY = StackMarginY, TableauX = StackMarginX, - TableauY = StockY + Cards_Height + StackMarginY, + TableauY = StockY + CardHeight + StackMarginY, FanRightDeltaX = 14, FanDownDeltaYBack = 3, FanDownDeltaYFront = 15, - WindowWidth = 7 * Cards_Width + 8 * StackMarginX, - WindowHeight = 2 * (StackMarginY + Cards_Height) + WindowWidth = 7 * CardWidth + 8 * StackMarginX, + WindowHeight = 2 * (StackMarginY + CardHeight) + 6 * FanDownDeltaYBack + 12 * FanDownDeltaYFront + StackMarginY, @@ -212,31 +215,31 @@ static uint backTexture = Cards_Back1; static void updateLayout(void) { layoutClear(&layout); - SDL_Rect stock = { StockX, StockY, Cards_Width, Cards_Height }; + SDL_Rect stock = { StockX, StockY, CardWidth, CardHeight }; stackRects[Stock] = stock; listPush(&layout.main, &stock, Cards_O); layoutStack(&layout, &stock, &stacks[Stock], &Square); - SDL_Rect waste = { WasteX, WasteY, Cards_Width, Cards_Height }; + SDL_Rect waste = { WasteX, WasteY, CardWidth, CardHeight }; layoutStack(&layout, &waste, &stacks[Waste1], &Square); layoutStack(&layout, &waste, &stacks[Waste3], &FanRight); - SDL_Rect found = { FoundationX, FoundationY, Cards_Width, Cards_Height }; + SDL_Rect found = { FoundationX, FoundationY, CardWidth, CardHeight }; for (uint i = Foundation1; i <= Foundation4; ++i) { stackRects[i] = found; listPush(&layout.main, &found, Cards_Empty); SDL_Rect rect = found; layoutStack(&layout, &rect, &stacks[i], &Square); - found.x += Cards_Width + StackMarginX; + found.x += CardWidth + StackMarginX; } - SDL_Rect table = { TableauX, TableauY, Cards_Width, Cards_Height }; + SDL_Rect table = { TableauX, TableauY, CardWidth, CardHeight }; for (uint i = Tableau1; i <= Tableau7; ++i) { stackRects[i] = table; stackRects[i].h = WindowHeight; SDL_Rect rect = table; layoutStack(&layout, &rect, &stacks[i], &FanDown); - table.x += Cards_Width + StackMarginX; + table.x += CardWidth + StackMarginX; } } @@ -300,7 +303,7 @@ static bool mouseMotion(SDL_MouseMotionEvent motion) { static SDL_Window *window; static SDL_Renderer *render; -static SDL_Texture *textures[Cards_Count]; +static SDL_Texture *textures[Cards_CardCount]; static void renderList(const struct List *list) { for (uint i = 0; i < list->len; ++i) { @@ -349,13 +352,15 @@ int main(void) { return EXIT_FAILURE; } - struct Cards *cards = Cards_Load( + SDL_Surface *surfaces[Cards_CardCount]; + int error = Cards_LoadCards( + surfaces, Cards_CardCount, rw, Cards_ColorKey | Cards_AlphaCorners | Cards_BlackBorders ); - if (!cards) err("Cards_Load"); + if (error) err("Cards_LoadCards"); SDL_RWclose(rw); - int error = SDL_CreateWindowAndRenderer( + error = SDL_CreateWindowAndRenderer( WindowWidth, WindowHeight, SDL_WINDOW_ALLOW_HIGHDPI, &window, &render ); @@ -365,13 +370,13 @@ int main(void) { SDL_RenderSetIntegerScale(render, SDL_TRUE); SDL_RenderSetLogicalSize(render, WindowWidth, WindowHeight); - for (uint i = 0; i < Cards_Count; ++i) { + for (uint i = 0; i < Cards_CardCount; ++i) { textures[i] = NULL; - if (!cards->surfaces[i]) continue; - textures[i] = SDL_CreateTextureFromSurface(render, cards->surfaces[i]); + if (!surfaces[i]) continue; + textures[i] = SDL_CreateTextureFromSurface(render, surfaces[i]); if (!textures[i]) err("SDL_CreateTextureFromSurface"); + SDL_FreeSurface(surfaces[i]); } - Cards_Free(cards); srand(time(NULL)); backTexture = Cards_Back1 + randUniform(12); -- cgit 1.4.1