From b2119ea14b545400c2fc014bf833194419af049b Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: May 06 2021 12:23:53 +0000 Subject: sokoban: use openDirectoryEx --- diff --git a/sokoban.c b/sokoban.c index 147c61f..69265f8 100644 --- a/sokoban.c +++ b/sokoban.c @@ -20,17 +20,22 @@ Font font; double speed = 256; - -char levels[256][1024]; -int levelsCount = 0; int level = 0; void loadLevel() { - if (level < 0) level = levelsCount - 1; - if (level >= levelsCount) level = 0; + FILE *f = NULL; + Directory dir = openDirectoryEx("data/levels/sokoban", "", ".level", FALSE, TRUE, FALSE); + if (dir) { + int count = directoryGetCount(dir); + if (count > 0) { + if (level >= count) level = 0; + if (level < 0) level = count - 1; + f = fopen(directoryGetFull(dir, level), "r"); + } + closeDirectory(dir); + } - FILE *f = fopen(levels[level], "r"); if (!f) { messageBox("Cannot open level file"); return; @@ -99,21 +104,6 @@ void init() { boxes = createGroup(); places = createGroup(); - Directory dir = openDirectory("data/levels/sokoban"); - if (!dir || !directoryGetCount(dir)) { - messageBox("Cannot open levels directory"); - exit(1); - } - for(int i = 0; i < directoryGetCount(dir); ++i) { - const char *filename = directoryGet(dir, i); - int l = strlen(filename); - if (l >= 6 && strcmp(filename + l - 6, ".level") == 0) { - snprintf(levels[levelsCount], 1023, "data/levels/sokoban/%s", filename); - ++levelsCount; - } - } - closeDirectory(dir); - loadLevel(); }