Add savefile function
This commit is contained in:
parent
3a020073f9
commit
e9dca0371f
2 changed files with 68 additions and 3 deletions
|
@ -192,4 +192,5 @@ e_status play_move(s_utictactoe *p_uttt, s_move *p_move);
|
||||||
/*Given usefull functions*/
|
/*Given usefull functions*/
|
||||||
void draw_utictactoe(s_utictactoe *p_uttt);
|
void draw_utictactoe(s_utictactoe *p_uttt);
|
||||||
void draw_utictactoe_history(s_utictactoe *p_uttt);
|
void draw_utictactoe_history(s_utictactoe *p_uttt);
|
||||||
#endif /* MODEL_H */
|
void save_a_utictactoe_to_file(FILE *p_f, s_utictactoe *p_uttt);
|
||||||
|
#endif /* MODEL_H */
|
||||||
|
|
68
src/model.c
68
src/model.c
|
@ -1,5 +1,51 @@
|
||||||
#include "model.h"
|
#include "model.h"
|
||||||
|
|
||||||
|
// Define shorts positions
|
||||||
|
char * get_short_position(e_location pos){
|
||||||
|
switch(pos) {
|
||||||
|
case TOPLEFT:
|
||||||
|
return "TO";
|
||||||
|
case TOPCENTER:
|
||||||
|
return "TC";
|
||||||
|
case TOPRIGHT:
|
||||||
|
return "TR";
|
||||||
|
case MIDLEFT:
|
||||||
|
return "ML";
|
||||||
|
case MIDCENTER:
|
||||||
|
return "MC";
|
||||||
|
case MIDRIGHT:
|
||||||
|
return "MR";
|
||||||
|
case BOTTOMLEFT:
|
||||||
|
return "BL";
|
||||||
|
case BOTTOMCENTER:
|
||||||
|
return "BC";
|
||||||
|
case BOTTOMRIGHT:
|
||||||
|
return "BR";
|
||||||
|
case FREE:
|
||||||
|
return "FR";
|
||||||
|
case NONE:
|
||||||
|
return "NO";
|
||||||
|
default:
|
||||||
|
return "NO";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char get_short_player(e_player player){
|
||||||
|
switch(player){
|
||||||
|
case PLAYER_O:
|
||||||
|
return 'O';
|
||||||
|
case PLAYER_X:
|
||||||
|
return 'X';
|
||||||
|
case NOBODY:
|
||||||
|
return '.';
|
||||||
|
case BOTH:
|
||||||
|
return '#';
|
||||||
|
default:
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SHORT_VERSION(code) SHORT_##code
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create empty move
|
* Create empty move
|
||||||
|
@ -236,10 +282,28 @@ e_status play_move(s_utictactoe *p_uttt, s_move *p_move) {
|
||||||
|
|
||||||
//check if we have a winner in inner_ttt then set player to outer
|
//check if we have a winner in inner_ttt then set player to outer
|
||||||
p_uttt->outer_tictactoe->content[p_move->outer_position] = p_uttt->inner_tictactoes[p_move->outer_position]->winner;
|
p_uttt->outer_tictactoe->content[p_move->outer_position] = p_uttt->inner_tictactoes[p_move->outer_position]->winner;
|
||||||
|
|
||||||
}
|
}
|
||||||
p_uttt->outer_tictactoe->content[p_move->outer_position] = p_move->player;
|
else {
|
||||||
|
p_uttt->outer_tictactoe->content[p_move->outer_position] = p_move->player;
|
||||||
|
}
|
||||||
set_tictactoe_winner(p_uttt->outer_tictactoe);
|
set_tictactoe_winner(p_uttt->outer_tictactoe);
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void save_a_utictactoe_to_file(FILE *p_f, s_utictactoe *p_uttt){
|
||||||
|
assert(p_f);
|
||||||
|
assert(p_uttt);
|
||||||
|
fprintf(p_f, "%d\n", p_uttt->inception_level);
|
||||||
|
if(p_uttt->history){
|
||||||
|
list_element_s_move * c_hist = p_uttt->history;
|
||||||
|
while (c_hist != NULL){
|
||||||
|
if(c_hist->last_move){
|
||||||
|
fprintf(p_f, "%s %s %c\n",
|
||||||
|
get_short_position(c_hist->last_move->inner_position),
|
||||||
|
get_short_position(c_hist->last_move->outer_position),
|
||||||
|
get_short_player(c_hist->last_move->player));
|
||||||
|
}
|
||||||
|
c_hist = c_hist->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue