#include #include #include #include #include #include int main(int argc, char *argv[]) { FILE* mazeFile; /* Maze Input File */ unsigned int row = 0; /* Holds number of rows for input from file */ unsigned int col = 0; /* Holds number of cols for input from file */ char shold[2000]; /* Holds lines for input from file */ unsigned int l = 0; unsigned int k = 0; char **maze; /* array for maze */ unsigned int c1 = 0; unsigned int c2 = 0; unsigned int i = 0; unsigned int j = 0; unsigned int x = 0; unsigned int y = 0; WINDOW* W = 0; /* Curses Window handle */ int rowLimit,colLimit; /* Num of rows and columns in terminal window */ /* Initialize ncurses -- you will want to use the following settings */ /* check to see if argument */ if (argc != 2) { /*printw("An error has ocurred no input file was given.\n");*/ return 1; } mazeFile = fopen(argv[1], "r"); if (mazeFile == NULL) { /*printw("Error in opening the file.\n");*/ return 1; } fgets(shold, 2, mazeFile); while ( feof(mazeFile) == 0 ) { switch(shold[0]) { case 'M': /* read array values, dynamically allocate array */ fscanf(mazeFile, "%3u %3u", &row, &col); maze = (char**)malloc(row * 8); for(i = (unsigned) 0; i < row; i++) { if (maze==NULL) { break; } maze[i] = malloc(col * 8); } for (x = (unsigned) 0; x < row; x++) { for (j = (unsigned) 0; j < col; j++) { fscanf(mazeFile, "%c", &maze[x][j]); if (maze[x][j] == '\n') { fscanf(mazeFile, "%c", &maze[x][j]); } } } break; case 'P': fscanf(mazeFile, "%3u %3u", &k, &l); /* check maze bounds */ if(k>= row || l>= col){ break; } maze[k][l] = 'P'; break; case 'Z': fscanf(mazeFile, "%3u %3u", &k, &l); /* check maze bounds */ if(k>= row || l>= col){ break; } maze[k][l] = 'Z'; break; case 'T': fscanf(mazeFile, "%3u %3u", &k, &l); /* check maze bounds */ if(k>= row || l>= col){ break; } maze[k][l] = 'T'; break; default: break; }; fgets(shold, 2, mazeFile); if (feof(mazeFile) != 0) { break; } } fclose(mazeFile); W = initscr(); /* Determine terminal type and initialize curses data structures */ start_color(); /* Enable use of color with ncurses */ cbreak(); /* Disable line buffering and make char inputs immediately accessible to program */ noecho(); /* Disable echo printing of chars type by user */ nodelay(W, true); /* Make getch( ) a non-blocking call */ keypad(W, true); /* Enable keypad and arrow keys */ curs_set(0); /* Set cursor to be invisible - 0 */ getmaxyx(W, rowLimit, colLimit); /* Query terminal dimensions */ for (c1 =(unsigned)0; c1 < row; c1++) { /*printw ("\n");*/ for (c2=(unsigned)0; c2 < col; c2++) { if (maze==NULL) { break; } switch(maze[c1][c2]) { case '#': /* read array values, dynamically allocate array*/ wmove(W, c1,c2); waddch(W,'#'); break; case ' ': wmove(W, c1,c2); waddch(W,' '); break; case 'P': wmove(W, c1,c2); waddch(W,'P'); break; case 'Z': wmove(W, c1,c2); waddch(W,'Z'); break; case 'T': wmove(W, c1,c2); waddch(W,'T'); break; default: break; }; /*printw("%c", maze[c1][c2]);*/ } } do{ wrefresh(W); /* Refresh ncurses window */ } while (true); /* Repeat until user selects q to quit */ /* free the memory */ for(y = (unsigned)0; y < row; y++) { free(maze[y]); maze[y] = NULL; } if(maze != NULL){ free(maze); } /*printw("\n");*/ endwin(); return 0; }