ref: ea2033bc08e7a9b5ab4e8afe0609a61fa4ff098c
parent: 8d4482800b46dbcdb67d49d9ba35bf0a03aa205c
author: Sigrid Solveig Haflínudóttir <248148+ftrvxmtrx@users.noreply.github.com>
date: Thu Dec 13 13:29:30 EST 2012
remove garbage
--- a/games/cflood.c
+++ b/games/cflood.c
@@ -1,205 +1,205 @@
-#include <u.h>
-#include <libc.h>
-#include <draw.h>
-#include <event.h>
-
-enum {
- Ssmall,
- Snormal,
- Slarge,
-
- Flood = 1<<7,
- ColorMask = 0x0f,
-
- NumColors = 6,
-
- ButtonSize = 32
-};
-
-const int sizes[] = {14, 21, 28};
-const int turns[] = {25, 35, 50};
-const ulong srccolors[NumColors] = {
- 0x6060a8ff,
- 0xf6f61dff,
- 0x46b0e0ff,
- 0x7ea020ff,
- 0xf070a0ff,
- 0xdc4a20ff
-};
-char *mstr[] = {
- "14x14 / 25",
- "25x25 / 35",
- "28x28 / 50",
- "exit",
- 0
-};
-
-static int size;
-static int wait4click;
-static int turnsleft;
-static uchar cells[28*28]; // enough for maximal size
-static Image *colors[NumColors];
-static Rectangle buttons[NumColors];
-
-static void
-floodneighbours(uchar color, int x, int y);
-
-static void
-redraw(Image *screen) {
- Rectangle r = screen->r;
- draw(screen, r, display->white, nil, ZP);
-
- const uchar *cell = &cells[0];
- int w = Dx(r), h = Dy(r) - ButtonSize - 2;
- int c = (w < h ? w : h) / size;
- w = c*size;
-
- // cells
- for(int x = r.min.x; x < r.min.x+size*c; x+=c) {
- for(int y = r.min.y; y < r.min.y+size*c; y+=c) {
- Rectangle r = Rect(x, y, x+c, y+c);
- draw(screen, r, colors[*cell & ColorMask], nil, ZP);
- cell++;
- }
- }
-
- // buttons
- int startx = r.min.x + (w/2) - NumColors*ButtonSize/2;
- int y = r.min.y + h;
- for(int i = 0, x = startx; i < NumColors; i++, x += ButtonSize) {
- buttons[i] = Rect(x, y, x+ButtonSize, y+ButtonSize);
- draw(screen, buttons[i], colors[i], nil, ZP);
- }
-
- flushimage(display, 1);
-}
-
-static void
-floodrecurse(uchar color, int x, int y) {
- uchar *c = &cells[x + y*size];
- if((*c & Flood) == 0 && (*c & ColorMask) == color) {
- *c = color | Flood;
- floodneighbours(color, x, y);
- }
-}
-
-static void
-floodneighbours(uchar color, int x, int y) {
- cells[x + y*size] = color | Flood;
-
- if(x > 0)
- floodrecurse(color, x-1, y);
- if(x < size-1)
- floodrecurse(color, x+1, y);
- if(y > 0)
- floodrecurse(color, x, y-1);
- if(y < size-1)
- floodrecurse(color, x, y+1);
-}
-
-static int
-reflood(uchar color) {
- color &= ColorMask;
-
- int n = 0;
- for(int x = 0; x < size; x++)
- for(int y = 0; y < size; y++)
- if(cells[x + y*size] & Flood) {
- floodneighbours(color, x, y);
- n++;
- }
- return n;
-}
-
-static void
-flood(uchar color) {
- if((cells[0] & Flood) != 0 && (cells[0] & ColorMask) == color)
- return;
-
- if(!turnsleft)
- return;
-
- int n = reflood(color);
- redraw(screen);
-
- if(n == size*size) {
- // win
- wait4click = 1;
- } else if(--turnsleft == 0) {
- // fail
- wait4click = 1;
- }
-}
-
-static void
-newgame(int sid) {
- size = sizes[sid];
- turnsleft = turns[sid];
-
- // randomize
- uchar *c = &cells[0];
- for(int i = 0; i < size*size; i++) {
- *c++ = nrand(NumColors);
- }
-
- cells[0] |= Flood;
- reflood(cells[0]);
- redraw(screen);
-}
-
-void
-eresized(int new)
-{
- if(new && getwindow(display, Refnone) < 0)
- fprint(2, "can't reattach to window");
- redraw(screen);
-}
-
-void main(int, char**) {
- Menu menu;
-
- if(initdraw(0, 0, "cflood") < 0)
- sysfatal("initdraw failed");
-
- Rectangle r = Rect(0, 0, 1, 1);
- for(int i = 0; i < NumColors; i++) {
- colors[i] = allocimage(display, r, CMAP8, 1, srccolors[i]);
- }
-
- einit(Emouse);
- menu.item = mstr;
- menu.lasthit = 0;
- srand(time(0));
-
- int sid = Snormal;
- newgame(sid);
-
- for(int mold = 0;;) {
- Event e;
- int key = event(&e);
- Mouse m = e.mouse;
-
- if(key != Emouse)
- continue;
-
- if(m.buttons & 4) {
- int p = emenuhit(3, &m, &menu);
- if(p >= Ssmall && p <= Slarge)
- newgame(sid = p);
- else if(p > 0)
- break;
- } else if(wait4click && !mold && m.buttons != mold) {
- wait4click = 0;
- newgame(sid);
- } else if(m.buttons & 1) {
- for(int i = 0; i < NumColors; i++) {
- if(ptinrect(m.xy, buttons[i])) {
- flood(i);
- break;
- }
- }
- }
-
- mold = m.buttons;
- }
-}
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <event.h>
+
+enum {
+ Ssmall,
+ Snormal,
+ Slarge,
+
+ Flood = 1<<7,
+ ColorMask = 0x0f,
+
+ NumColors = 6,
+
+ ButtonSize = 32
+};
+
+const int sizes[] = {14, 21, 28};
+const int turns[] = {25, 35, 50};
+const ulong srccolors[NumColors] = {
+ 0x6060a8ff,
+ 0xf6f61dff,
+ 0x46b0e0ff,
+ 0x7ea020ff,
+ 0xf070a0ff,
+ 0xdc4a20ff
+};
+char *mstr[] = {
+ "14x14 / 25",
+ "25x25 / 35",
+ "28x28 / 50",
+ "exit",
+ 0
+};
+
+static int size;
+static int wait4click;
+static int turnsleft;
+static uchar cells[28*28]; // enough for maximal size
+static Image *colors[NumColors];
+static Rectangle buttons[NumColors];
+
+static void
+floodneighbours(uchar color, int x, int y);
+
+static void
+redraw(Image *screen) {
+ Rectangle r = screen->r;
+ draw(screen, r, display->white, nil, ZP);
+
+ const uchar *cell = &cells[0];
+ int w = Dx(r), h = Dy(r) - ButtonSize - 2;
+ int c = (w < h ? w : h) / size;
+ w = c*size;
+
+ // cells
+ for(int x = r.min.x; x < r.min.x+size*c; x+=c) {
+ for(int y = r.min.y; y < r.min.y+size*c; y+=c) {
+ Rectangle r = Rect(x, y, x+c, y+c);
+ draw(screen, r, colors[*cell & ColorMask], nil, ZP);
+ cell++;
+ }
+ }
+
+ // buttons
+ int startx = r.min.x + (w/2) - NumColors*ButtonSize/2;
+ int y = r.min.y + h;
+ for(int i = 0, x = startx; i < NumColors; i++, x += ButtonSize) {
+ buttons[i] = Rect(x, y, x+ButtonSize, y+ButtonSize);
+ draw(screen, buttons[i], colors[i], nil, ZP);
+ }
+
+ flushimage(display, 1);
+}
+
+static void
+floodrecurse(uchar color, int x, int y) {
+ uchar *c = &cells[x + y*size];
+ if((*c & Flood) == 0 && (*c & ColorMask) == color) {
+ *c = color | Flood;
+ floodneighbours(color, x, y);
+ }
+}
+
+static void
+floodneighbours(uchar color, int x, int y) {
+ cells[x + y*size] = color | Flood;
+
+ if(x > 0)
+ floodrecurse(color, x-1, y);
+ if(x < size-1)
+ floodrecurse(color, x+1, y);
+ if(y > 0)
+ floodrecurse(color, x, y-1);
+ if(y < size-1)
+ floodrecurse(color, x, y+1);
+}
+
+static int
+reflood(uchar color) {
+ color &= ColorMask;
+
+ int n = 0;
+ for(int x = 0; x < size; x++)
+ for(int y = 0; y < size; y++)
+ if(cells[x + y*size] & Flood) {
+ floodneighbours(color, x, y);
+ n++;
+ }
+ return n;
+}
+
+static void
+flood(uchar color) {
+ if((cells[0] & Flood) != 0 && (cells[0] & ColorMask) == color)
+ return;
+
+ if(!turnsleft)
+ return;
+
+ int n = reflood(color);
+ redraw(screen);
+
+ if(n == size*size) {
+ // win
+ wait4click = 1;
+ } else if(--turnsleft == 0) {
+ // fail
+ wait4click = 1;
+ }
+}
+
+static void
+newgame(int sid) {
+ size = sizes[sid];
+ turnsleft = turns[sid];
+
+ // randomize
+ uchar *c = &cells[0];
+ for(int i = 0; i < size*size; i++) {
+ *c++ = nrand(NumColors);
+ }
+
+ cells[0] |= Flood;
+ reflood(cells[0]);
+ redraw(screen);
+}
+
+void
+eresized(int new)
+{
+ if(new && getwindow(display, Refnone) < 0)
+ fprint(2, "can't reattach to window");
+ redraw(screen);
+}
+
+void main(int, char**) {
+ Menu menu;
+
+ if(initdraw(0, 0, "cflood") < 0)
+ sysfatal("initdraw failed");
+
+ Rectangle r = Rect(0, 0, 1, 1);
+ for(int i = 0; i < NumColors; i++) {
+ colors[i] = allocimage(display, r, CMAP8, 1, srccolors[i]);
+ }
+
+ einit(Emouse);
+ menu.item = mstr;
+ menu.lasthit = 0;
+ srand(time(0));
+
+ int sid = Snormal;
+ newgame(sid);
+
+ for(int mold = 0;;) {
+ Event e;
+ int key = event(&e);
+ Mouse m = e.mouse;
+
+ if(key != Emouse)
+ continue;
+
+ if(m.buttons & 4) {
+ int p = emenuhit(3, &m, &menu);
+ if(p >= Ssmall && p <= Slarge)
+ newgame(sid = p);
+ else if(p > 0)
+ break;
+ } else if(wait4click && !mold && m.buttons != mold) {
+ wait4click = 0;
+ newgame(sid);
+ } else if(m.buttons & 1) {
+ for(int i = 0; i < NumColors; i++) {
+ if(ptinrect(m.xy, buttons[i])) {
+ flood(i);
+ break;
+ }
+ }
+ }
+
+ mold = m.buttons;
+ }
+}
--- a/games/mkfile
+++ b/games/mkfile
@@ -1,7 +1,7 @@
-</$objtype/mkfile
-
-TARG=cflood
-OFILES=cflood.$O
-BIN=/$objtype/bin
-
-</sys/src/cmd/mkone
+</$objtype/mkfile
+
+TARG=cflood
+OFILES=cflood.$O
+BIN=/$objtype/bin
+
+</sys/src/cmd/mkone