summaryrefslogtreecommitdiffstats
path: root/mbbsd/gomo1.c
diff options
context:
space:
mode:
Diffstat (limited to 'mbbsd/gomo1.c')
-rw-r--r--mbbsd/gomo1.c108
1 files changed, 59 insertions, 49 deletions
diff --git a/mbbsd/gomo1.c b/mbbsd/gomo1.c
index c741f538..462ceb47 100644
--- a/mbbsd/gomo1.c
+++ b/mbbsd/gomo1.c
@@ -1,87 +1,95 @@
-/* $Id: gomo1.c,v 1.2 2002/06/04 13:08:33 in2 Exp $ */
+/* $Id: gomo1.c,v 1.3 2002/07/05 17:10:27 in2 Exp $ */
#include "bbs.h"
#define QCAST int (*)(const void *, const void *)
/* pattern and advance map */
-static int intrevcmp(const void *a, const void *b) {
+static int
+intrevcmp(const void *a, const void *b)
+{
return (*(int *)b - *(int *)a);
}
/* x,y: 0..BRDSIZ-1 ; color: CBLACK,CWHITE ; dx,dy: -1,0,+1 */
-static int gomo_getindex(int x, int y, int color, int dx, int dy) {
- int i, k, n;
- for(n = -1, i = 0, k = 1; i < 5; i++, k <<= 1) {
+static int
+gomo_getindex(int x, int y, int color, int dx, int dy)
+{
+ int i, k, n;
+ for (n = -1, i = 0, k = 1; i < 5; i++, k <<= 1) {
x += dx;
y += dy;
-
- if((x < 0) || (x >= BRDSIZ) || ( y < 0) || ( y >= BRDSIZ)) {
+
+ if ((x < 0) || (x >= BRDSIZ) || (y < 0) || (y >= BRDSIZ)) {
n += k;
break;
- } else if(ku[x][y] != BBLANK) {
+ } else if (ku[x][y] != BBLANK) {
n += k;
- if(ku[x][y] != color)
+ if (ku[x][y] != color)
break;
}
}
-
- if(i >= 5)
+
+ if (i >= 5)
n += k;
return n;
}
-int chkwin(int style, int limit) {
- if(style == 0x0c)
- return 1 /* style */;
- else if(limit == 0) {
- if(style == 0x0b)
- return 1 /* style */;
+int
+chkwin(int style, int limit)
+{
+ if (style == 0x0c)
+ return 1 /* style */ ;
+ else if (limit == 0) {
+ if (style == 0x0b)
+ return 1 /* style */ ;
return 0;
}
- if((style < 0x0c) && (style > 0x07))
- return -1 /* -style */;
+ if ((style < 0x0c) && (style > 0x07))
+ return -1 /* -style */ ;
return 0;
}
/* x,y: 0..BRDSIZ-1 ; color: CBLACK,CWHITE ; limit:1,0 ; dx,dy: 0,1 */
-static int dirchk(int x, int y, int color, int limit, int dx, int dy) {
- int le, ri, loc, style = 0;
+static int
+dirchk(int x, int y, int color, int limit, int dx, int dy)
+{
+ int le, ri, loc, style = 0;
le = gomo_getindex(x, y, color, -dx, -dy);
- ri = gomo_getindex(x, y, color, dx, dy);
+ ri = gomo_getindex(x, y, color, dx, dy);
loc = (le > ri) ? (((le * (le + 1)) >> 1) + ri) :
(((ri * (ri + 1)) >> 1) + le);
-
+
style = pat[loc];
-
- if(limit == 0)
+
+ if (limit == 0)
return (style & 0x0f);
style >>= 4;
-
- if((style == 3) || (style == 2)) {
- int i, n = 0, tmp, nx, ny;
-
+
+ if ((style == 3) || (style == 2)) {
+ int i, n = 0, tmp, nx, ny;
+
n = adv[loc >> 1];
-
+
((loc & 1) == 0) ? (n >>= 4) : (n &= 0x0f);
-
+
ku[x][y] = color;
-
- for(i = 0; i < 2; i++) {
- if((tmp = (i == 0) ? (-(n >> 2)):(n & 3)) != 0) {
+
+ for (i = 0; i < 2; i++) {
+ if ((tmp = (i == 0) ? (-(n >> 2)) : (n & 3)) != 0) {
nx = x + (le > ri ? 1 : -1) * tmp * dx;
ny = y + (le > ri ? 1 : -1) * tmp * dy;
-
- if((dirchk(nx, ny, color, 0, dx, dy) == 0x06) &&
- (chkwin(getstyle(nx, ny, color, limit), limit) >= 0))
+
+ if ((dirchk(nx, ny, color, 0, dx, dy) == 0x06) &&
+ (chkwin(getstyle(nx, ny, color, limit), limit) >= 0))
break;
}
}
- if(i >= 2)
+ if (i >= 2)
style = 0;
ku[x][y] = BBLANK;
}
@@ -92,26 +100,28 @@ static int dirchk(int x, int y, int color, int limit, int dx, int dy) {
/* 四三=7 活四=6 斷四=5 死四=4 活三=3 斷三=2 保留=1 無效=0 */
/* x,y: 0..BRDSIZ-1 ; color: CBLACK,CWHITE ; limit: 1,0 */
-int getstyle(int x, int y, int color, int limit) {
- int i, j, dir[4], style;
+int
+getstyle(int x, int y, int color, int limit)
+{
+ int i, j, dir[4], style;
- if((x < 0) || (x >= BRDSIZ) || ( y < 0) || (y >= BRDSIZ))
+ if ((x < 0) || (x >= BRDSIZ) || (y < 0) || (y >= BRDSIZ))
return 0x0f;
- if(ku[x][y] != BBLANK)
+ if (ku[x][y] != BBLANK)
return 0x0d;
- for(i = 0; i < 4; i++)
- dir[i] = dirchk(x, y, color, limit, i ? (i>>1) : -1, i ? (i&1) : 1);
+ for (i = 0; i < 4; i++)
+ dir[i] = dirchk(x, y, color, limit, i ? (i >> 1) : -1, i ? (i & 1) : 1);
qsort(dir, 4, sizeof(int), (QCAST)intrevcmp);
- if((style = dir[0]) >= 2) {
- for(i = 1, j = 6 + (limit ? 1 : 0); i < 4; i++) {
- if((style > j) || (dir[i] < 2))
+ if ((style = dir[0]) >= 2) {
+ for (i = 1, j = 6 + (limit ? 1 : 0); i < 4; i++) {
+ if ((style > j) || (dir[i] < 2))
break;
- if(dir[i] > 3)
+ if (dir[i] > 3)
style = 9;
- else if((style < 7) && (style > 3))
+ else if ((style < 7) && (style > 3))
style = 7;
else
style = 8;