Fixed card moving issue. Fixes #1.
This commit is contained in:
parent
1b6d79b26c
commit
57a38c7152
@ -11,26 +11,26 @@ static bool cursor_on_stock(struct cursor *cursor) {
|
|||||||
return((cursor->x == CURSOR_BEGIN_X) && (cursor->y == CURSOR_BEGIN_Y));
|
return((cursor->x == CURSOR_BEGIN_X) && (cursor->y == CURSOR_BEGIN_Y));
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct stack *cursor_stack(struct cursor *cursor) {
|
static struct stack **cursor_stack(struct cursor *cursor) {
|
||||||
if (cursor->y == CURSOR_BEGIN_Y) {
|
if (cursor->y == CURSOR_BEGIN_Y) {
|
||||||
switch (cursor->x) {
|
switch (cursor->x) {
|
||||||
case CURSOR_STOCK_X: return(deck->stock);
|
case CURSOR_STOCK_X: return(&(deck->stock));
|
||||||
case CURSOR_WASTE_PILE_X: return(deck->waste_pile);
|
case CURSOR_WASTE_PILE_X: return(&(deck->waste_pile));
|
||||||
case CURSOR_FOUNDATION_0_X: return(deck->foundation[0]);
|
case CURSOR_FOUNDATION_0_X: return(&(deck->foundation[0]));
|
||||||
case CURSOR_FOUNDATION_1_X: return(deck->foundation[1]);
|
case CURSOR_FOUNDATION_1_X: return(&(deck->foundation[1]));
|
||||||
case CURSOR_FOUNDATION_2_X: return(deck->foundation[2]);
|
case CURSOR_FOUNDATION_2_X: return(&(deck->foundation[2]));
|
||||||
case CURSOR_FOUNDATION_3_X: return(deck->foundation[3]);
|
case CURSOR_FOUNDATION_3_X: return(&(deck->foundation[3]));
|
||||||
default: assert(false && "invalid stack");
|
default: assert(false && "invalid stack");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
switch (cursor->x) {
|
switch (cursor->x) {
|
||||||
case CURSOR_MANEUVRE_0_X: return(deck->maneuvre[0]);
|
case CURSOR_MANEUVRE_0_X: return(&(deck->maneuvre[0]));
|
||||||
case CURSOR_MANEUVRE_1_X: return(deck->maneuvre[1]);
|
case CURSOR_MANEUVRE_1_X: return(&(deck->maneuvre[1]));
|
||||||
case CURSOR_MANEUVRE_2_X: return(deck->maneuvre[2]);
|
case CURSOR_MANEUVRE_2_X: return(&(deck->maneuvre[2]));
|
||||||
case CURSOR_MANEUVRE_3_X: return(deck->maneuvre[3]);
|
case CURSOR_MANEUVRE_3_X: return(&(deck->maneuvre[3]));
|
||||||
case CURSOR_MANEUVRE_4_X: return(deck->maneuvre[4]);
|
case CURSOR_MANEUVRE_4_X: return(&(deck->maneuvre[4]));
|
||||||
case CURSOR_MANEUVRE_5_X: return(deck->maneuvre[5]);
|
case CURSOR_MANEUVRE_5_X: return(&(deck->maneuvre[5]));
|
||||||
case CURSOR_MANEUVRE_6_X: return(deck->maneuvre[6]);
|
case CURSOR_MANEUVRE_6_X: return(&(deck->maneuvre[6]));
|
||||||
default: assert(false && "invalid stack");
|
default: assert(false && "invalid stack");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -51,20 +51,25 @@ static void handle_stock_event() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void handle_card_movement(struct cursor *cursor) {
|
static void handle_card_movement(struct cursor *cursor) {
|
||||||
struct stack *origin = NULL;
|
struct stack **origin = cursor_stack(cursor);
|
||||||
struct stack *destination = NULL;
|
struct stack **destination;
|
||||||
int option;
|
int option;
|
||||||
|
|
||||||
origin = cursor_stack(cursor);
|
if (cursor_on_invalid_spot(cursor) || empty(*origin)) {
|
||||||
|
|
||||||
/* trying to move cards from the space between the waste pile and the
|
|
||||||
* foundations */
|
|
||||||
if (cursor_on_invalid_spot(cursor)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mark_cursor(cursor);
|
||||||
|
draw_cursor(cursor);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
switch (option = getch()) {
|
switch (option = getch()) {
|
||||||
|
case KEY_ESCAPE:
|
||||||
|
if (cursor->marked) {
|
||||||
|
unmark_cursor(cursor);
|
||||||
|
draw_cursor(cursor);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
case KEY_LEFT:
|
case KEY_LEFT:
|
||||||
move_cursor(cursor, LEFT);
|
move_cursor(cursor, LEFT);
|
||||||
@ -87,11 +92,14 @@ static void handle_card_movement(struct cursor *cursor) {
|
|||||||
break;
|
break;
|
||||||
case KEY_SPACEBAR:
|
case KEY_SPACEBAR:
|
||||||
destination = cursor_stack(cursor);
|
destination = cursor_stack(cursor);
|
||||||
if (valid_move(origin, destination)) {
|
if (valid_move(*origin, *destination)) {
|
||||||
move_card(&origin, &destination);
|
erase_stack(*origin);
|
||||||
draw_stack(origin);
|
move_card(origin, destination);
|
||||||
draw_stack(destination);
|
draw_stack(*origin);
|
||||||
|
draw_stack(*destination);
|
||||||
}
|
}
|
||||||
|
unmark_cursor(cursor);
|
||||||
|
draw_cursor(cursor);
|
||||||
return;
|
return;
|
||||||
case 'q':
|
case 'q':
|
||||||
case 'Q':
|
case 'Q':
|
||||||
|
Loading…
Reference in New Issue
Block a user