simple parsing added
[mc1516pa.git] / modelchecker / sokoban.c
index e302670..1abda09 100644 (file)
@@ -1,17 +1,38 @@
 #include <stdio.h>
-
+#include <stdlib.h>
 #include "sokoban.h"
 
+
+//Still need to remove outside walls
 struct sokoban_screen *parse_screen(FILE *stream){
-       int buffer;
-       while((buffer = fgetc(stream)) != EOF){
-               printf("%c", buffer);
-       }
-       // Alex:
-       // Screen reading
-       // - Removing outside walls
-       // - Bucket fill
-       // - [tile]
-       // - tile = structure {int, int, enumtile}
-       return NULL;
-}
+    int buffer, x, y;
+    x = 0;
+    y = 0;
+    struct sokoban_screen *head, *current;
+    head = NULL;
+    while((buffer = fgetc(stream)) != EOF){
+        if (buffer == '\n'){
+            x = 0;
+            y++;
+        }
+        else {
+            current = (struct sokoban_screen *)malloc(sizeof(struct sokoban_screen));
+            current->next = head;
+            switch(buffer) {
+                case ' ' : current->tile = FREE; break;
+                case '@' : current->tile = AGENT; break;
+                case '.' : current->tile = TARGET; break;
+                case '#' : current->tile = WALL; break;
+                case '$' : current->tile = BOX; break;
+                case '*' : current->tile = TARGBOX; break;
+                case '+' : current->tile = TARGAGENT; break;
+                default: return NULL;
+            }
+            current->x = x;
+            current->y = y;
+            x++;
+            head = current;
+        }
+    }
+    return head;
+ }