summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/games/go/goplayutils.c2
-rw-r--r--noncore/games/go/killable.c4
2 files changed, 3 insertions, 3 deletions
diff --git a/noncore/games/go/goplayutils.c b/noncore/games/go/goplayutils.c
index 9e2ce4c..91c6db2 100644
--- a/noncore/games/go/goplayutils.c
+++ b/noncore/games/go/goplayutils.c
@@ -871,97 +871,97 @@ short gx, gy, *savex, *savey;
while ((j < dList.indx) &&
(i < maxSPoint))
{
j = j + 1;
i = i + 1;
libList[i] = 100;
plist3.p[i].px = dList.p[j].px;
plist3.p[i].py = dList.p[j].py;
}
plist3.indx = i;
}
if (plist3.indx > 1) /* sort by decreasing lib count */
{
for (i = 1; i <= plist3.indx; i++)
if (libList[i] != 100)
{
mark2 = playMark;
tryPlay(plist3.p[i].px, plist3.p[i].py, me);
libList[i] = gList[gMap[groupIDs[gx][gy]]].libC;
if (libList[i] > treeLibLim) /* i'm safe */
{
*savex = plist3.p[i].px;
*savey = plist3.p[i].py;
result = TRUE;
goto one;
}
undoTo(mark2);
}
for (i = 1; i <= plist3.indx - 1; i++)
for (j = i + 1; j <= plist3.indx; j++)
if (libList[i] < libList[j])
{
tl = libList[i];
libList[i] = libList[j];
libList[j] = tl;
tp = plist3.p[i];
plist3.p[i] = plist3.p[j];
plist3.p[j] = tp;
}
}
for (i = 1; i <= plist3.indx; i++)
{
*savex = plist3.p[i].px;
*savey = plist3.p[i].py;
if (legal[*savex][*savey])
{
smark = playMark;
tryPlay(*savex, *savey, me);
- pause();
+//pause();
if (gList[gMap[groupIDs[*savex][*savey]]].libC > 1)
if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim)
{
restoreState();
/* sClearChar(sChar, rXor); */
return TRUE;
}
else if (gList[gMap[groupIDs[gx][gy]]].libC > 1)
if (! killable(gx, gy, &gx1, &gx2))
{
restoreState();
/* sClearChar(sChar, rXor); */
return TRUE;
}
undoTo(smark);
}
}
result = FALSE;
one:
restoreState();
/* sClearChar(sChar, rXor); */
return result;
} /* saveable */
/*
marks unsavable groups as dead
*/
markDead()
{ /* markDead */
short i, j, gx, gy, result;
#ifdef DEBUG
printf( "markDead\n" );
#endif
for (i = 1; i <= maxGroupID; i++)
if (killable(gList[i].lx, gList[i].ly, &gx, &gy))
result = ! saveable(gList[i].lx, gList[i].ly, &gx, &gy);
else
result = FALSE;
for (i = 0; i <= maxPoint; i++)
for (j = 0; j <= maxPoint; j++)
if (bord[i][j] == 0)
ndbord[i][j] = 0;
else if (gList[groupIDs[i][j]].isDead)
ndbord[i][j] = 0;
else
ndbord[i][j] = bord[i][j];
} /* markDead */
diff --git a/noncore/games/go/killable.c b/noncore/games/go/killable.c
index 3ed2d2e..23a133d 100644
--- a/noncore/games/go/killable.c
+++ b/noncore/games/go/killable.c
@@ -17,187 +17,187 @@ extern pointList plist2;
if so, returns the point to play at in killx, killy.
*/
short me, him, depth, i, j, tryCount, tl, topMark, tkMark, mark2;
char sChar;
sPointList lList, dList;
point tp;
short libList[maxSPoint+1];
short esc;
short mtNbrs(x, y)
short x, y;
{ /* mtNbrs */
short n = 0;
if ((x > 0) && (bord[x - 1][y] == 0))
n = n + 1;
if ((x < maxPoint) && (bord[x + 1][y] == 0))
n = n + 1;
if ((y > 0) && (bord[x][y - 1] == 0))
n = n + 1;
if ((y < maxPoint) && (bord[x][y + 1] == 0))
n = n + 1;
return n;
} /* mtNbrs */
short killTree(tx, ty, gx, gy, escape, tkMark)
short tx, ty, gx, gy, *escape, tkMark;
{ /* killTree */
short curMark, mark2, mark3, i, j, k, tl, dStart, result;
sPointList lList1, lList2;
short libList[maxSPoint+1];
point tp;
short esc = FALSE;
tryCount = tryCount + 1;
if (tryCount > tryLimit)
{
undoTo(tkMark);
/* for (i = 1; i <= depth - 1; i++)
{
sClearChar(sChar, rXor);
} */
depth = 1;
return FALSE;
}
/* write(sChar); */
depth = depth + 1;
curMark = playMark;
tryPlay(tx, ty, me); /* try my move */
- pause();
+// pause();
if (gList[gMap[groupIDs[tx][ty]]].libC == 0) /* I'm dead */
{
result = FALSE;
goto one;
}
else if (killFlag) /* I killed something of his */
{
result = TRUE;
goto one;
}
else if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim) /* safe */
{
result = FALSE;
goto one;
}
else
{
sSpanGroup(gx, gy, &lList1); /* find his liberties */
if (gList[gMap[groupIDs[tx][ty]]].libC == 1) /* he can kill me */
{
if (lList1.indx < maxSPoint) /* add that option to his list */
{
lList1.indx = lList1.indx + 1;
spanGroup(tx, ty, &plist2); /* find my liberty */
lList1.p[lList1.indx].px = plist2.p[1].px;
lList1.p[lList1.indx].py = plist2.p[1].py;
}
else
{
result = FALSE;
goto one;
}
}
for (i = 1; i <= maxSPoint; i++) /* init liblist so diags can be marked */
libList[i] = -1;
if ((utilPlayLevel > 4) &&
(lList1.indx > 1) &&
(gList[gMap[groupIDs[gx][gy]]].libC > 1)) /* try diags */
{
listDiags(gx, gy, &dList);
j = 0;
i = lList1.indx;
while ((j < dList.indx) &&
(i < maxSPoint))
{
j = j + 1;
i = i + 1;
libList[i] = 0; /* mark this as a diag */
lList1.p[i].px = dList.p[j].px;
lList1.p[i].py = dList.p[j].py;
}
lList1.indx = i;
}
if (lList1.indx > 1) /* sort by decreasing lib count */
{
for (i = 1; i <= lList1.indx; i++)
if (libList[i] != 0) /* diags are tried last */
{
mark2 = playMark;
tryPlay(lList1.p[i].px, lList1.p[i].py, him);
libList[i] = gList[gMap[groupIDs[gx][gy]]].libC;
if ((libList[i] > treeLibLim) ||
((libList[i] > (depthLimit - depth)) &&
(libList[i] > 2)))
{
*escape = TRUE;
result = FALSE;
goto one;
}
undoTo(mark2);
}
for (i = 1; i <= lList1.indx - 1; i++)
for (j = i + 1; j <= lList1.indx; j++)
if (libList[i] < libList[j])
{
tl = libList[i];
libList[i] = libList[j];
libList[j] = tl;
tp = lList1.p[i];
lList1.p[i] = lList1.p[j];
lList1.p[j] = tp;
}
}
for (i = 1; i <= lList1.indx + 1; i++) /* try his responses */
{
mark2 = playMark;
if (i <= lList1.indx) /* try his move */
{
tryPlay(lList1.p[i].px, lList1.p[i].py, him); /* play his response */
- pause();
+// pause();
if (gList[gMap[groupIDs[lList1.p[i].px]
[lList1.p[i].py]]].libC < 2)
goto two; /* a bogus move */
}
else if (gList[gMap[groupIDs[gx][gy]]].libC <= 1)
{
result = TRUE;
goto one;
}
if (gList[gMap[groupIDs[gx][gy]]].libC > treeLibLim)
{
*escape = TRUE;
result = FALSE;
goto one;
}
if (gList[gMap[groupIDs[gx][gy]]].libC > 1)
{ /* look at my responses */
sSpanGroup(gx, gy, &lList2); /* list his liberties */
dStart = lList2.indx + 1;
if (adjInAtari) /* he wins */
{
result = FALSE;
goto one;
}
if ((lList2.indx > 2) && adj2Libs) /* he wins */
{
result = FALSE;
goto one;
}
for (k = 1; k <= maxSPoint; k++)
libList[k] = -1;
if (utilPlayLevel > 4) /* account for diagonal moves */
{
listDiags(gx, gy, &dList);
j = 0;
k = lList2.indx;
while ((j < dList.indx) &&
(k < maxSPoint))
{
j = j + 1;
k = k + 1;
libList[k] = 100;
lList2.p[k].px = dList.p[j].px;
lList2.p[k].py = dList.p[j].py;
}
lList2.indx = k;
}
if (lList2.indx > 1) /* sort by increasing lib count */