uni

University stuff
git clone git://git.christosmarg.xyz/uni-assignments.git
Log | Files | Refs | README | LICENSE

outputs.c (3050B)


      1 #include "outputs.h"
      2 
      3 void
      4 print_board(const Board *b)
      5 {    
      6 	int i, j, x, y = 1;
      7 	print_grid(b);
      8 	wattron(b->gw, A_BOLD);
      9 	for (i = 0; i < b->rows; i++)
     10 	{
     11 		x = 2; 
     12 		for (j = 0; j < b->cols; j++)
     13 		{
     14 			mvwaddch(b->gw, y, x, b->db[i][j]);
     15 			x += 3;
     16 		}
     17 		y++;
     18 	}
     19 }
     20 
     21 void
     22 print_grid(const Board *b)
     23 {
     24 	int i, j;
     25 	wattroff(b->gw, A_BOLD);
     26 	for (i = 1; i <= b->rows; i++)
     27 	{
     28 		wmove(b->gw, i, 1);
     29 		for (j = 0; j < b->cols; j++)
     30 			wprintw(b->gw, "[ ]");
     31 	}
     32 	wrefresh(b->gw);
     33 }
     34 
     35 #define YMID(x) getmaxy(x)/2
     36 #define XMID(x) getmaxx(x)/2
     37 
     38 void
     39 session_info(const Board *b)
     40 {
     41 	mvprintw(0, 0, "Current position: (%d, %d) ", b->x, b->y);
     42 	mvprintw(0, XMID(stdscr)-strlen("Defused mines: x/x")/2,
     43 			"Defused mines: %d/%d", b->ndefused, b->nmines);
     44 	mvprintw(0, XMAX(stdscr)-strlen("m Controls"), "m Controls");
     45 }
     46 
     47 void
     48 session_write(const Board *b, State state)
     49 {
     50 	int i, j;
     51 	FILE *fsession = fopen(SESSION_PATH, "w");
     52 	if (fsession == NULL)
     53 	{
     54 		mvprintw(0, 0, "Error opening file, exiting...");
     55 		refresh();
     56 		exit(EXIT_FAILURE);
     57 	}
     58 	else
     59 	{
     60 		state == GAME_WON
     61 			? fprintf(fsession, "Mine hit at position (%d, %d)\n\n",
     62 					b->x+1, b->y+1)
     63 			: fprintf(fsession, "Last mine defused at position (%d, %d)\n\n",
     64 					b->x+1, b->y+1);
     65 		fprintf(fsession, "Board overview\n\n");
     66 		for (i = 0; i < b->rows; i++)
     67 		{
     68 			for (j = 0; j < b->cols; j++)
     69 				fprintf(fsession, "%c ", b->mb[i][j]);
     70 			fprintf(fsession, "\n");
     71 		}           
     72 	}
     73 	fclose(fsession);
     74 }
     75 
     76 void
     77 score_write(const Board *b)
     78 {
     79 	FILE *scorelog = fopen(SCORE_LOG_PATH, "a");
     80 	char *playername = get_pname();
     81 	if (scorelog == NULL)
     82 	{
     83 		mvprintw(0, 0, "Error opening file, exiting...");
     84 		refresh();
     85 		exit(EXIT_FAILURE);
     86 	}
     87 	else
     88 	{
     89 		fprintf(scorelog, "%s,%d,%dx%d\n",
     90 				playername, b->ndefused, b->cols, b->rows);
     91 		sort_scorelog(scorelog);
     92 		clrtoeol();
     93 		show_scorelog(scorelog);
     94 		mvprintw(0, 0, "New score written to score log");
     95 		refresh();
     96 		getchar();
     97 	}
     98 	fclose(scorelog);
     99 	free(playername);
    100 }
    101 
    102 char *
    103 get_pname(void)
    104 {   
    105 	char buffer[20];
    106 	char *playername;
    107 	move(0, 0);
    108 	echo();
    109 	clrtoeol();
    110 	printw("Your name: ");
    111 	refresh();
    112 	scanw("%s", buffer);
    113 	noecho();
    114 	refresh();
    115 	playername = (char *)malloc(strlen(buffer) + 1);
    116 	return (strcpy(playername, buffer));
    117 }
    118 
    119 void
    120 sort_scorelog(FILE *scorelog)
    121 {
    122 
    123 }
    124 
    125 void
    126 show_scorelog(FILE *scorelog)
    127 {
    128 
    129 }
    130 
    131 void
    132 parse_data(FILE *scorelog)
    133 {
    134 
    135 }
    136 
    137 void
    138 game_won(const Board *b)
    139 {
    140 	wclear(b->gw);
    141 	wrefresh(b->gw);
    142 	attron(A_BOLD);
    143 	mvprintw(YMID(stdscr)-2, XMID(stdscr)-11, "You defused all the mines!");
    144 	mvprintw(YMID(stdscr)-1, XMID(stdscr)-3, "You won :)");
    145 	mvprintw(YMID(stdscr), XMID(stdscr)-11, "Press any key to continue");
    146 	refresh();
    147 	attroff(A_BOLD);
    148 }
    149 
    150 void
    151 game_over(const Board *b)
    152 {
    153 	wclear(b->gw);
    154 	wrefresh(b->gw);
    155 	attron(A_BOLD);
    156 	mvprintw(YMID(stdscr)-2, XMID(stdscr)-24, "You hit a mine! (or tried to defuse the wrong cell)");
    157 	mvprintw(YMID(stdscr)-1, XMID(stdscr)-4, "Game over :(");
    158 	mvprintw(YMID(stdscr), XMID(stdscr)-11, "Press any key to continue");
    159 	refresh();
    160 	attroff(A_BOLD);
    161 }
    162 
    163 #undef YMID
    164 #undef XMID