#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>
#include <string.h>
typedef struct LEVEL {
char name[64];
char description[128];
char password[64];
char map[512];
struct LEVEL* next_level;
} Level;
struct LEVEL* level_1;
void levels_init() {
FILE *sub = fopen("levels.dat", "r");
if (sub == NULL) {
char* level1 = "---####|---#--#|---#--#|---#$.#|####--#|#-----#|#@$.--#|#######";
char* level2 = "-#####|##---#|#--.-#|#-$.$###|##$.$--#|-#-.@--#|-#######";
char* level3 = "--#####|###-@-#|#-----##|#-$.---#|###----#|--#----#|--#--###|--####";
level_1 = ( Level* ) malloc( sizeof( Level ) );
strncpy(level_1->map, level1, strlen(level1) + 1);
strncpy(level_1->name, "at the beginning...", 20);
strncpy(level_1->description, "...programmer created the world and the robot...", 49);
strncpy(level_1->password, "sokoban", 8);
level_1->next_level = NULL;
level_1 = add_level(level2, "the next level", " you should have no expectations!", "budokan");
level_1 = add_level(level3, "level 3", "this is level 3", "saboteur");
} else {
char row [1024];
char *part;
char map[512], name[64], desc[128], passwd[64];
int i;
int one = 0;
while (fgets (row, sizeof row, sub) != NULL)
{
part = strtok (row,";");
i = 1;
while (part != NULL)
{
switch (i) {
case 1: strncpy(name, part, strlen(part) + 1); break;
case 2: strncpy(desc, part, strlen(part) + 1); break;
case 3: strncpy(passwd, part, strlen(part) + 1); break;
case 4: strncpy(map, part, strlen(part) + 1); break;
}
i++;
part = strtok (NULL, ";");
}
if (one++ == 0 ) {
level_1 = (Level*) malloc(sizeof(Level));
strncpy(level_1->map, map, strlen(map) + 1);
strncpy(level_1->name, name, strlen(name) + 1);
strncpy(level_1->description, desc, strlen(desc) + 1);
strncpy(level_1->password, passwd, strlen(passwd) + 1);
level_1->next_level = NULL;
} else {
level_1 = add_level(map, name, desc, passwd);
}
}
fclose (sub);
}
}
Level* add_level(char* map, char* name, char* description, char* password)
{
Level* lvl = (Level*) malloc(sizeof(Level));
strncpy(lvl->map, map, strlen(map) + 1);
strncpy(lvl->name, name, strlen(name) + 1);
strncpy(lvl->description, description, strlen(description) + 1);
strncpy(lvl->password, password, strlen(password) + 1);
lvl->next_level = NULL;
Level* first = level_1;
Level* currentItem = level_1;
while(currentItem->next_level != NULL)
{
currentItem = currentItem->next_level;
}
currentItem->next_level = lvl;
currentItem = currentItem->next_level;
currentItem->next_level = NULL;
return first;
}
Level* getLevel(char* password) {
if (password == NULL)
return level_1;
Level* item = level_1;
while(item != NULL)
{
if (strcmp(item->password, password) == 0)
return item;
item = item->next_level;
}
return NULL;
}
void levels_free() {
Level* level;
while(level_1 != NULL)
{
level = level_1;
level_1 = level_1->next_level;
free(level);
}
}