summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--sol.c7
-rw-r--r--stack.h2
2 files changed, 5 insertions, 4 deletions
diff --git a/sol.c b/sol.c
index 1933716..b4a323f 100644
--- a/sol.c
+++ b/sol.c
@@ -117,7 +117,7 @@ static bool gameAvail(Card card) {
 	if (card < 0) return false;
 	if (!gameFind(&stack, &index, card)) return false;
 
-	bool top = (index == stacks[stack].len - 1);
+	bool top = (card == stackTop(&stacks[stack]));
 	if (stack == Waste1) {
 		return top && !stacks[Waste3].len;
 	} else if (stack == Waste3) {
@@ -135,7 +135,7 @@ static bool gameReveal(Card card) {
 	uint stack, index;
 	if (!gameFind(&stack, &index, card)) return false;
 	if (stack < Tableau1 || stack > Tableau7) return false;
-	if (index != stacks[stack].len - 1) return false;
+	if (card != stackTop(&stacks[stack])) return false;
 	if (card > 0) return false;
 	gameDo(stackFlipTo, stack, stack, 1);
 	return true;
@@ -247,7 +247,8 @@ static void layoutCard(struct List **list, SDL_Rect *rect, Card card) {
 		*list = &layout.drag;
 		*rect = layout.dragItem.rect;
 	}
-	struct Item item = { *rect, (card > 0 ? card : layout.backTexture), card };
+	uint texture = (card > 0 ? (uint)card : layout.backTexture);
+	struct Item item = { *rect, texture, card };
 	listPush(*list, item);
 }
 
diff --git a/stack.h b/stack.h
index 6267f23..d3a4119 100644
--- a/stack.h
+++ b/stack.h
@@ -65,7 +65,7 @@ static inline Card stackPop(struct Stack *stack) {
 	return stack->cards[--stack->len];
 }
 
-static inline Card stackTop(struct Stack *stack) {
+static inline Card stackTop(const struct Stack *stack) {
 	if (!stack->len) return 0;
 	return stack->cards[stack->len - 1];
 }