summaryrefslogtreecommitdiffstats
path: root/worm
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1999-10-26 06:35:49 +0000
committercgd <cgd@NetBSD.org>1999-10-26 06:35:49 +0000
commit29936b86526850aa49ea5459a24842e02f77a016 (patch)
treef1f3d3a2db8b8cf4ffac8e072937f40c118116e2 /worm
parent36a67d38f8e835f867ca232e5baa4965bf1fd405 (diff)
downloadbsdgames-darwin-29936b86526850aa49ea5459a24842e02f77a016.tar.gz
bsdgames-darwin-29936b86526850aa49ea5459a24842e02f77a016.tar.zst
bsdgames-darwin-29936b86526850aa49ea5459a24842e02f77a016.zip
support arrow keys.
Diffstat (limited to 'worm')
-rw-r--r--worm/worm.65
-rw-r--r--worm/worm.c54
2 files changed, 43 insertions, 16 deletions
diff --git a/worm/worm.6 b/worm/worm.6
index 4a117aaa..b496fd7b 100644
--- a/worm/worm.6
+++ b/worm/worm.6
@@ -1,4 +1,4 @@
-.\" $NetBSD: worm.6,v 1.5 1997/10/12 02:12:45 lukem Exp $
+.\" $NetBSD: worm.6,v 1.6 1999/10/26 06:35:49 cgd Exp $
.\"
.\" Copyright (c) 1989, 1993
.\" The Regents of the University of California. All rights reserved.
@@ -46,7 +46,8 @@
In
.Nm "" ,
you are a little worm, your body is the "o"'s on the screen
-and your head is the "@". You move with the hjkl keys (as in the game
+and your head is the "@". You move with the hjkl keys and the arrow
+keys (as in the game
snake). If you don't press any keys, you continue in the direction you
last moved. The upper case HJKL keys move you as if you had pressed
several (9 for HL and 5 for JK) of the corresponding lower case key
diff --git a/worm/worm.c b/worm/worm.c
index 588ce96b..25d84c3b 100644
--- a/worm/worm.c
+++ b/worm/worm.c
@@ -1,4 +1,4 @@
-/* $NetBSD: worm.c,v 1.16 1999/09/12 09:02:24 jsm Exp $ */
+/* $NetBSD: worm.c,v 1.17 1999/10/26 06:35:49 cgd Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0
static char sccsid[] = "@(#)worm.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: worm.c,v 1.16 1999/09/12 09:02:24 jsm Exp $");
+__RCSID("$NetBSD: worm.c,v 1.17 1999/10/26 06:35:49 cgd Exp $");
#endif
#endif /* not lint */
@@ -80,7 +80,7 @@ int running = 0;
int slow = 0;
int score = 0;
int start_len = LENGTH;
-char lastch;
+int lastch;
char outbuf[BUFSIZ];
void crash __P((void)) __attribute__((__noreturn__));
@@ -89,7 +89,7 @@ int main __P((int, char **));
void leave __P((int)) __attribute__((__noreturn__));
void life __P((void));
void newpos __P((struct body *));
-void process __P((char));
+void process __P((int));
void prize __P((void));
int rnd __P((int));
void setup __P((void));
@@ -100,7 +100,6 @@ main(argc, argv)
int argc;
char **argv;
{
- char ch;
/* Revoke setgid privileges */
setregid(getgid(), getgid());
@@ -117,6 +116,9 @@ main(argc, argv)
initscr();
crmode();
noecho();
+#ifdef KEY_LEFT
+ keypad(stdscr, TRUE);
+#endif
slow = (baudrate() <= 1200);
clear();
stw = newwin(1, COLS-1, 0, 0);
@@ -141,8 +143,7 @@ main(argc, argv)
else
{
fflush(stdout);
- if (read(0, &ch, 1) >= 0)
- process(ch);
+ process(getch());
}
}
}
@@ -237,7 +238,7 @@ prize()
void
process(ch)
- char ch;
+ int ch;
{
int x,y;
struct body *nh;
@@ -247,17 +248,42 @@ process(ch)
y = head->y;
switch(ch)
{
- case 'h': x--; break;
- case 'j': y++; break;
- case 'k': y--; break;
- case 'l': x++; break;
+#ifdef KEY_LEFT
+ case KEY_LEFT:
+#endif
+ case 'h':
+ x--; break;
+
+#ifdef KEY_DOWN
+ case KEY_DOWN:
+#endif
+ case 'j':
+ y++; break;
+
+#ifdef KEY_UP
+ case KEY_UP:
+#endif
+ case 'k':
+ y--; break;
+
+#ifdef KEY_RIGHT
+ case KEY_RIGHT:
+#endif
+ case 'l':
+ x++; break;
+
case 'H': x--; running = RUNLEN; ch = tolower(ch); break;
case 'J': y++; running = RUNLEN/2; ch = tolower(ch); break;
case 'K': y--; running = RUNLEN/2; ch = tolower(ch); break;
case 'L': x++; running = RUNLEN; ch = tolower(ch); break;
case '\f': setup(); return;
- case CNTRL('C'): crash(); return;
- case CNTRL('D'): crash(); return;
+
+ case ERR:
+ case CNTRL('C'):
+ case CNTRL('D'):
+ crash();
+ return;
+
default: if (! running) alarm(1);
return;
}