9 #include "constantstrings.h"
11 /* clear a cell in the grid */
12 void clear_cell (Puzzle
*p
)
20 if (row
>= p
->grid_size
|| col
>= p
->grid_size
)
22 printf (EXCEED_GRID_SIZE
);
27 p
->chars
[row
][col
] = ' ';
34 /* add a down word to the grid */
35 void add_down_word (Puzzle
*p
)
45 char word
[MAX_PUZZLE_SIZE
];
49 if (! is_valid_word (word
))
51 printf (INVALID_WORD
);
60 if (row
>= p
->grid_size
|| col
>= p
->grid_size
)
62 printf (EXCEED_GRID_SIZE
);
67 if (strlen (word
) > (p
->grid_size
- row
))
69 printf (WORD_TOO_LONG
);
75 for (int i
= row
; i
< row
+ strlen(word
); i
++)
76 p
->chars
[i
][col
] = toupper(word
[i
- row
]);
83 /* add an across word to the grid */
84 void add_across_word (Puzzle
*p
)
92 char word
[MAX_PUZZLE_SIZE
];
96 if (! is_valid_word (word
))
98 printf (INVALID_WORD
);
107 if (row
>= p
->grid_size
|| col
>= p
->grid_size
)
109 printf (EXCEED_GRID_SIZE
);
110 char ch
= getchar ();
115 if (strlen (word
) > (p
->grid_size
- col
))
117 printf (WORD_TOO_LONG
);
118 char ch
= getchar ();
123 for (int i
= col
; i
< col
+strlen (word
); i
++)
124 p
->chars
[row
][i
] = toupper(word
[i
- col
]);
127 char ch
= getchar ();
131 void puzzle_editor_loop (Puzzle
*p
, const char *filename
)
136 print_menu (WHITE
, RED
, PUZZLE_MENU_TITLE
, PUZZLE_EDIT_MENU
, 8, 50);
137 printf (INPUT_CHOICE
);
138 char ch
= getchar ();
141 case '1': print_puzzle (p
);
142 char ch
= getchar ();
145 case '2': add_across_word (p
);
147 case '3': add_down_word (p
);
149 case '4': clear_cell (p
);
151 case '7': save_puzzle (p
, filename
);
152 printf ("%s\n",FILE_SAVED
);
156 case '8': loop
= false;
162 /* open an existing puzzle */
168 scanf("%s", filename
);
169 p
= load_puzzle (filename
);
170 puzzle_editor_loop (&p
, filename
);
173 /* create a new blank puzzle */
179 scanf ("%s", filename
);
180 printf (INPUT_GRID_SIZE
);
183 if (size
> MAX_PUZZLE_SIZE
)
185 printf (EXCEED_MAX_GRID_SIZE
);
186 char c
= getchar (); c
= getchar ();
190 init_puzzle (&p
, size
);
191 puzzle_editor_loop (&p
, filename
);
195 /* The main loop of the program */
198 /* Print the main menu */
201 print_menu (WHITE
, BLUE
, MAIN_MENU_TITLE
, MAIN_MENU
, 3, 50);
202 printf (INPUT_CHOICE
);
203 char ch
= getchar ();
206 case '1': new_puzzle ();
208 case '2': open_puzzle ();
215 int main (int argc
, char* argv
[])
217 return (main_loop ());