summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <Colomar.6.4.3@GMail.com>2018-09-01 15:48:48 +0200
committerGitHub <noreply@github.com>2018-09-01 15:48:48 +0200
commita74ae4cc3588a03843e07360e7df134b85866a7d (patch)
tree4bc4dd87d3d61dc0031cf466b025879cf185cd48
parent69998c0198cf43a2fffee43fe51bdad212c207e2 (diff)
V 3.b.3
- read hi scores
-rw-r--r--modules/menu/obj/Makefile2
-rw-r--r--modules/menu/src/menu_tui.c20
-rw-r--r--modules/save/inc/score.h1
-rw-r--r--modules/save/src/score.c105
4 files changed, 121 insertions, 7 deletions
diff --git a/modules/menu/obj/Makefile b/modules/menu/obj/Makefile
index 3195384..de999f8 100644
--- a/modules/menu/obj/Makefile
+++ b/modules/menu/obj/Makefile
@@ -78,7 +78,7 @@ MENUTUI_INC_LIBALX = alx_ncur.h
MENUTUI_INC_ABOUT = about.h
MENUTUI_INC_CTRL = start.h
MENUTUI_INC_GAME = game_iface.h
-MENUTUI_INC_SAVE = save.h
+MENUTUI_INC_SAVE = save.h score.h
MENUTUI_INC = menu_tui.h menu_iface.h
MENUTUI_DEPS = $(SRC_DIR)/menu_tui.c \
$(patsubst %,$(INC_DIR)/%,$(MENUTUI_INC)) \
diff --git a/modules/menu/src/menu_tui.c b/modules/menu/src/menu_tui.c
index 97df539..c4864f3 100644
--- a/modules/menu/src/menu_tui.c
+++ b/modules/menu/src/menu_tui.c
@@ -24,6 +24,7 @@
#include "about.h"
#include "game_iface.h"
#include "save.h"
+ #include "score.h"
#include "start.h"
#include "menu_iface.h"
@@ -126,19 +127,20 @@ static void menu_tui_continue (void)
int w;
int r;
int c;
- h = 17;
+ h = 18;
w = 50;
r = 1;
c = (80 - w) / 2;
int N;
- N = 6;
- struct alx_optn mnu[6] = {
- {10, 4, "[0] Back"},
+ N = 7;
+ struct alx_optn mnu[7] = {
+ {11, 4, "[0] Back"},
{2, 4, "[1] Start"},
{4, 4, "[2] Select map"},
{5, 4, "[3] Change difficulty"},
{6, 4, "[4] Change file name"},
- {8, 4, "[5] DEVEL"}
+ {7, 4, "[5] Hi scores"},
+ {9, 4, "[6] DEVEL"}
};
/* Input box */
@@ -191,6 +193,14 @@ static void menu_tui_continue (void)
case 5:
alx_win_del(win);
+ alx_pause_curses();
+ read_scores();
+ getchar();
+ alx_resume_curses();
+ break;
+
+ case 6:
+ alx_win_del(win);
menu_tui_devel();
break;
}
diff --git a/modules/save/inc/score.h b/modules/save/inc/score.h
index 2a27d59..edbb4e3 100644
--- a/modules/save/inc/score.h
+++ b/modules/save/inc/score.h
@@ -57,6 +57,7 @@ extern char var_hiscores_expert_name [FILENAME_MAX];
******************************************************************************/
void score_init (void);
void save_score (const struct Game_Iface_Score *game_iface_score);
+void read_scores (void);
/******************************************************************************
diff --git a/modules/save/src/score.c b/modules/save/src/score.c
index d2ba940..f2b0062 100644
--- a/modules/save/src/score.c
+++ b/modules/save/src/score.c
@@ -55,6 +55,12 @@ char var_hiscores_expert_name [FILENAME_MAX];
/******************************************************************************
+ ******* static functions *****************************************************
+ ******************************************************************************/
+static void read_scores_file (char *file_name);
+
+
+/******************************************************************************
******* main *****************************************************************
******************************************************************************/
void score_init (void)
@@ -123,7 +129,7 @@ void save_score (const struct Game_Iface_Score *game_iface_score)
char player_name [BUFF_SIZE];
player_iface_score_name(player_name);
- /* Write to a new file */
+ /* Write to file (append) */
FILE *fp;
fp = fopen(file_name, "a");
if (fp) {
@@ -151,6 +157,103 @@ void save_score (const struct Game_Iface_Score *game_iface_score)
}
}
+void read_scores (void)
+{
+ /* File */
+ char file_name [FILENAME_MAX];
+
+ /* Beginner */
+ strcpy(file_name, var_hiscores_path);
+ strcat(file_name, var_hiscores_beginner_name);
+ read_scores_file(file_name);
+
+ /* Intermediate */
+ strcpy(file_name, var_hiscores_path);
+ strcat(file_name, var_hiscores_intermediate_name);
+ read_scores_file(file_name);
+
+ /* Expert */
+ strcpy(file_name, var_hiscores_path);
+ strcat(file_name, var_hiscores_expert_name);
+ read_scores_file(file_name);
+}
+
+
+/******************************************************************************
+ ******* static functions *****************************************************
+ ******************************************************************************/
+static void read_scores_file (char *file_name)
+{
+ /* File */
+ FILE *fp;
+ int c;
+
+ /* Score variables */
+ char title [BUFF_SIZE];
+ char name [BUFF_SIZE];
+ int year;
+ int mon;
+ int day;
+ int time;
+ int hours;
+ int mins;
+ int secs;
+ int clicks;
+ char file [FILENAME_MAX];
+
+ fp = fopen(file_name, "r");
+
+ if (fp) {
+ /* Title */
+ fscanf(fp, "%[^\n]s", title);
+ /* For some reason, a space after "%[^\n]s" doesn't skip spaces */
+ fscanf(fp, " ");
+
+ /* Print */
+ printf("_______________________________________________________\n");
+ printf("%s\n\n", title);
+ printf("name date clicks time file\n\n");
+
+ while ((c = getc(fp)) != EOF){
+ ungetc(c, fp);
+
+ /* Read */
+ fscanf(fp, "name %s ", name);
+ fscanf(fp, "date %*i ");
+ fscanf(fp, "{ ");
+ fscanf(fp, " isdst %*i ");
+ fscanf(fp, " yday %*i ");
+ fscanf(fp, " wday %*i ");
+ fscanf(fp, " year %i ", &year);
+ fscanf(fp, " mon %i ", &mon);
+ fscanf(fp, " mday %i ", &day);
+ fscanf(fp, " hour %*i ");
+ fscanf(fp, " min %*i ");
+ fscanf(fp, " sec %*i ");
+ fscanf(fp, "} ");
+ fscanf(fp, "time %i ", &time);
+ fscanf(fp, "clicks %i ", &clicks);
+ fscanf(fp, "file %s ", file);
+
+ /* Adjust date & time */
+ year += 1900;
+ hours = (time / 3600);
+ mins = ((time % 3600) / 60);
+ secs = (time % 60);
+
+ /* Print */
+ printf("%s\n\t", name);
+ printf("%4i/%2i/%2i %i %i:%02i:%02i \t%s\n\n",
+ year, mon, day,
+ clicks,
+ hours, mins, secs,
+ file);
+ }
+
+ fclose(fp);
+ }
+}
+
/******************************************************************************
******* end of file **********************************************************