shithub: cflood

Download patch

ref: 1ddcc3285eb5ade62c7ce95c800c0665981e3361
parent: 47de140b5fbf8498bf8da6f43cbfd50227f04d7e
author: Sigrid Solveig Haflínudóttir <248148+ftrvxmtrx@users.noreply.github.com>
date: Sun Dec 16 19:18:41 EST 2012

games/cflood: custom size/turns; manual page

--- a/games/cflood.c
+++ b/games/cflood.c
@@ -7,6 +7,7 @@
 	Ssmall,
 	Snormal,
 	Slarge,
+	Scustom,
 
 	Tgame,
 	Twin,
@@ -20,9 +21,9 @@
 	ButtonSize = 32
 };
 
-const int sizes[] = {14, 21, 28};
-const int turns[] = {25, 35, 50};
-const ulong srccolors[NumColors] = {
+static int sizes[] = {14, 21, 28, 1};
+static int turns[] = {25, 35, 50, 1};
+static const ulong srccolors[NumColors] = {
 	0x6060a8ff,
 	0xf6f61dff,
 	0x46b0e0ff,
@@ -30,7 +31,7 @@
 	0xf070a0ff,
 	0xdc4a20ff
 };
-char *mstr[] = {
+static char *mstr[] = {
 	"14x14 / 25",
 	"25x25 / 35",
 	"28x28 / 50",
@@ -43,7 +44,7 @@
 static int type;
 static int wait4click;
 static int turnsleft;
-static uchar cells[28*28]; // enough for maximal size
+static uchar *cells; // enough for maximal size
 static Image *colors[NumColors];
 static Rectangle buttons[NumColors];
 
@@ -164,6 +165,11 @@
 	size = sizes[sid];
 	turnsleft = turns[sid];
 
+	if(cells == nil) {
+		int maxsize = size > sizes[Slarge] ? size : sizes[Slarge];
+		cells = malloc(maxsize*maxsize);
+	}
+
 	// randomize
 	uchar *c = &cells[0];
 	for(int i = 0; i < size*size; i++) {
@@ -183,7 +189,14 @@
 	redraw(screen);
 }
 
-void main(int, char**) {
+static void
+usage(void)
+{
+	fprint(2, "usage: cflood [-s size] [-t turns]\n");
+	exits("usage");
+}
+
+void main(int argc, char** argv) {
 	Menu menu;
 
 	if(initdraw(0, 0, "cflood") < 0)
@@ -199,6 +212,19 @@
 	srand(time(0));
 
 	sid = Snormal;
+	ARGBEGIN {
+	case 's':
+		sid = Scustom;
+		sizes[sid] = atoi(ARGF());
+		break;
+	case 't':
+		sid = Scustom;
+		turns[sid] = atoi(ARGF());
+		break;
+	default:
+		usage();
+	}ARGEND
+
 	newgame(sid);
 
 	for(int mold = 0;;) {
--- /dev/null
+++ b/games/cflood.man
@@ -1,0 +1,34 @@
+.TH CFLOOD 1
+.SH NAME
+cflood \- a timewaster
+.SH SYNOPSIS
+.B cflood
+[
+.I -s size
+]
+[
+.I -t turns
+]
+.SH DESCRIPTION
+.I cflood
+is a game in which player must fill an area with one color in limited number of turns.
+.PP
+The
+.B -s
+option sets the size of the area to
+.IR size
+x
+.IR size .
+.PP
+The
+.B -t
+option sets the number of
+.IR turns .
+.EE
+.PP
+There are three predefined area sizes in the game menu (invoked by button 3).
+.EE
+.SH SOURCE
+http://bitbucket.org/ftrvxmtrx/p9
+.SH BUGS
+Probably.
--- a/games/mkfile
+++ b/games/mkfile
@@ -1,7 +1,14 @@
 </$objtype/mkfile
+MAN=/sys/man/1
 
-TARG=cflood
-OFILES=cflood.$O
+TARG=\
+	cflood\
+
 BIN=/$objtype/bin
 
-</sys/src/cmd/mkone
+</sys/src/cmd/mkmany
+
+install: $MAN/cflood
+
+$MAN/cflood: cflood.man
+	cp cflood.man $MAN/cflood