Merge branch 'master' into respect-flags
This commit is contained in:
		
						commit
						c45969623a
					
				
							
								
								
									
										6
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,6 +1,8 @@ | |||||||
|  | VERSION = 1.0.0 | ||||||
|  | 
 | ||||||
| CC     ?= gcc | CC     ?= gcc | ||||||
| CFLAGS ?= -g | CFLAGS ?= -g | ||||||
| CFLAGS += -W -Wall -pedantic -ansi -std=c99 -g | CFLAGS += -W -Wall -pedantic -ansi -std=c99 -DTS_VERSION=\"$(VERSION)\" | ||||||
| 
 | 
 | ||||||
| # OS X installs ncurses with wide character support, but not as "libncurses"
 | # OS X installs ncurses with wide character support, but not as "libncurses"
 | ||||||
| ifeq ($(shell uname -s),Darwin) | ifeq ($(shell uname -s),Darwin) | ||||||
| @ -40,6 +42,8 @@ TESTS_OBJECTS = $(TESTS_DIR)/frame_test.o       \ | |||||||
| 
 | 
 | ||||||
| .PHONY: test clean install uninstall | .PHONY: test clean install uninstall | ||||||
| 
 | 
 | ||||||
|  | all: ${EXECUTABLE} | ||||||
|  | 
 | ||||||
| ttysolitaire: $(SRC_OBJECTS) | ttysolitaire: $(SRC_OBJECTS) | ||||||
| 	$(CC) $(CFLAGS) $(SRC) -o $(EXECUTABLE) $(SRC_OBJECTS) $(LDFLAGS) | 	$(CC) $(CFLAGS) $(SRC) -o $(EXECUTABLE) $(SRC_OBJECTS) $(LDFLAGS) | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										19
									
								
								src/game.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								src/game.c
									
									
									
									
									
								
							| @ -129,7 +129,6 @@ void move_block(struct stack **origin, struct stack **destination, int block_siz | |||||||
|   stack_free(tmp); |   stack_free(tmp); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| static void fill_deck(struct deck *deck) { | static void fill_deck(struct deck *deck) { | ||||||
|   struct card *card[NUMBER_OF_CARDS]; |   struct card *card[NUMBER_OF_CARDS]; | ||||||
| 
 | 
 | ||||||
| @ -166,10 +165,10 @@ static void shuffle_deck(struct deck *deck) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void deal_cards(struct deck *deck) { | static void deal_cards(struct deck *deck) { | ||||||
|   for (int i = 0; i < 7; i++) { |   for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) { | ||||||
|     move_card(&(deck->stock), &(deck->maneuvre[i])); |     move_card(&(deck->stock), &(deck->maneuvre[i])); | ||||||
|     card_expose(deck->maneuvre[i]->card); |     card_expose(deck->maneuvre[i]->card); | ||||||
|     for (int j = i + 1; j < 7; j++) { |     for (int j = i + 1; j < MANEUVRE_STACKS_NUMBER; j++) { | ||||||
|       move_card(&(deck->stock), &(deck->maneuvre[j])); |       move_card(&(deck->stock), &(deck->maneuvre[j])); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @ -207,8 +206,14 @@ void game_end() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool game_won() { | bool game_won() { | ||||||
|   return(stack_length(deck->foundation[0]) == 13 && |   // if any card is covered, game is not won
 | ||||||
|            stack_length(deck->foundation[1]) == 13 && |   for (int i = 0; i < MANEUVRE_STACKS_NUMBER; i++) | ||||||
|            stack_length(deck->foundation[2]) == 13 && |     for (struct stack *j = deck->maneuvre[i]; j!= NULL; j = j->next) | ||||||
|            stack_length(deck->foundation[3]) == 13); |       if (j->card->face == COVERED) | ||||||
|  |         return false; | ||||||
|  |   // else look in stock and waste pile
 | ||||||
|  |   if (stack_empty(deck->stock) && | ||||||
|  |       stack_empty(deck->waste_pile)) | ||||||
|  |      return true; | ||||||
|  |   else return false; | ||||||
| } | } | ||||||
|  | |||||||
| @ -95,6 +95,18 @@ static void handle_card_movement(struct cursor *cursor) { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|  |       case 'M': | ||||||
|  |         if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { | ||||||
|  |           for (struct stack *i = *origin; i && i->next; i = i->next) { | ||||||
|  |             if (i->next->card->face == EXPOSED && | ||||||
|  |                   (i->card->frame->begin_y - i->next->card->frame->begin_y) > 1) { | ||||||
|  |               erase_stack(*origin); | ||||||
|  |               card_mark(i->next->card); | ||||||
|  |               draw_stack(*origin); | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|       case 'n': |       case 'n': | ||||||
|         if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { |         if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { | ||||||
|           for (struct stack *i = (*origin)->next; i; i = i->next) { |           for (struct stack *i = (*origin)->next; i; i = i->next) { | ||||||
| @ -116,6 +128,15 @@ static void handle_card_movement(struct cursor *cursor) { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|  |       case 'N': | ||||||
|  |         if (origin == cursor_stack(cursor) && maneuvre_stack(*origin)) { | ||||||
|  |           erase_stack(*origin); | ||||||
|  |           unmark_cards(*origin); | ||||||
|  |           card_mark((*origin)->card); | ||||||
|  |           draw_stack(*origin); | ||||||
|  |         } | ||||||
|  |         break; | ||||||
|  | 
 | ||||||
|       case KEY_SPACEBAR:; |       case KEY_SPACEBAR:; | ||||||
|         /* http://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg259382.html */ |         /* http://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg259382.html */ | ||||||
|         struct stack **destination = cursor_stack(cursor); |         struct stack **destination = cursor_stack(cursor); | ||||||
|  | |||||||
| @ -8,6 +8,10 @@ | |||||||
| #include "keyboard.h" | #include "keyboard.h" | ||||||
| #include "common.h" | #include "common.h" | ||||||
| 
 | 
 | ||||||
|  | #ifndef TS_VERSION | ||||||
|  | #define TS_VERSION "n/a" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| const char *program_name; | const char *program_name; | ||||||
| struct game game; | struct game game; | ||||||
| 
 | 
 | ||||||
| @ -123,14 +127,5 @@ void usage(const char *program_name) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void version() { | void version() { | ||||||
|   FILE *version_file; |   printf("%s\n", TS_VERSION); | ||||||
|   char version_string[6]; |  | ||||||
| 
 |  | ||||||
|   if (!(version_file = fopen("VERSION", "rb"))) { |  | ||||||
|     tty_solitaire_generic_error(errno, __FILE__, __LINE__); |  | ||||||
|   } |  | ||||||
|   fread(version_string, 1, 5, version_file); |  | ||||||
|   version_string[5] = '\0'; |  | ||||||
|   printf("%s\n", version_string); |  | ||||||
|   fclose(version_file); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -129,6 +129,7 @@ void test_valid_move_from_waste_pile_to_foundation_stacks() { | |||||||
|   card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); |   card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X); | ||||||
|   card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); |   card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X); | ||||||
|   for (int i = 0; i < 4; i++) { |   for (int i = 0; i < 4; i++) { | ||||||
|  |     // TODO: fix error here
 | ||||||
|     assert(valid_move(waste_pile, foundation_stacks[i])); |     assert(valid_move(waste_pile, foundation_stacks[i])); | ||||||
|   } |   } | ||||||
|   stack_free(waste_pile); |   stack_free(waste_pile); | ||||||
| @ -155,6 +156,7 @@ void test_valid_move_from_waste_pile_to_maneuvre_stacks() { | |||||||
|   card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); |   card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X); | ||||||
|   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); |   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); | ||||||
|   for (int i = 0; i < 7; i++) { |   for (int i = 0; i < 7; i++) { | ||||||
|  |     // TODO: fix error here
 | ||||||
|     assert(valid_move(waste_pile, maneuvre_stacks[i])); |     assert(valid_move(waste_pile, maneuvre_stacks[i])); | ||||||
|   } |   } | ||||||
|   stack_free(waste_pile); |   stack_free(waste_pile); | ||||||
| @ -225,6 +227,7 @@ void test_valid_move_from_foundation_stack_to_foundation_stacks() { | |||||||
|       if (i == j) { |       if (i == j) { | ||||||
|         assert(!valid_move(foundation_stacks[i], foundation_stacks[j])); |         assert(!valid_move(foundation_stacks[i], foundation_stacks[j])); | ||||||
|       } else { |       } else { | ||||||
|  |         // TODO: fix error here
 | ||||||
|         assert(valid_move(foundation_stacks[i], foundation_stacks[j])); |         assert(valid_move(foundation_stacks[i], foundation_stacks[j])); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @ -259,6 +262,7 @@ void test_valid_move_from_foundation_stack_to_maneuvre_stacks() { | |||||||
|   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); |   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); | ||||||
|   for (int i = 0; i < 4; i++) { |   for (int i = 0; i < 4; i++) { | ||||||
|     for (int j = 0; j < 7; j++) { |     for (int j = 0; j < 7; j++) { | ||||||
|  |       // TODO: fix error here
 | ||||||
|       assert(valid_move(foundation_stacks[i], maneuvre_stacks[j])); |       assert(valid_move(foundation_stacks[i], maneuvre_stacks[j])); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @ -347,6 +351,7 @@ void test_valid_move_from_maneuvre_stack_to_foundation_stacks() { | |||||||
|   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); |   card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X); | ||||||
|   for (int i = 0; i < 7; i++) { |   for (int i = 0; i < 7; i++) { | ||||||
|     for (int j = 0; j < 4; j++) { |     for (int j = 0; j < 4; j++) { | ||||||
|  |       // TODO: fix error here
 | ||||||
|       assert(valid_move(maneuvre_stacks[i], foundation_stacks[j])); |       assert(valid_move(maneuvre_stacks[i], foundation_stacks[j])); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @ -377,6 +382,7 @@ void test_valid_move_from_maneuvre_stack_to_maneuvre_stacks() { | |||||||
|       if (i == j) { |       if (i == j) { | ||||||
|         assert(!valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); |         assert(!valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); | ||||||
|       } else { |       } else { | ||||||
|  |         // TODO: fix error here
 | ||||||
|         assert(valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); |         assert(valid_move(maneuvre_stacks[i], maneuvre_stacks[j])); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -217,7 +217,7 @@ void test_stack_reverse_on_stack_empty_stack() { | |||||||
|   old_stack = stack; |   old_stack = stack; | ||||||
|   stack_reversed_stack = stack_reverse(stack); |   stack_reversed_stack = stack_reverse(stack); | ||||||
| 
 | 
 | ||||||
|   assert(stack_reversed_stack == old_stack); |   assert(stacks_equal(stack_reversed_stack, old_stack)); | ||||||
| 
 | 
 | ||||||
|   stack_free(stack); |   stack_free(stack); | ||||||
| } | } | ||||||
| @ -236,7 +236,7 @@ void test_stack_reverse_on_stack_with_one_element() { | |||||||
|   old_stack = stack; |   old_stack = stack; | ||||||
|   stack_reversed_stack = stack_reverse(stack); |   stack_reversed_stack = stack_reverse(stack); | ||||||
| 
 | 
 | ||||||
|   assert(stack_reversed_stack == old_stack); |   assert(stacks_equal(stack_reversed_stack, old_stack)); | ||||||
| 
 | 
 | ||||||
|   stack_free(stack); |   stack_free(stack); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user