X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/b832dece316930d89df04476c872cb967a95c7e5..4c76b7ec11ea4a4c4f121d6623ddec249e227899:/worm/worm.c diff --git a/worm/worm.c b/worm/worm.c index 67dfc20f..2c166128 100644 --- a/worm/worm.c +++ b/worm/worm.c @@ -1,4 +1,4 @@ -/* $NetBSD: worm.c,v 1.21 2001/08/30 10:49:50 jsm Exp $ */ +/* $NetBSD: worm.c,v 1.28 2008/08/08 16:10:47 drochner Exp $ */ /* * Copyright (c) 1980, 1993 @@ -12,11 +12,7 @@ * 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 + * 3. 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. * @@ -35,15 +31,15 @@ #include #ifndef lint -__COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\ - The Regents of the University of California. All rights reserved.\n"); +__COPYRIGHT("@(#) Copyright (c) 1980, 1993\ + The Regents of the University of California. All rights reserved."); #endif /* not lint */ #ifndef lint #if 0 static char sccsid[] = "@(#)worm.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: worm.c,v 1.21 2001/08/30 10:49:50 jsm Exp $"); +__RCSID("$NetBSD: worm.c,v 1.28 2008/08/08 16:10:47 drochner Exp $"); #endif #endif /* not lint */ @@ -80,20 +76,21 @@ int running = 0; int slow = 0; int score = 0; int start_len = LENGTH; +int visible_len; int lastch; char outbuf[BUFSIZ]; -void crash __P((void)) __attribute__((__noreturn__)); -void display __P((const struct body *, char)); -int main __P((int, char **)); -void leave __P((int)) __attribute__((__noreturn__)); -void life __P((void)); -void newpos __P((struct body *)); -void process __P((int)); -void prize __P((void)); -int rnd __P((int)); -void setup __P((void)); -void wake __P((int)); +void crash(void) __dead; +void display(const struct body *, char); +int main(int, char **); +void leave(int) __dead; +void life(void); +void newpos(struct body *); +void process(int); +void prize(void); +int rnd(int); +void setup(void); +void wake(int); int main(argc, argv) @@ -109,8 +106,9 @@ main(argc, argv) signal(SIGALRM, wake); signal(SIGINT, leave); signal(SIGQUIT, leave); - initscr(); - crmode(); + if (!initscr()) + errx(0, "couldn't initialize screen"); + cbreak(); noecho(); #ifdef KEY_LEFT keypad(stdscr, TRUE); @@ -189,6 +187,7 @@ life() } tail = np; tail->prev = NULL; + visible_len = start_len + 1; } void @@ -215,7 +214,7 @@ leave(dummy) void wake(dummy) - int dummy __attribute__((__unused__)); + int dummy __unused; { signal(SIGALRM, wake); fflush(stdout); @@ -233,6 +232,13 @@ void newpos(bp) struct body * bp; { + if (visible_len == (LINES-3) * (COLS-3) - 1) { + endwin(); + + printf("\nYou won!\n"); + printf("Your final score was %d\n\n", score); + exit(0); + } do { bp->y = rnd(LINES-3)+ 1; bp->x = rnd(COLS-3) + 1; @@ -310,6 +316,7 @@ process(ch) nh = tail->next; free(tail); tail = nh; + visible_len--; } else growing--; display(head, BODY); @@ -335,6 +342,7 @@ process(ch) nh->x = x; display(nh, HEAD); head = nh; + visible_len++; if (!(slow && running)) { wmove(tv, head->y, head->x);