Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 8th, 2012  |  syntax: C  |  size: 3.63 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <curses.h>
  5. #include <string.h>
  6.  
  7. typedef struct LEVEL {
  8.     char name[64];
  9.     char description[128];
  10.     char password[64];
  11.     char map[512];
  12.     struct LEVEL* next_level;
  13. } Level;
  14.  
  15. struct LEVEL* level_1;
  16.  
  17. void levels_init() {
  18.     FILE *sub = fopen("levels.dat", "r");
  19.    
  20.     if (sub == NULL) {
  21.         char* level1 = "---####|---#--#|---#--#|---#$.#|####--#|#-----#|#@$.--#|#######";
  22.         char* level2 = "-#####|##---#|#--.-#|#-$.$###|##$.$--#|-#-.@--#|-#######";
  23.         char* level3 = "--#####|###-@-#|#-----##|#-$.---#|###----#|--#----#|--#--###|--####";
  24.    
  25.         level_1 = ( Level* ) malloc( sizeof( Level ) );
  26.         strncpy(level_1->map, level1, strlen(level1) + 1);
  27.         strncpy(level_1->name, "at the beginning...", 20);
  28.         strncpy(level_1->description, "...programmer created the world and the robot...", 49);
  29.         strncpy(level_1->password, "sokoban", 8);
  30.         level_1->next_level = NULL;
  31.    
  32.         level_1 = add_level(level2, "the next level", " you should have no expectations!", "budokan");
  33.         level_1 = add_level(level3, "level 3", "this is level 3", "saboteur");
  34.     } else {
  35.         char row [1024];
  36.         char *part;
  37.         char map[512], name[64], desc[128], passwd[64];
  38.         int i;
  39.         int one = 0;
  40.         while (fgets (row, sizeof row, sub) != NULL)
  41.         {
  42.             part = strtok (row,";");
  43.             i = 1;
  44.             while (part != NULL)
  45.             {
  46.                 switch (i) {
  47.                     case 1: strncpy(name, part, strlen(part) + 1); break;
  48.                     case 2: strncpy(desc, part, strlen(part) + 1); break;
  49.                     case 3: strncpy(passwd, part, strlen(part) + 1); break;
  50.                     case 4: strncpy(map, part, strlen(part) + 1); break;
  51.                 }
  52.                 i++;
  53.                 part = strtok (NULL, ";");
  54.             }
  55.             if (one++ == 0 ) {
  56.                 level_1 = (Level*) malloc(sizeof(Level));
  57.                 strncpy(level_1->map, map, strlen(map) + 1);
  58.                 strncpy(level_1->name, name, strlen(name) + 1);
  59.                 strncpy(level_1->description, desc, strlen(desc) + 1);
  60.                 strncpy(level_1->password, passwd, strlen(passwd) + 1);
  61.                 level_1->next_level = NULL;
  62.             } else {
  63.                 level_1 = add_level(map, name, desc, passwd);
  64.             }
  65.         }
  66.         fclose (sub);
  67.     }
  68. }
  69.  
  70. Level* add_level(char* map, char* name, char* description, char* password)
  71. {
  72.     Level* lvl = (Level*) malloc(sizeof(Level));
  73.    
  74.     strncpy(lvl->map, map, strlen(map) + 1);
  75.     strncpy(lvl->name, name, strlen(name) + 1);
  76.     strncpy(lvl->description, description, strlen(description) + 1);
  77.     strncpy(lvl->password, password, strlen(password) + 1);
  78.     lvl->next_level = NULL;
  79.        
  80.     Level* first = level_1;
  81.     Level* currentItem = level_1;
  82.     while(currentItem->next_level != NULL)
  83.     {
  84.         currentItem = currentItem->next_level;
  85.     }
  86.     currentItem->next_level = lvl;
  87.     currentItem = currentItem->next_level;
  88.     currentItem->next_level = NULL;
  89.    
  90.     return first;
  91. }
  92.  
  93.  
  94. Level* getLevel(char* password) {
  95.     if (password == NULL)
  96.         return level_1;
  97.    
  98.     Level* item = level_1;
  99.     while(item != NULL)
  100.     {
  101.         if (strcmp(item->password, password) == 0)
  102.             return item;
  103.         item = item->next_level;
  104.     }
  105.     return NULL;
  106. }
  107.  
  108.  
  109. void levels_free() {
  110.     Level* level;
  111.     while(level_1 != NULL)
  112.     {
  113.         level = level_1;
  114.         level_1 = level_1->next_level;
  115.         free(level);
  116.     }
  117. }