diff --git a/lib/cursor.h b/lib/cursor.h index 3485c95..3790d6b 100644 --- a/lib/cursor.h +++ b/lib/cursor.h @@ -7,6 +7,9 @@ #define CURSOR_STARTING_X 4 #define CURSOR_STARTING_Y 7 +#define CURSOR_INVALID_SPOT_X 20 +#define CURSOR_INVALID_SPOT_Y 7 + #define CURSOR_STOCK_X 4 #define CURSOR_WASTE_PILE_X 12 #define CURSOR_FOUNDATION_0_X 28 diff --git a/lib/keyboard.c b/lib/keyboard.c index 40c73e1..279c34b 100644 --- a/lib/keyboard.c +++ b/lib/keyboard.c @@ -12,22 +12,22 @@ struct stack *cursor_stack(struct cursor *cursor) { if (cursor->y == CURSOR_STARTING_Y) { switch (cursor->x) { - case CURSOR_STOCK_X: cursor_stack = deck->stock; - case CURSOR_WASTE_PILE_X: cursor_stack = deck->waste_pile; - case CURSOR_FOUNDATION_0_X: cursor_stack = deck->foundation_0; - case CURSOR_FOUNDATION_1_X: cursor_stack = deck->foundation_1; - case CURSOR_FOUNDATION_2_X: cursor_stack = deck->foundation_2; - case CURSOR_FOUNDATION_3_X: cursor_stack = deck->foundation_3; + case CURSOR_STOCK_X: cursor_stack = deck->stock; break; + case CURSOR_WASTE_PILE_X: cursor_stack = deck->waste_pile; break; + case CURSOR_FOUNDATION_0_X: cursor_stack = deck->foundation_0; break; + case CURSOR_FOUNDATION_1_X: cursor_stack = deck->foundation_1; break; + case CURSOR_FOUNDATION_2_X: cursor_stack = deck->foundation_2; break; + case CURSOR_FOUNDATION_3_X: cursor_stack = deck->foundation_3; break; } } else { switch (cursor->x) { - case CURSOR_MANEUVRE_0_X: cursor_stack = deck->maneuvre_0; - case CURSOR_MANEUVRE_1_X: cursor_stack = deck->maneuvre_1; - case CURSOR_MANEUVRE_2_X: cursor_stack = deck->maneuvre_2; - case CURSOR_MANEUVRE_3_X: cursor_stack = deck->maneuvre_3; - case CURSOR_MANEUVRE_4_X: cursor_stack = deck->maneuvre_4; - case CURSOR_MANEUVRE_5_X: cursor_stack = deck->maneuvre_5; - case CURSOR_MANEUVRE_6_X: cursor_stack = deck->maneuvre_6; + case CURSOR_MANEUVRE_0_X: cursor_stack = deck->maneuvre_0; break; + case CURSOR_MANEUVRE_1_X: cursor_stack = deck->maneuvre_1; break; + case CURSOR_MANEUVRE_2_X: cursor_stack = deck->maneuvre_2; break; + case CURSOR_MANEUVRE_3_X: cursor_stack = deck->maneuvre_3; break; + case CURSOR_MANEUVRE_4_X: cursor_stack = deck->maneuvre_4; break; + case CURSOR_MANEUVRE_5_X: cursor_stack = deck->maneuvre_5; break; + case CURSOR_MANEUVRE_6_X: cursor_stack = deck->maneuvre_6; break; } } @@ -38,6 +38,10 @@ bool cursor_on_stack(struct cursor *cursor, struct stack *stack) { return(cursor_stack(cursor) == stack); } +bool cursor_on_invalid_spot(struct cursor *cursor) { + return(cursor->x == CURSOR_INVALID_SPOT_X && + cursor->y == CURSOR_INVALID_SPOT_Y); +} void handle_stock_event() { if (!empty(deck->stock)) { /* erase the stack before emptying it */ @@ -61,6 +65,12 @@ void handle_card_movement(struct cursor *cursor) { mark_origin(cursor); origin = cursor_stack(cursor); + /* trying to move cards from the space between the waste pile and the + * foundations */ + if (cursor_on_invalid_spot(cursor)) { + return; + } + while (1) { switch (option = getch()) { case 'h': @@ -80,7 +90,9 @@ void handle_card_movement(struct cursor *cursor) { move_cursor(cursor, RIGHT); break; case KEY_SPACEBAR: - if (!cursor_on_stock(cursor) && !cursor_on_stack(cursor, origin)) { + if (!cursor_on_invalid_spot(cursor) && + !cursor_on_stock(cursor) && + !cursor_on_stack(cursor, origin)) { destination = cursor_stack(cursor); move_card(&origin, &destination); draw_stack(origin); diff --git a/lib/keyboard.h b/lib/keyboard.h index b29d3e8..7d3cc22 100644 --- a/lib/keyboard.h +++ b/lib/keyboard.h @@ -11,6 +11,7 @@ extern struct deck *deck; void mark_origin(struct cursor *); struct stack *cursor_stack(struct cursor *); bool cursor_on_stack(struct cursor *, struct stack *); +bool cursor_on_invalid_spot(struct cursor *); void handle_stock_event(); void handle_card_movement(struct cursor *); int key_event(); diff --git a/src/tty-solitaire.c b/src/tty-solitaire.c index 2b713c8..747a248 100644 --- a/src/tty-solitaire.c +++ b/src/tty-solitaire.c @@ -4,6 +4,8 @@ #include "../lib/cursor.h" #include "../lib/keyboard.h" +extern struct deck *deck; + int main(int argc, const char *argv[]) { int option; struct cursor *cursor; @@ -56,6 +58,7 @@ int main(int argc, const char *argv[]) { case 'q': case 'Q': end_curses(); + print_deck(deck); exit(0); } }