summaryrefslogtreecommitdiffstats
path: root/gomoku
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2010-03-29 04:28:47 +0000
committerdholland <dholland@NetBSD.org>2010-03-29 04:28:47 +0000
commit02c60ff9fc0555ec4b69409ff2d0be522ff67ee7 (patch)
tree66838623601d23c83c88f6e9d590b7ee3c140647 /gomoku
parent95443b610fe08b78b4ab9ede0bf0a8d3021c84de (diff)
downloadbsdgames-darwin-02c60ff9fc0555ec4b69409ff2d0be522ff67ee7.tar.gz
bsdgames-darwin-02c60ff9fc0555ec4b69409ff2d0be522ff67ee7.tar.zst
bsdgames-darwin-02c60ff9fc0555ec4b69409ff2d0be522ff67ee7.zip
Some improvements to the new UI.
Diffstat (limited to 'gomoku')
-rw-r--r--gomoku/bdisp.c26
-rw-r--r--gomoku/gomoku.h3
-rw-r--r--gomoku/main.c35
3 files changed, 45 insertions, 19 deletions
diff --git a/gomoku/bdisp.c b/gomoku/bdisp.c
index 075ea172..83db2d06 100644
--- a/gomoku/bdisp.c
+++ b/gomoku/bdisp.c
@@ -1,4 +1,4 @@
-/* $NetBSD: bdisp.c,v 1.14 2010/03/29 03:51:55 dholland Exp $ */
+/* $NetBSD: bdisp.c,v 1.15 2010/03/29 04:28:47 dholland Exp $ */
/*
* Copyright (c) 1994
@@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)bdisp.c 8.2 (Berkeley) 5/3/95";
#else
-__RCSID("$NetBSD: bdisp.c,v 1.14 2010/03/29 03:51:55 dholland Exp $");
+__RCSID("$NetBSD: bdisp.c,v 1.15 2010/03/29 04:28:47 dholland Exp $");
#endif
#endif /* not lint */
@@ -261,6 +261,24 @@ ask(const char *str)
}
int
+get_key(const char *allowed)
+{
+ int ch;
+
+ while (1) {
+ ch = getch();
+ if (allowed != NULL &&
+ ch != '\0' && strchr(allowed, ch) == NULL) {
+ beep();
+ refresh();
+ continue;
+ }
+ break;
+ }
+ return ch;
+}
+
+int
get_line(char *buf, int size)
{
char *cp, *end;
@@ -321,7 +339,7 @@ get_coord(void)
nx = curx;
ny = cury;
for (;;) {
- mvprintw(BSZ3, (BSZ -6)/2, "(%c %d)",
+ mvprintw(BSZ3, (BSZ -6)/2, "(%c %d) ",
'A'+ ((curx > 7) ? (curx+1) : curx), cury + 1);
BGOTO(cury, curx);
@@ -431,9 +449,11 @@ get_coord(void)
break;
#endif /* 0 */
case 'Q':
+ case 'q':
return RESIGN;
break;
case 'S':
+ case 's':
return SAVE;
break;
case ' ':
diff --git a/gomoku/gomoku.h b/gomoku/gomoku.h
index bf97b1cf..deca3ac5 100644
--- a/gomoku/gomoku.h
+++ b/gomoku/gomoku.h
@@ -1,4 +1,4 @@
-/* $NetBSD: gomoku.h,v 1.18 2010/03/29 03:51:55 dholland Exp $ */
+/* $NetBSD: gomoku.h,v 1.19 2010/03/29 04:28:47 dholland Exp $ */
/*
* Copyright (c) 1994
@@ -269,6 +269,7 @@ extern int debug;
void bdinit(struct spotstr *);
int get_coord(void);
+int get_key(const char *allowedkeys);
int get_line(char *, int);
void ask(const char *);
void dislog(const char *);
diff --git a/gomoku/main.c b/gomoku/main.c
index 769bfef7..a09d417c 100644
--- a/gomoku/main.c
+++ b/gomoku/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.23 2010/03/29 03:51:55 dholland Exp $ */
+/* $NetBSD: main.c,v 1.24 2010/03/29 04:28:47 dholland Exp $ */
/*
* Copyright (c) 1994
@@ -42,7 +42,7 @@ __COPYRIGHT("@(#) Copyright (c) 1994\
#if 0
static char sccsid[] = "@(#)main.c 8.4 (Berkeley) 5/4/95";
#else
-__RCSID("$NetBSD: main.c,v 1.23 2010/03/29 03:51:55 dholland Exp $");
+__RCSID("$NetBSD: main.c,v 1.24 2010/03/29 04:28:47 dholland Exp $");
#endif
#endif /* not lint */
@@ -165,9 +165,11 @@ again:
#endif
if (inputfp == NULL && test == 0) {
- ask("black or white? ");
+ move(BSZ3, 0);
+ printw("Black moves first. ");
+ ask("(B)lack or (W)hite? ");
for (;;) {
- ch = getchar();
+ ch = get_key(NULL);
if (ch == 'b' || ch == 'B') {
color = BLACK;
break;
@@ -176,8 +178,11 @@ again:
color = WHITE;
break;
}
- move(BSZ3, 0);
- printw("Black moves first. Please enter `black' or `white'\n");
+ if (ch == 'q' || ch == 'Q') {
+ quit();
+ }
+ beep();
+ ask("Please choose (B)lack or (W)hite: ");
}
move(BSZ3, 0);
clrtoeol();
@@ -253,12 +258,12 @@ again:
case USER: /* input comes from standard input */
getinput:
if (interactive) {
- ask("move? ");
+ ask("Select move, (S)ave or (Q)uit.");
curmove = get_coord();
if (curmove == SAVE) {
FILE *fp;
- ask("save file name? ");
+ ask("Save file name? ");
(void)get_line(fname, sizeof(fname));
if ((fp = fopen(fname, "w")) == NULL) {
misclog("cannot create save file");
@@ -313,7 +318,7 @@ again:
addstr("Rats! you won");
break;
case TIE:
- addstr("Wow! its a tie");
+ addstr("Wow! It's a tie");
break;
case ILLEGAL:
addstr("Illegal move");
@@ -323,14 +328,14 @@ again:
bdisp();
if (i != RESIGN) {
replay:
- ask("replay? ");
- if (get_line(buf, sizeof(buf)) &&
- (buf[0] == 'y' || buf[0] == 'Y'))
+ ask("Play again? ");
+ ch = get_key("YyNnQqSs");
+ if (ch == 'Y' || ch == 'y')
goto again;
- if (strcmp(buf, "save") == 0) {
+ if (ch == 'S') {
FILE *fp;
- ask("save file name? ");
+ ask("Save file name? ");
(void)get_line(fname, sizeof(fname));
if ((fp = fopen(fname, "w")) == NULL) {
misclog("cannot create save file");
@@ -382,7 +387,7 @@ whatsup(int signum)
if (!interactive)
quit();
top:
- ask("cmd? ");
+ ask("debug command: ");
if (!get_line(input, sizeof(input)))
quit();
switch (*input) {