Minor changes (found out what overlay() means ...)
[dungeon1] / main.c
diff --git a/main.c b/main.c
index e9c5604..76b19d6 100644 (file)
--- a/main.c
+++ b/main.c
 
 #include "main.h"
 
+static void draw(void);
+static void wboxborder(WINDOW *);
+
 int
 main(void)
 {
-       int x, y;
-       WINDOW *win;
+       int x, y, x2, y2;
        int c;
-       enum {
-               W = 80,
-               H = 24,
-       };
        char c2;
+       struct map *map, *fow;
+       int gold=0;
+       char *title = "****   DUNGEON1   ****";
 
-       win = initscr();
+       initscr();
        noecho();
        cbreak();
        keypad(stdscr, TRUE);
+
+       w_title = newwin(1, COLS-1, 0, 0);
+       mvwprintw(w_title, 0, MAPW/2 - strlen(title)/2, "%s", title);
+
+       w_mapborder = newwin(MAPH+2*BORDER, MAPW+2*BORDER, 1, 0);
+       wboxborder(w_mapborder);
+       w_map = subwin(w_mapborder, MAPH, MAPW, 2, 1);
+
+       w_info = newwin(4, MAPW+2*BORDER, MAPH+2*BORDER, 0);
+       w_gold = subwin(w_info, 1, 10, MAPH+2*BORDER+2, 50);
+       mvwprintw(w_gold, 0, 0, "gold:%2d", 0);
+       w_pos = subwin(w_info, 1, 20, MAPH+2*BORDER+2, 10);
 /*
-       nonl();
-       intrflush(stdscr, FALSE);
 */
 
-       mvprintw(0, 20, "%d:%d", W, H);
-       move(H/2, W/2);
-       refresh();
+
+       fow = getblackmap();
+       showmap(fow);
+       map = readmap("map1");
+
+       findchar(map, '>', &y, &x);
+       wmove(w_map, y, x);
+       see(map, y, x);
+       draw();
 
        while ((c = getch()) != ERR) {
                if (c == 'q') {
                        break;
                }
-               getyx(win, y, x);
-               addch('.');
+               getyx(w_map, y, x);
+               x2 = x;
+               y2 = y;
                switch (c) {
                case KEY_LEFT:
                case 'h':
-                       if (x > 0) {
-                               x--;
-                       }
+                       x2 = x - 1;
                        break;
                case KEY_RIGHT:
                case 'l':
-                       if (x < W) {
-                               x++;
-                       }
+                       x2 = x + 1;
                        break;
                case KEY_UP:
                case 'k':
-                       if (y > 1) {
-                               y--;
-                       }
+                       y2 = y - 1;
                        break;
                case KEY_DOWN:
                case 'j':
-                       if (y < H) {
-                               y++;
-                       }
+                       y2 = y + 1;
                        break;
                }
-               c2 = mvinch(y, x) & 255;
+               if (y2 < 0 || y2 > H || x2 < 0 || x2 > W) {
+                       continue;
+               }
+
+               c2 = map->map[y2][x2];
                switch (c2) {
+               case '$':
+                       gold++;
+                       map->map[y2][x2] = ' ';
+                       mvwaddch(w_map, y2, x2, ' ');
+                       mvwprintw(w_gold, 0, 5, "%2d", gold);
+                       /* FALL */
+               case ' ':
+                       mvwprintw(w_pos, 0, 0, "pos: %d,%d", x2, y2);
+                       wmove(w_map, y2, x2);
+                       see(map, y2, x2);
+                       break;
+               case '*':
+                       mvwprintw(w_map, H-5, 10, "AUSGANG gefunden!");
+                       goto exit;
+               default:
+                       continue;
                }
-               mvprintw(0, 40, "<%c>", c2);
-               mvprintw(0, 0, "%d:%d", x, y);
-               move(y, x);
 
-               refresh();
-               napms(10);
+               mvwprintw(w_pos, 0, 10, "<%c>", c2);
+               wmove(w_map, y2, x2);
+
+               draw();
        }
 
+exit:
+/*
+       mvprintw(H, 0, "press key to exit...");
+       getch();
+*/
        endwin();
        return 0;
 }
 
+static void
+draw(void)
+{
+       refresh();
+       wrefresh(w_title);
+       wrefresh(w_info);
+       wrefresh(w_gold);
+       wrefresh(w_pos);
+       wrefresh(w_mapborder);
+       overlay(w_map, w_mapborder);
+       wrefresh(w_map);
+}
+
+static void
+wboxborder(WINDOW *win)
+{
+       wborder(win, '|', '|', '-', '-', '+', '+', '+', '+');
+}
+