Move ncurses test here (also nice game)
This commit is contained in:
parent
268e74f211
commit
fcd9a52b79
8
games/bs/Makefile
Normal file
8
games/bs/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
# $Id$
|
||||
|
||||
PROG= bs
|
||||
MAN6= bs.6
|
||||
DPADD= ${LIBNCURSES} ${LIBMYTINFO}
|
||||
LDADD= -lncurses -lmytinfo
|
||||
|
||||
.include <bsd.prog.mk>
|
42
games/bs/bs.6
Normal file
42
games/bs/bs.6
Normal file
@ -0,0 +1,42 @@
|
||||
.TH BATTLESHIPS 6 "Aug 23, 1989"
|
||||
.SH NAME
|
||||
bs \- battleships game
|
||||
.SH SYNOPSIS
|
||||
bs [ -b | -s ] [ -c ]
|
||||
.SH DESCRIPTION
|
||||
This program allows you to play the familiar Battleships game against the
|
||||
computer on a 10x10 board. The interface is visual and largely
|
||||
self-explanatory; you place your ships and pick your shots by moving the
|
||||
cursor around the `sea' with the rogue/hack motion keys hjklyubn.
|
||||
.PP
|
||||
Note that when selecting a ship to place, you must type the capital letter
|
||||
(these are, after all, capital ships). During ship placement, the `r' command
|
||||
may be used to ignore the current position and randomly place your currently
|
||||
selected ship. The `R' command will place all remaining ships randomly. The ^L
|
||||
command (form feed, ASCII 12) will force a screen redraw).
|
||||
.PP
|
||||
The command-line arguments control game modes.
|
||||
|
||||
.nf
|
||||
-b selects a `blitz' variant
|
||||
-s selects a `salvo' variant
|
||||
-c permits ships to be placed adjacently
|
||||
.fi
|
||||
|
||||
The `blitz' variant allows a side to shoot for as long as it continues to
|
||||
score hits.
|
||||
.PP
|
||||
The `salvo' game allows a player one shot per turn for each of his/her ships
|
||||
still afloat. This puts a premium scoring hits early and knocking out some
|
||||
ships and also makes much harder the situation where you face a superior force
|
||||
with only your PT-boat.
|
||||
.PP
|
||||
Normally, ships must be separated by at least one square of open water. The
|
||||
-c option disables this check and allows them to close-pack.
|
||||
.PP
|
||||
The algorithm the computer uses once it has found a ship to sink is provably
|
||||
optimal. The dispersion criterion for the random-fire algorithm may not be.
|
||||
.SH AUTHORS
|
||||
Originally written by one Bruce Holloway in 1986. Salvo mode added by Chuck A.
|
||||
DeGaul (cbosgd!cad). Visual user interface, `closepack' option, code rewrite
|
||||
and manual page by Eric S. Raymond <esr@snark.thyrsus.com> August 1989.
|
1252
games/bs/bs.c
Normal file
1252
games/bs/bs.c
Normal file
File diff suppressed because it is too large
Load Diff
8
games/gdc/Makefile
Normal file
8
games/gdc/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
# $Id$
|
||||
|
||||
PROG= gdc
|
||||
MAN6= gdc.6
|
||||
DPADD= ${LIBNCURSES} ${LIBMYTINFO}
|
||||
LDADD= -lncurses -lmytinfo
|
||||
|
||||
.include <bsd.prog.mk>
|
22
games/gdc/gdc.6
Normal file
22
games/gdc/gdc.6
Normal file
@ -0,0 +1,22 @@
|
||||
.TH GDC 6
|
||||
.SH NAME
|
||||
gdc \- grand digital clock (curses)
|
||||
.SH SYNOPSIS
|
||||
.B gdc
|
||||
[-s] [
|
||||
.I n
|
||||
]
|
||||
.SH DESCRIPTION
|
||||
.I Gdc
|
||||
runs a digital clock made of reverse-video blanks on a curses
|
||||
compatible VDU screen. With an optional numeric argument
|
||||
.I n
|
||||
it stops after
|
||||
.I n
|
||||
seconds (default never).
|
||||
The optional
|
||||
.B -s
|
||||
flag makes digits scroll as they change. In this curses mode implementation,
|
||||
the scrolling option has trouble keeping up.
|
||||
.SH AUTHOR
|
||||
Amos Shapir, modified for curses by John Lupien.
|
202
games/gdc/gdc.c
Normal file
202
games/gdc/gdc.c
Normal file
@ -0,0 +1,202 @@
|
||||
/*
|
||||
* Grand digital clock for curses compatible terminals
|
||||
* Usage: gdc [-s] [n] -- run for n seconds (default infinity)
|
||||
* Flags: -s: scroll
|
||||
*
|
||||
* modified 10-18-89 for curses (jrl)
|
||||
* 10-18-89 added signal handling
|
||||
*/
|
||||
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <ncurses.h>
|
||||
#include <stdlib.h>
|
||||
#ifndef NONPOSIX
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#define YBASE 10
|
||||
#define XBASE 10
|
||||
#define XLENGTH 58
|
||||
#define YDEPTH 7
|
||||
|
||||
/* it won't be */
|
||||
long now; /* yeah! */
|
||||
struct tm *tm;
|
||||
|
||||
short disp[11] = {
|
||||
075557, 011111, 071747, 071717, 055711,
|
||||
074717, 074757, 071111, 075757, 075717, 002020
|
||||
};
|
||||
long old[6], next[6], new[6], mask;
|
||||
char scrol;
|
||||
|
||||
int sigtermed=0;
|
||||
|
||||
int hascolor = 0;
|
||||
|
||||
void set(int, int);
|
||||
void standt(int);
|
||||
void movto(int, int);
|
||||
|
||||
void sighndl(signo)
|
||||
int signo;
|
||||
{
|
||||
sigtermed=signo;
|
||||
}
|
||||
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
long t, a;
|
||||
int i, j, s, k;
|
||||
int n = 0;
|
||||
|
||||
initscr();
|
||||
|
||||
signal(SIGINT,sighndl);
|
||||
signal(SIGTERM,sighndl);
|
||||
signal(SIGHUP,sighndl);
|
||||
|
||||
cbreak();
|
||||
noecho();
|
||||
|
||||
hascolor = has_colors();
|
||||
|
||||
if(hascolor) {
|
||||
start_color();
|
||||
init_pair(1, COLOR_BLACK, COLOR_RED);
|
||||
init_pair(2, COLOR_RED, COLOR_BLACK);
|
||||
init_pair(3, COLOR_WHITE, COLOR_BLACK);
|
||||
attrset(COLOR_PAIR(2));
|
||||
}
|
||||
|
||||
clear();
|
||||
refresh();
|
||||
while(--argc > 0) {
|
||||
if(**++argv == '-')
|
||||
scrol = 1;
|
||||
else
|
||||
n = atoi(*argv);
|
||||
}
|
||||
|
||||
if(hascolor) {
|
||||
attrset(COLOR_PAIR(3));
|
||||
|
||||
mvaddch(YBASE - 2, XBASE - 3, ACS_ULCORNER);
|
||||
hline(ACS_HLINE, XLENGTH);
|
||||
mvaddch(YBASE - 2, XBASE - 2 + XLENGTH, ACS_URCORNER);
|
||||
|
||||
mvaddch(YBASE + YDEPTH - 1, XBASE - 3, ACS_LLCORNER);
|
||||
hline(ACS_HLINE, XLENGTH);
|
||||
mvaddch(YBASE + YDEPTH - 1, XBASE - 2 + XLENGTH, ACS_LRCORNER);
|
||||
|
||||
move(YBASE - 1, XBASE - 3);
|
||||
vline(ACS_VLINE, YDEPTH);
|
||||
|
||||
move(YBASE - 1, XBASE - 2 + XLENGTH);
|
||||
vline(ACS_VLINE, YDEPTH);
|
||||
|
||||
attrset(COLOR_PAIR(2));
|
||||
}
|
||||
do {
|
||||
mask = 0;
|
||||
time(&now);
|
||||
tm = localtime(&now);
|
||||
set(tm->tm_sec%10, 0);
|
||||
set(tm->tm_sec/10, 4);
|
||||
set(tm->tm_min%10, 10);
|
||||
set(tm->tm_min/10, 14);
|
||||
set(tm->tm_hour%10, 20);
|
||||
set(tm->tm_hour/10, 24);
|
||||
set(10, 7);
|
||||
set(10, 17);
|
||||
for(k=0; k<6; k++) {
|
||||
if(scrol) {
|
||||
for(i=0; i<5; i++)
|
||||
new[i] = (new[i]&~mask) | (new[i+1]&mask);
|
||||
new[5] = (new[5]&~mask) | (next[k]&mask);
|
||||
} else
|
||||
new[k] = (new[k]&~mask) | (next[k]&mask);
|
||||
next[k] = 0;
|
||||
for(s=1; s>=0; s--) {
|
||||
standt(s);
|
||||
for(i=0; i<6; i++) {
|
||||
if((a = (new[i]^old[i])&(s ? new : old)[i]) != 0) {
|
||||
for(j=0,t=1<<26; t; t>>=1,j++) {
|
||||
if(a&t) {
|
||||
if(!(a&(t<<1))) {
|
||||
movto(YBASE + i, XBASE + 2*j);
|
||||
}
|
||||
addstr(" ");
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!s) {
|
||||
old[i] = new[i];
|
||||
}
|
||||
}
|
||||
if(!s) {
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
movto(6, 0);
|
||||
refresh();
|
||||
sleep(1);
|
||||
if (sigtermed) {
|
||||
standend();
|
||||
clear();
|
||||
refresh();
|
||||
endwin();
|
||||
fprintf(stderr, "gdc terminated by signal %d\n", sigtermed);
|
||||
exit(1);
|
||||
}
|
||||
} while(--n);
|
||||
standend();
|
||||
clear();
|
||||
refresh();
|
||||
endwin();
|
||||
return(0);
|
||||
}
|
||||
|
||||
void
|
||||
set(int t, int n)
|
||||
{
|
||||
int i, m;
|
||||
|
||||
m = 7<<n;
|
||||
for(i=0; i<5; i++) {
|
||||
next[i] |= ((disp[t]>>(4-i)*3)&07)<<n;
|
||||
mask |= (next[i]^old[i])&m;
|
||||
}
|
||||
if(mask&m)
|
||||
mask |= m;
|
||||
}
|
||||
|
||||
void
|
||||
standt(int on)
|
||||
{
|
||||
if (on) {
|
||||
if(hascolor) {
|
||||
attron(COLOR_PAIR(1));
|
||||
} else {
|
||||
attron(A_STANDOUT);
|
||||
}
|
||||
} else {
|
||||
if(hascolor) {
|
||||
attron(COLOR_PAIR(2));
|
||||
} else {
|
||||
attroff(A_STANDOUT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
movto(int line, int col)
|
||||
{
|
||||
move(line, col);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user