Skip to content
Snippets Groups Projects
Commit d1a04dea authored by Jake Feddersen's avatar Jake Feddersen
Browse files

Add monster list, at least a bit

parent 07e4a617
No related branches found
No related tags found
No related merge requests found
Showing
with 146 additions and 19 deletions
File added
character.o: character.c character.h heap.h util.h
File deleted
display_result.o: display_result.c display_result.h
File deleted
distance_map.o: distance_map.c heap.h distance_map.h dungeon.h \
character.h util.h
File deleted
......@@ -10,6 +10,7 @@ char monster_chars[] = "0123456789abcdef";
void init_screen() {
// Initialize ncurses screen
initscr();
set_escdelay(0);
// Unbuffered input
cbreak();
......
draw_dungeon.o: draw_dungeon.c dungeon.h character.h heap.h util.h \
draw_dungeon.h
File deleted
dungeon.o: dungeon.c character.h heap.h util.h dungeon.h
File deleted
heap.o: heap.c heap.h
File deleted
line_of_sight.o: line_of_sight.c line_of_sight.h dungeon.h character.h \
heap.h util.h
File deleted
movement_logic.o: movement_logic.c distance_map.h dungeon.h character.h \
heap.h util.h movement_logic.h
File deleted
File deleted
......@@ -14,6 +14,82 @@
#include "save_load.h"
#include "util.h"
char *valid_keys = "7y8k9u6l3n2j1b4h><5. qQ";
char *eastwest[] = {
"east",
"west"
};
char *northsouth[] = {
"north",
"south"
};
void display_monster_list(dungeon_t *d) {
int i, j, k;
int count = 0;
for (i = 0; i < MAP_HEIGHT; i++) {
for (j = 0; j < MAP_WIDTH; j++) {
if (d->characters[i][j] && d->characters[i][j]->monster) {
count++;
}
}
}
k = 0;
char **monster_strings = malloc(count * sizeof(char*));
for (i = 0; i < MAP_HEIGHT; i++) {
for (j = 0; j < MAP_WIDTH; j++) {
if (d->characters[i][j] && d->characters[i][j]->monster) {
*(monster_strings+k) = malloc(40 * sizeof(char*));
int dx = d->player_pos.x - d->characters[i][j]->pos.x;
int dy = d->player_pos.y - d->characters[i][j]->pos.y;
int horiz = abs(dx);
int vert = abs(dy);
char *str1 = eastwest[min(1, sign(dx)+1)];
char *str2 = northsouth[min(1, sign(dy)+1)];
snprintf(*(monster_strings+k), 39, "%c, %d %s and %d %s", d->characters[i][j]->symbol, horiz, str1, vert, str2);
k++;
}
}
}
k = 0;
while(1) {
clear();
for (i = k; i < min(k+5, count); i++) {
mvaddstr(i-k, 0, monster_strings[i]);
}
refresh_screen();
char key = getch();
if (key == 27) {
// Escape key
break;
}
if (key == KEY_DOWN) {
k = max(0, min(count-5, k+1));
}
if (key == KEY_UP) {
k = max(0, k-1);
}
}
for (i = 0; i < count; i++) {
free(monster_strings[i]);
}
free(monster_strings);
}
int main(int argc, char* argv[]) {
args_t args;
......@@ -41,7 +117,7 @@ int main(int argc, char* argv[]) {
heap_t h;
init_turn_heap(&d, &h);
int game_won;
int game_won = 0;
// Initialize line of sight
calc_line_of_sight(&d, d.pc_sight, d.player_pos.x, d.player_pos.y);
......@@ -77,10 +153,72 @@ int main(int argc, char* argv[]) {
draw_dungeon(&d);
refresh_screen();
int key = getch();
printf("%c\n", key);
next_move = c->pos;
int key;
int handled_move = 0;
while(!handled_move) {
key = getch();
if (key == 'Q' || key == 'q') {
game_won = -1;
break;
}
next_move = c->pos;
if (key == '7' || key == 'y') {
next_move.x--;
next_move.y--;
handled_move = 1;
}
if (key == '8' || key == 'k') {
next_move.y--;
handled_move = 1;
}
if (key == '9' || key == 'u') {
next_move.y--;
next_move.x++;
handled_move = 1;
}
if (key == '6' || key == 'l') {
next_move.x++;
handled_move = 1;
}
if (key == '3' || key == 'n') {
next_move.x++;
next_move.y++;
handled_move = 1;
}
if (key == '2' || key == 'j') {
next_move.y++;
handled_move = 1;
}
if (key == '1' || key == 'b') {
next_move.x--;
next_move.y++;
handled_move = 1;
}
if (key == '4' || key == 'h') {
next_move.x--;
handled_move = 1;
}
if (key == '5' || key == ' ' || key == '.') {
handled_move = 1;
}
if (key == 'm') {
display_monster_list(&d);
draw_dungeon(&d);
refresh_screen();
}
}
}
// If we killed another character by moving there
......@@ -123,9 +261,9 @@ int main(int argc, char* argv[]) {
}
}
if (game_won) {
if (game_won == 1) {
display_win();
} else {
} else if (game_won == 0) {
display_lose();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment