From 952244e7b184bf88122742ad75b884d1eb97eae5 Mon Sep 17 00:00:00 2001 From: Nathan Vance Date: Tue, 24 Feb 2015 15:24:39 -0500 Subject: Added messages, fixed indefinites --- data.c | 4 ++-- io.c | 27 +++++++++++++++------------ messenger.c | 31 +++++++++++++++++++++++++++++++ player_turn.c | 18 ++++++++++++++---- view.c | 2 ++ wonder.c | 32 ++++++++++++++++---------------- 6 files changed, 80 insertions(+), 34 deletions(-) create mode 100644 messenger.c diff --git a/data.c b/data.c index 656c80a..f164b74 100644 --- a/data.c +++ b/data.c @@ -184,6 +184,7 @@ int* data_getdefinites(int p) { int *ret = get_intarray(GOLD); int i, j, k, *prod; + for(i = 0; i < GOLD; i++) ret[i] = 0; for(i = 0; i < 3; i++) { for(j = 0; j < 7; j++) { if(data_productiontype(i, player[p][i][j]) == 1) { @@ -257,13 +258,12 @@ static int recurse(int *cost, int **indef, int c) return 0; } -//return 0 if can't afford, 1 if must buy stuff from neighbors, 2 if have all resources. int data_canafford(int p, int *cost) { if(cost[GOLD] > player[p][MISC][DATAGOLD]) return 0; int i, j, k; data_removedefinites(p, cost); - if(data_iszerocost(cost)) return 2; + if(data_iszerocost(cost)) return 1; return recurse(cost, data_getindefinites(p), 0); } diff --git a/io.c b/io.c index 705007d..2658203 100644 --- a/io.c +++ b/io.c @@ -88,7 +88,7 @@ void io_printblankline(int x, int y, int width) int io_printtext(int xorigin, int y, int width, char* text) { - width -= 2; //padding + width -= 1; //padding int x = xorigin+2; int wordlength; int wordstart = 0; @@ -97,27 +97,30 @@ int io_printtext(int xorigin, int y, int width, char* text) io_printblankline(xorigin, y, width); while(text[wordstart] != '\0') { wordlength = 0; - while(text[wordstart+(wordlength++)] != ' ' && text[wordstart+wordlength] != '\0'); - if(x-xorigin+wordlength > width) { + while(text[wordstart+(wordlength++)] != ' ' && text[wordstart+wordlength] != '\0' && text[wordstart+wordlength] != '\n'); + if(x-xorigin+wordlength > width || text[wordstart] == '\n') { io_printblankline(xorigin, ++y, width); x = xorigin+2; } mvprintw(y, x, ""); - for(i = wordstart; i < wordstart+wordlength; i++) addch(text[i]); + for(i = wordstart; i < wordstart+wordlength; i++) + if(text[i] != '\n') addch(text[i]); x += wordlength; wordstart += wordlength; } return y+1; } -void io_printborder(int x, int y) +void io_printborder(int x, int y, int width) { - mvprintw(y, x, "############################"); + int i; + for(i = 0; i < width; i++) + mvprintw(y, x+i, "#"); } int io_printcard(int x, int y, int era, int card) { - io_printborder(x, y++); + io_printborder(x, y++, 28); if(cards_getname(era, card)[0] != '\0') io_printname(x, y++, era, card); int *costs = cards_getcost(era, card); @@ -150,7 +153,7 @@ int io_printcard(int x, int y, int era, int card) char* message = cards_specialmessage(era, card); if(message[0] != '\0') - y = io_printtext(x, y, 29, message); + y = io_printtext(x, y, 28, message); int* coupons = cards_getcoupons(era, card); if(coupons[1] || coupons[3]) @@ -172,7 +175,7 @@ int io_printcard(int x, int y, int era, int card) io_printname(x, y++, coupons[2], coupons[3]); } - io_printborder(x, y); + io_printborder(x, y, 28); return y; } @@ -181,8 +184,8 @@ void io_printhand(int x, int y, int player, int cursor) int *hand = data_gethand(player); int i; int cursed = 0; - io_printborder(x, y++); - y = io_printtext(x, y, 29, " Hand"); + io_printborder(x, y++, 28); + y = io_printtext(x, y, 28, " Hand"); for(i = 0; hand[i] != -1 && i < 7; i++) { io_printname(x, y++, data_getera(), hand[i]); if(i == cursor) { @@ -191,7 +194,7 @@ void io_printhand(int x, int y, int player, int cursor) } } if(cursed) io_printcard(x, y, data_getera(), hand[cursor]); - else io_printborder(x, y); + else io_printborder(x, y, 28); } void io_printplain(int x, int y, char *s) diff --git a/messenger.c b/messenger.c new file mode 100644 index 0000000..5c3c947 --- /dev/null +++ b/messenger.c @@ -0,0 +1,31 @@ +#include "7w.h" + +int io_printtext(int xorigin, int y, int width, char* text); +void io_printborder(int x, int y, int width); + +#define MAXMESSAGE 100 +static char message[MAXMESSAGE]; + +void printmessage(int x, int y, int width) +{ + if(message[0] == '\0') return; + io_printborder(x, y++, width); + y = io_printtext(x, y, width, message); + io_printborder(x, y, width); +} + +void postmessage(char* m) +{ + int i; + for(i = 0; i < MAXMESSAGE && (message[i] = m[i]) != '\0'; i++); +} + +void clearmessage() +{ + message[0] = '\0'; +} + +void posthelp() +{ + postmessage(" 7 Wonders Help:\nKeys:\n Arrow keys move cursor\n Return - buys resource\n h - prints this message"); +} diff --git a/player_turn.c b/player_turn.c index cc52825..5d1b122 100644 --- a/player_turn.c +++ b/player_turn.c @@ -14,18 +14,22 @@ void view_refresh(int focus, int cursor, int player); int wonder_numstages(int player); int* cards_getcost(int era, int card); int data_numbuilt(int p); +void postmessage(char* message); +void posthelp(); +void clearmessage(); int player_build(int focus, int cursor, int player) { if(focus == data_numplayers()) { int *hand = data_gethand(player); - if(data_canafford(player, cards_getcost(data_getera(), hand[cursor])) == 2) { + if(data_canafford(player, cards_getcost(data_getera(), hand[cursor]))) { data_build(player, hand[cursor]); return 1; } + else postmessage("Can't afford this!"); } if(focus == 0) { - if(data_canafford(player, cards_getcost(data_getwonder(player), data_getwonderside(player)*3+1+cursor)) == 2) { + if(data_canafford(player, cards_getcost(data_getwonder(player), data_getwonderside(player)*3+1+cursor))) { data_buildwonder(player, 0); //change to choose card used return 1; } @@ -52,11 +56,17 @@ void player_turn(int player) case LEFT: focus--; break; case ENTER: - if(player_build(focus, cursor, player)) - player++; + if(player_build(focus, cursor, player)) { + player++; + cursor = 0; + focus = data_numplayers(); + clearmessage(); + } break; case '\t': focus = (focus+1)%(data_numplayers()+1); break; + case 'h': posthelp(); + break; default: break; } if(player >= data_numplayers()) { diff --git a/view.c b/view.c index 68337b4..3061435 100644 --- a/view.c +++ b/view.c @@ -7,6 +7,7 @@ void io_printhand(int x, int y, int player, int cursor); void io_clearscreen(); int data_numplayers(); void io_printhand(int x, int y, int player, int cursor); +void printmessage(int x, int y, int width); void view_printwonders(int focus, int cursor, int player) { @@ -22,6 +23,7 @@ void view_printwonders(int focus, int cursor, int player) print_wonder(34, 0, p, cursor); y = print_wondersmall(x, y, p, focus == p, dir); } + printmessage(0, y+2, 35); } void view_refresh(int focus, int cursor, int player) diff --git a/wonder.c b/wonder.c index 51c032e..5c5169e 100644 --- a/wonder.c +++ b/wonder.c @@ -8,7 +8,7 @@ char* getname(int res); int cards_gettype(int wonder, int stage); //stage is 0 int data_getwonder(int p); int data_getwonderside(int p); -void io_printborder(int x, int y); +void io_printborder(int x, int y, int width); int io_printtext(int xorigin, int y, int width, char* text); int io_printcard(int x, int y, int wonder, int stage); void io_printname(int x, int y, int era, int card); @@ -36,20 +36,20 @@ int wonder_numstages(int player) int print_wonder(int x, int y, int player, int cursor) { int i, j; - io_printborder(x, y++); - y = io_printtext(x, y, 29, cards_getname(data_getwonder(player), 0)); - y = io_printtext(x, y, 29, cat("Produces: 1 ", getname(cards_gettype(data_getwonder(player), 0)))); - y = io_printtext(x, y, 29, cat(cat("Treasury: ", itoa(data_getgold(player))), " gold")); - io_printborder(x, y++); + io_printborder(x, y++, 28); + y = io_printtext(x, y, 28, cards_getname(data_getwonder(player), 0)); + y = io_printtext(x, y, 28, cat("Produces: 1 ", getname(cards_gettype(data_getwonder(player), 0)))); + y = io_printtext(x, y, 28, cat(cat("Treasury: ", itoa(data_getgold(player))), " gold")); + io_printborder(x, y++, 28); //Print resource incomes int *def = data_getdefinites(player); def[cards_gettype(data_getwonder(player), 0)]++; int **indef = data_getindefinites(player); - y = io_printtext(x, y, 29, "Production:"); + y = io_printtext(x, y, 28, "Production:"); for(i = 0; i < GOLD; i++) { if(def[i]) { - y = io_printtext(x, y, 29, cat(cat(cat(" ", getname(i)), ": "), itoa(def[i]))); + y = io_printtext(x, y, 28, cat(cat(cat(" ", getname(i)), ": "), itoa(def[i]))); } } for(i = 0; i < INDEF; i++) { @@ -59,11 +59,11 @@ int print_wonder(int x, int y, int player, int cursor) text = cat(cat(text, "/"), getname(indef[i][j])); } if(text[0] != '\0') { - y = io_printtext(x, y, 29, text); + y = io_printtext(x, y, 28, text); io_printplain(x+2, y-1, " "); } } - io_printborder(x, y++); + io_printborder(x, y++, 28); //Print wonder stages for(i = 0; i < wonder_numstages(player); i++) { @@ -76,9 +76,9 @@ int print_wonder(int x, int y, int player, int cursor) text = cat(text, " *"); else text = cat(text, " "); - y = io_printtext(x, y, 29, text); + y = io_printtext(x, y, 28, text); } - io_printborder(x, y++); + io_printborder(x, y++, 28); //Print what has been built int *built = data_getbuilt(player); @@ -91,7 +91,7 @@ int print_wonder(int x, int y, int player, int cursor) } } if(j == 0) y--; - io_printborder(x, y); + io_printborder(x, y, 28); //Info about component if(cursor >= 0 && cursor < wonder_numstages(player)) @@ -103,12 +103,12 @@ int print_wonder(int x, int y, int player, int cursor) //dir is 0 for none, 1 for east, 2 for west int print_wondersmall(int x, int y, int player, int selected, int dir) { - io_printborder(x, y++); + io_printborder(x, y++, 28); if(selected) io_printplain(28, y, "*"); if(dir == 1) io_printplain(29, y, "East"); if(dir == 2) io_printplain(29, y, "West"); - y = io_printtext(x, y, 29, cards_getname(data_getwonder(player), 0)); - io_printborder(x, y); + y = io_printtext(x, y, 28, cards_getname(data_getwonder(player), 0)); + io_printborder(x, y, 28); return y; } -- cgit