From 02c60ff9fc0555ec4b69409ff2d0be522ff67ee7 Mon Sep 17 00:00:00 2001 From: dholland Date: Mon, 29 Mar 2010 04:28:47 +0000 Subject: Some improvements to the new UI. --- gomoku/bdisp.c | 26 +++++++++++++++++++++++--- gomoku/gomoku.h | 3 ++- gomoku/main.c | 35 ++++++++++++++++++++--------------- 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 */ @@ -260,6 +260,24 @@ ask(const char *str) refresh(); } +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) { @@ -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) { -- cgit v1.2.3-56-ge451