add a 'down' key to tetris, defaulting to 'n'. it move the block down
a line, if it fits. like most other tetris games have. minor clean up of magic number usage while here.
This commit is contained in:
parent
31fb02278a
commit
2343aabb74
@ -1,4 +1,4 @@
|
||||
.\" $NetBSD: tetris.6,v 1.14 2014/07/15 16:17:15 wiz Exp $
|
||||
.\" $NetBSD: tetris.6,v 1.15 2015/02/19 02:27:30 mrg Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1992, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
@ -32,7 +32,7 @@
|
||||
.\"
|
||||
.\" @(#)tetris.6 8.1 (Berkeley) 5/31/93
|
||||
.\"
|
||||
.Dd July 13, 2014
|
||||
.Dd February 18, 2015
|
||||
.Dt TETRIS 6
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -69,6 +69,8 @@ drop
|
||||
pause
|
||||
.It q
|
||||
quit
|
||||
.It n
|
||||
down
|
||||
.El
|
||||
.Pp
|
||||
The options are as follows:
|
||||
@ -84,11 +86,11 @@ The default control keys can be changed using the
|
||||
option.
|
||||
The
|
||||
.Ar keys
|
||||
argument must have the six keys in order, and, remember to quote any
|
||||
argument must have the seven keys in order, and, remember to quote any
|
||||
space or tab characters from the shell.
|
||||
For example:
|
||||
.sp
|
||||
.Dl "tetris -l 2 -k 'jkl pq'"
|
||||
.Dl "tetris -l 2 -k 'jkl pqn'"
|
||||
.sp
|
||||
will play the default games, i.e. level 2 and with the default
|
||||
control keys.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: tetris.c,v 1.27 2014/07/13 17:38:38 pgoyette Exp $ */
|
||||
/* $NetBSD: tetris.c,v 1.28 2015/02/19 02:27:30 mrg Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
@ -130,7 +130,8 @@ main(int argc, char *argv[])
|
||||
int pos, c;
|
||||
const char *keys;
|
||||
int level = 2;
|
||||
char key_write[6][10];
|
||||
#define NUMKEYS 7
|
||||
char key_write[NUMKEYS][10];
|
||||
int ch, i, j;
|
||||
int fd;
|
||||
|
||||
@ -143,7 +144,7 @@ main(int argc, char *argv[])
|
||||
exit(1);
|
||||
close(fd);
|
||||
|
||||
keys = "jkl pq";
|
||||
keys = "jkl pqn";
|
||||
|
||||
while ((ch = getopt(argc, argv, "bk:l:ps")) != -1)
|
||||
switch(ch) {
|
||||
@ -151,7 +152,7 @@ main(int argc, char *argv[])
|
||||
nocolor = 1;
|
||||
break;
|
||||
case 'k':
|
||||
if (strlen(keys = optarg) != 6)
|
||||
if (strlen(keys = optarg) != NUMKEYS)
|
||||
usage();
|
||||
break;
|
||||
case 'l':
|
||||
@ -180,8 +181,8 @@ main(int argc, char *argv[])
|
||||
|
||||
fallrate = 1000000 / level;
|
||||
|
||||
for (i = 0; i <= 5; i++) {
|
||||
for (j = i+1; j <= 5; j++) {
|
||||
for (i = 0; i <= (NUMKEYS-1); i++) {
|
||||
for (j = i+1; j <= (NUMKEYS-1); j++) {
|
||||
if (keys[i] == keys[j]) {
|
||||
errx(1, "duplicate command keys specified.");
|
||||
}
|
||||
@ -195,9 +196,9 @@ main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
snprintf(key_msg, sizeof(key_msg),
|
||||
"%s - left %s - rotate %s - right %s - drop %s - pause %s - quit",
|
||||
"%s - left %s - rotate %s - right %s - drop %s - pause %s - quit %s - down",
|
||||
key_write[0], key_write[1], key_write[2], key_write[3],
|
||||
key_write[4], key_write[5]);
|
||||
key_write[4], key_write[5], key_write[6]);
|
||||
|
||||
(void)signal(SIGINT, onintr);
|
||||
scr_init();
|
||||
@ -297,6 +298,14 @@ main(int argc, char *argv[])
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c == keys[6]) {
|
||||
/* move down */
|
||||
if (fits_in(curshape, pos + B_COLS)) {
|
||||
pos += B_COLS;
|
||||
score++;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c == '\f') {
|
||||
scr_clear();
|
||||
scr_msg(key_msg, 1);
|
||||
|
Loading…
Reference in New Issue
Block a user