diff options
Diffstat (limited to 'games/hangman')
-rw-r--r-- | games/hangman/Makefile | 13 | ||||
-rw-r--r-- | games/hangman/endgame.c | 85 | ||||
-rw-r--r-- | games/hangman/extern.c | 74 | ||||
-rw-r--r-- | games/hangman/getguess.c | 108 | ||||
-rw-r--r-- | games/hangman/getword.c | 75 | ||||
-rw-r--r-- | games/hangman/hangman.6 | 50 | ||||
-rw-r--r-- | games/hangman/hangman.h | 79 | ||||
-rw-r--r-- | games/hangman/main.c | 75 | ||||
-rw-r--r-- | games/hangman/pathnames.h | 36 | ||||
-rw-r--r-- | games/hangman/playgame.c | 60 | ||||
-rw-r--r-- | games/hangman/prdata.c | 58 | ||||
-rw-r--r-- | games/hangman/prman.c | 55 | ||||
-rw-r--r-- | games/hangman/prword.c | 49 | ||||
-rw-r--r-- | games/hangman/setup.c | 72 |
14 files changed, 889 insertions, 0 deletions
diff --git a/games/hangman/Makefile b/games/hangman/Makefile new file mode 100644 index 000000000000..a546fa4adc78 --- /dev/null +++ b/games/hangman/Makefile @@ -0,0 +1,13 @@ +# @(#)Makefile 8.1 (Berkeley) 5/31/93 + +PROG= hangman +SRCS= endgame.c extern.c getguess.c getword.c main.c playgame.c \ + prdata.c prman.c prword.c setup.c +MAN6= hangman.6 +DPADD= ${LIBCURSES} ${LIBTERM} ${LIBCOMPAT} +LDADD= -lcurses -ltermlib -lcompat +HIDEGAME=hidegame + +.include <bsd.prog.mk> + + diff --git a/games/hangman/endgame.c b/games/hangman/endgame.c new file mode 100644 index 000000000000..193271e0acd3 --- /dev/null +++ b/games/hangman/endgame.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)endgame.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * endgame: + * Do what's necessary at the end of the game + */ +endgame() +{ + register char ch; + + prman(); + if (Errors >= MAXERRS) + Errors = MAXERRS + 2; + prword(); + prdata(); + move(MESGY, MESGX); + if (Errors > MAXERRS) + printw("Sorry, the word was \"%s\"\n", Word); + else + printw("You got it!\n"); + + for (;;) { + mvaddstr(MESGY + 1, MESGX, "Another word? "); + leaveok(stdscr, FALSE); + refresh(); + if ((ch = readch()) == 'n') + die(); + else if (ch == 'y') + break; + mvaddstr(MESGY + 2, MESGX, "Please type 'y' or 'n'"); + } + + leaveok(stdscr, TRUE); + move(MESGY, MESGX); + deleteln(); + deleteln(); + deleteln(); +} + + + + + + + + + + diff --git a/games/hangman/extern.c b/games/hangman/extern.c new file mode 100644 index 000000000000..ecc7155fdd87 --- /dev/null +++ b/games/hangman/extern.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)extern.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +bool Guessed[26]; + +char Word[BUFSIZ], + Known[BUFSIZ], + *Noose_pict[] = { + " ______", + " | |", + " |", + " |", + " |", + " |", + " __|_____", + " | |___", + " |_________|", + NULL + }; + +int Errors, + Wordnum = 0; + +double Average = 0.0; + +ERR_POS Err_pos[MAXERRS] = { + { 2, 10, 'O' }, + { 3, 10, '|' }, + { 4, 10, '|' }, + { 5, 9, '/' }, + { 3, 9, '/' }, + { 3, 11, '\\' }, + { 5, 11, '\\' } +}; + +FILE *Dict = NULL; + +off_t Dict_size; diff --git a/games/hangman/getguess.c b/games/hangman/getguess.c new file mode 100644 index 000000000000..091533e4ce6c --- /dev/null +++ b/games/hangman/getguess.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)getguess.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +#include <sys/ttydefaults.h> +#include "hangman.h" + +/* + * getguess: + * Get another guess + */ +getguess() +{ + register int i; + register int ch; + register bool correct; + + leaveok(stdscr, FALSE); + for (;;) { + move(PROMPTY, PROMPTX + sizeof "Guess: "); + refresh(); + ch = readch(); + if (isalpha(ch)) { + if (isupper(ch)) + ch = tolower(ch); + if (Guessed[ch - 'a']) + mvprintw(MESGY, MESGX, "Already guessed '%c'", ch); + else + break; + } + else if (ch == CTRL('D')) + die(); + else + mvprintw(MESGY, MESGX, "Not a valid guess: '%s'", + unctrl(ch)); + } + leaveok(stdscr, TRUE); + move(MESGY, MESGX); + clrtoeol(); + + Guessed[ch - 'a'] = TRUE; + correct = FALSE; + for (i = 0; Word[i] != '\0'; i++) + if (Word[i] == ch) { + Known[i] = ch; + correct = TRUE; + } + if (!correct) + Errors++; +} + +/* + * readch; + * Read a character from the input + */ +readch() +{ + register int cnt, r; + auto char ch; + + cnt = 0; + for (;;) { + if (read(0, &ch, sizeof ch) <= 0) + { + if (++cnt > 100) + die(); + } + else if (ch == CTRL('L')) { + wrefresh(curscr); + mvcur(0, 0, curscr->cury, curscr->curx); + } + else + return ch; + } +} diff --git a/games/hangman/getword.c b/games/hangman/getword.c new file mode 100644 index 000000000000..da339e4f0ae4 --- /dev/null +++ b/games/hangman/getword.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)getword.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +#include "hangman.h" +#include <stdlib.h> + +/* + * getword: + * Get a valid word out of the dictionary file + */ +getword() +{ + register FILE *inf; + register char *wp, *gp; + register long pos; + + inf = Dict; + for (;;) { + pos = (double)rand() / (RAND_MAX + 1.0) * (double)Dict_size; + fseek(inf, pos, 0); + if (fgets(Word, BUFSIZ, inf) == NULL) + continue; + if (fgets(Word, BUFSIZ, inf) == NULL) + continue; + Word[strlen(Word) - 1] = '\0'; + if (strlen(Word) < MINLEN) + continue; + for (wp = Word; *wp; wp++) + if (!islower(*wp)) + goto cont; + break; +cont: ; + } + gp = Known; + wp = Word; + while (*wp) { + *gp++ = '-'; + wp++; + } + *gp = '\0'; +} diff --git a/games/hangman/hangman.6 b/games/hangman/hangman.6 new file mode 100644 index 000000000000..26e466fd1f30 --- /dev/null +++ b/games/hangman/hangman.6 @@ -0,0 +1,50 @@ +.\" Copyright (c) 1983, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)hangman.6 8.1 (Berkeley) 5/31/93 +.\" +.TH HANGMAN 6 "May 31, 1993" +.UC 4 +.SH NAME +hangman \- the game of hangman +.SH SYNOPSIS +.B /usr/games/hangman +.SH DESCRIPTION +In +.I hangman, +the computer picks a word from the on-line word list +and you must try to guess it. +The computer keeps track of which letters have been guessed +and how many wrong guesses you have made on the screen in a graphic fashion. +.SH FILES +/usr/dict/words On-line word list +.SH AUTHOR +Ken Arnold diff --git a/games/hangman/hangman.h b/games/hangman/hangman.h new file mode 100644 index 000000000000..011c92bbb92f --- /dev/null +++ b/games/hangman/hangman.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)hangman.h 8.1 (Berkeley) 5/31/93 + */ + +# include <curses.h> +# include <sys/types.h> +# include <sys/stat.h> +# include <ctype.h> +# include <signal.h> +# include "pathnames.h" + +# define MINLEN 6 +# define MAXERRS 7 + +# define MESGY 12 +# define MESGX 0 +# define PROMPTY 11 +# define PROMPTX 0 +# define KNOWNY 10 +# define KNOWNX 1 +# define NUMBERY 4 +# define NUMBERX (COLS - 1 - 26) +# define AVGY 5 +# define AVGX (COLS - 1 - 26) +# define GUESSY 2 +# define GUESSX (COLS - 1 - 26) + + +typedef struct { + short y, x; + char ch; +} ERR_POS; + +extern bool Guessed[]; + +extern char Word[], Known[], *Noose_pict[]; + +extern int Errors, Wordnum; + +extern double Average; + +extern ERR_POS Err_pos[]; + +extern FILE *Dict; + +extern off_t Dict_size; + +void die(); diff --git a/games/hangman/main.c b/games/hangman/main.c new file mode 100644 index 000000000000..d66b160be1ec --- /dev/null +++ b/games/hangman/main.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char copyright[] = +"@(#) Copyright (c) 1983, 1993\n\ + The Regents of the University of California. All rights reserved.\n"; +#endif /* not lint */ + +#ifndef lint +static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * This game written by Ken Arnold. + */ +main() +{ + void die(); + + initscr(); + signal(SIGINT, die); + setup(); + for (;;) { + Wordnum++; + playgame(); + Average = (Average * (Wordnum - 1) + Errors) / Wordnum; + } + /* NOTREACHED */ +} + +/* + * die: + * Die properly. + */ +void +die() +{ + mvcur(0, COLS - 1, LINES - 1, 0); + endwin(); + putchar('\n'); + exit(0); +} diff --git a/games/hangman/pathnames.h b/games/hangman/pathnames.h new file mode 100644 index 000000000000..41a7846a531f --- /dev/null +++ b/games/hangman/pathnames.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)pathnames.h 8.1 (Berkeley) 5/31/93 + */ + +#define _PATH_DICT "/usr/share/dict/words" diff --git a/games/hangman/playgame.c b/games/hangman/playgame.c new file mode 100644 index 000000000000..6d54149400d7 --- /dev/null +++ b/games/hangman/playgame.c @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)playgame.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * playgame: + * play a game + */ +playgame() +{ + register bool *bp; + + getword(); + Errors = 0; + bp = Guessed; + while (bp < &Guessed[26]) + *bp++ = FALSE; + while (Errors < MAXERRS && index(Known, '-') != NULL) { + prword(); + prdata(); + prman(); + getguess(); + } + endgame(); +} diff --git a/games/hangman/prdata.c b/games/hangman/prdata.c new file mode 100644 index 000000000000..7757d4c1c0e3 --- /dev/null +++ b/games/hangman/prdata.c @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)prdata.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * prdata: + * Print out the current guesses + */ +prdata() +{ + register bool *bp; + + move(GUESSY, GUESSX + sizeof "Guessed: "); + bp = Guessed; + while (bp < &Guessed[26]) + if (*bp++) + addch((bp - Guessed) + 'a' - 1); + clrtoeol(); + mvprintw(NUMBERY, NUMBERX + sizeof "Word #: ", "%d", Wordnum); + mvprintw(AVGY, AVGX + sizeof "Current Average: ", "%.3f", + (Average * (Wordnum - 1) + Errors) / Wordnum); + mvprintw(AVGY + 1, AVGX + sizeof "Overall Average: ", "%.3f", Average); +} diff --git a/games/hangman/prman.c b/games/hangman/prman.c new file mode 100644 index 000000000000..2ba71b757a12 --- /dev/null +++ b/games/hangman/prman.c @@ -0,0 +1,55 @@ +/*- + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)prman.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * prman: + * Print out the man appropriately for the give number + * of incorrect guesses. + */ +prman() +{ + register int i; + + for (i = 0; i < Errors; i++) + mvaddch(Err_pos[i].y, Err_pos[i].x, Err_pos[i].ch); + while (i < MAXERRS) { + mvaddch(Err_pos[i].y, Err_pos[i].x, ' '); + i++; + } +} diff --git a/games/hangman/prword.c b/games/hangman/prword.c new file mode 100644 index 000000000000..a24cea6f72a9 --- /dev/null +++ b/games/hangman/prword.c @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)prword.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * prword: + * Print out the current state of the word + */ +prword() +{ + move(KNOWNY, KNOWNX + sizeof "Word: "); + addstr(Known); + clrtoeol(); +} diff --git a/games/hangman/setup.c b/games/hangman/setup.c new file mode 100644 index 000000000000..d82e74714d0f --- /dev/null +++ b/games/hangman/setup.c @@ -0,0 +1,72 @@ +/*- + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char sccsid[] = "@(#)setup.c 8.1 (Berkeley) 5/31/93"; +#endif /* not lint */ + +# include "hangman.h" + +/* + * setup: + * Set up the strings on the screen. + */ +setup() +{ + register char **sp; + static struct stat sbuf; + + noecho(); + crmode(); + + mvaddstr(PROMPTY, PROMPTX, "Guess:"); + mvaddstr(GUESSY, GUESSX, "Guessed:"); + mvaddstr(NUMBERY, NUMBERX, "Word #:"); + mvaddstr(AVGY, AVGX, "Current Average:"); + mvaddstr(AVGY + 1, AVGX, "Overall Average:"); + mvaddstr(KNOWNY, KNOWNX, "Word: "); + + for (sp = Noose_pict; *sp != NULL; sp++) { + move(sp - Noose_pict, 0); + addstr(*sp); + } + + srand(time(NULL) + getpid()); + if ((Dict = fopen(_PATH_DICT, "r")) == NULL) { + perror(_PATH_DICT); + endwin(); + exit(1); + } + fstat(fileno(Dict), &sbuf); + Dict_size = sbuf.st_size; +} |