diff options
author | rodri <rgl@antares-labs.eu> | 2023-10-07 17:17:30 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2023-10-07 17:17:30 +0000 |
commit | 353cbde75a19b004ab0c5339684f33ea47ef1244 (patch) | |
tree | 0739eb09e33959e144eba0c160ad6d35e4b6300a /util.c | |
parent | f0c1d251cbf8bc1213c192fc3afcc0fe566bafb5 (diff) | |
download | battleship-353cbde75a19b004ab0c5339684f33ea47ef1244.tar.gz battleship-353cbde75a19b004ab0c5339684f33ea47ef1244.tar.bz2 battleship-353cbde75a19b004ab0c5339684f33ea47ef1244.zip |
use a better random source. fix a bug with andys generating oob cell coordinates.
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 28 |
1 files changed, 26 insertions, 2 deletions
@@ -1,5 +1,7 @@ #include <u.h> #include <libc.h> +#include <mp.h> +#include <libsec.h> #include <thread.h> #include <draw.h> #include <mouse.h> @@ -33,13 +35,19 @@ static char *statenametab[] = { }; +int +isoob(Point2 cell) +{ + return cell.x < 0 || cell.x >= MAPW || + cell.y < 0 || cell.y >= MAPH; +} + char * cell2coords(Point2 cell) { static char s[3+1]; - assert(cell.x >= 0 && cell.x < MAPW - && cell.y >= 0 && cell.y < MAPH); + assert(!isoob(cell)); snprint(s, sizeof s, "%c%d", rowtab[(int)cell.y], (int)cell.x); return s; @@ -72,6 +80,7 @@ gettile(Map *m, Point2 cell) void settile(Map *m, Point2 cell, int type) { + assert(!isoob(cell)); m->map[(int)cell.x][(int)cell.y] = type; } @@ -84,6 +93,7 @@ settiles(Map *m, Point2 cell, int o, int ncells, int type) sv = o == OH? Vec2(1,0): Vec2(0,1); while(ncells-- > 0){ + assert(!isoob(cell)); settile(m, cell, type); cell = addpt2(cell, sv); } @@ -211,3 +221,17 @@ chanvprint(Channel *c, char *fmt, va_list arg) yield(); /* let recipient handle message immediately */ return n; } + +ulong +getrand(ulong max) +{ + mpint *n, *r; + ulong c; + + n = uitomp(max, nil); + r = mpnrand(n, genrandom, nil); + c = mptoui(r); + mpfree(n); + mpfree(r); + return c; +} |