#include "main.h"
+static void draw(void);
+static void wboxborder(WINDOW *);
+
int
main(void)
{
int x, y, x2, y2;
- WINDOW *win;
int c;
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+1, 0);
+ wboxborder(w_info);
+ w_gold = subwin(w_info, 1, 10, MAPH+2*BORDER+1+2, 50);
+ w_pos = subwin(w_info, 1, 20, MAPH+2*BORDER+1+2, 10);
/*
- nonl();
- intrflush(stdscr, FALSE);
*/
+
fow = getblackmap();
showmap(fow);
map = readmap("map1");
findchar(map, '>', &y, &x);
- move(y, x);
+ wmove(w_map, y, x);
see(map, y, x);
- refresh();
+ draw();
while ((c = getch()) != ERR) {
if (c == 'q') {
break;
}
- getyx(win, y, x);
+ getyx(w_map, y, x);
x2 = x;
y2 = y;
switch (c) {
case '$':
gold++;
map->map[y2][x2] = ' ';
- mvaddch(y2, x2, ' ');
+ mvwaddch(w_map, y2, x2, ' ');
+ mvwprintw(w_gold, 0, 0, "gold:%d", gold);
/* FALL */
case ' ':
- mvprintw(0, 0, "%d:%d", x2, y2);
- move(y2, x2);
+ mvwprintw(w_pos, 0, 0, "pos: %d,%d", x2, y2);
+ wmove(w_map, y2, x2);
see(map, y2, x2);
break;
case '*':
- mvprintw(H/2, 10, "AUSGANG gefunden!");
+ mvwprintw(w_map, H-5, 10, "AUSGANG gefunden!");
goto exit;
default:
continue;
}
- mvprintw(0, 40, "<%c> gold:%d", c2, gold);
- move(y2, x2);
+ mvwprintw(w_pos, 0, 10, "<%c>", c2);
+ wmove(w_map, y2, x2);
- refresh();
- napms(10);
+ draw();
}
exit:
+/*
mvprintw(H, 0, "press key to exit...");
getch();
+*/
endwin();
return 0;
}
+static void
+draw(void)
+{
+/*
+*/
+ refresh();
+ wrefresh(w_info);
+ wrefresh(w_gold);
+ wrefresh(w_pos);
+ overlay(w_gold, w_info);
+ overlay(w_pos, w_info);
+ wrefresh(w_title);
+ wrefresh(w_mapborder);
+ overlay(w_map, w_mapborder);
+ wrefresh(w_map);
+}
+
+static void
+wboxborder(WINDOW *win)
+{
+ wborder(win, '|', '|', '-', '-', '+', '+', '+', '+');
+}
+
return NULL;
}
- for (y=0; y<H; y++) {
- for (x=0; x<W; x++) {
+ for (y=0; y<MAPH; y++) {
+ for (x=0; x<MAPW; x++) {
map->map[y][x] = fgetc(fp);
}
if (fgetc(fp) != '\n') {
int x, y;
char c;
- for (y=0; y<H; y++) {
- for (x=0; x<W; x++) {
+ for (y=0; y<MAPH; y++) {
+ for (x=0; x<MAPW; x++) {
c = map->map[y][x];
if (c != '#') {
continue;
map->map[y][x] = getnewchar(map, y, x);
}
}
- for (y=0; y<H; y++) {
- for (x=0; x<W; x++) {
+ for (y=0; y<MAPH; y++) {
+ for (x=0; x<MAPW; x++) {
c = map->map[y][x];
if (c == '#') {
map->map[y][x] = ' ';
l = strchr(WALLCHARS, l) ? '#' : ' ';
r = x+1 > W ? '#' : map->map[y][x+1];
r = strchr(WALLCHARS, r) ? '#' : ' ';
- a = y-1 < T ? '#' : map->map[y-1][x];
+ a = y-1 < 0 ? '#' : map->map[y-1][x];
a = strchr(WALLCHARS, a) ? '#' : ' ';
b = y+1 > H ? '#' : map->map[y+1][x];
b = strchr(WALLCHARS, b) ? '#' : ' ';
int y, x;
for (y=ypos-SEEDIST; y <= ypos+SEEDIST; y++) {
- if (y<T || y>=H) {
+ if (y<0 || y>=MAPH) {
continue;
}
for (x=xpos-SEEDIST; x <= xpos+SEEDIST; x++) {
- if (x<0 || x>=W) {
+ if (x<0 || x>=MAPW) {
continue;
}
- mvaddch(y, x, map->map[y][x]);
+ mvwaddch(w_map, y, x, map->map[y][x]);
}
}
- move(ypos, xpos);
+ wmove(w_map, ypos, xpos);
}
void
{
int y, x;
- for (y=0; y<H; y++) {
- for (x=0; x<W; x++) {
+ for (y=0; y<MAPH; y++) {
+ for (x=0; x<MAPW; x++) {
if (map->map[y][x] == c) {
*yret = y;
*xret = x;
{
int x, y;
- mvprintw(0, 60, "map: %s", map->name);
- for (y=T; y<H; y++) {
- for (x=0; x<W; x++) {
- mvaddch(y, x, map->map[y][x]);
+ mvwprintw(w_info, 1, 20, "map: %s", map->name);
+ for (y=0; y<MAPH; y++) {
+ for (x=0; x<MAPW; x++) {
+ mvwaddch(w_map, y, x, map->map[y][x]);
}
}
}