Ejemplo n.º 1
0
int findsaver(int *i, int *j, int *val)
/* find move if any pieces is threaten */
  {
   int m, n, minlib;
   int ti, tj, tval;

   *i = -1;   *j = -1;	 *val = -1;
   for (minlib = 1; minlib < 4; minlib++)
      {
/* count piece with minimum liberty */
       for (m = 0; m < 19; m++)
	 for (n = 0; n < 19; n++)
	   if ((p[m][n] == mymove) && (l[m][n] == minlib))
/* find move to save pieces */
	     {
	      initmark();
	      if (findnextmove(m, n, &ti, &tj, &tval, minlib) && (tval > *val))
		{
		 *val = tval;
		 *i = ti;
		 *j = tj;
	       }
	     }
     }
    if (*val > 0)   /* find move */
       return 1;
    else	    /* move not found */
       return 0;
 }  /* findsaver */
Ejemplo n.º 2
0
int findnextmove(int m,       /* current stone row number */
                 int n,       /* current stone column number */
                 int *i,      /* next move row number */
                 int *j,      /* next move column number */
                 int *val,    /* next move value */
                 int minlib)  /* current stone liberty */
/* find new move i, j from group containing m, n */
 {
  int ti, tj, tval;
  int found = 0;

  *i = -1;   *j = -1;	*val = -1;
/* mark current position */
  ma[m][n] = 1;

/* check North neighbor */
  if (m != 0)
     if (p[m - 1][n] == EMPTY)
      {
       ti = m - 1;
       tj = n;
       lib = 0;
       countlib(ti, tj, mymove);
       tval = fval(lib, minlib);
       found = 1;
      }
     else
       if ((p[m - 1][n] == mymove) && !ma[m - 1][n])
	 if (findnextmove(m - 1, n, &ti, &tj, &tval, minlib))
	    found = 1;

  if (found)
    {
     found = 0;
     if (tval > *val && fioe(ti, tj) != 1)
       {
	*val = tval;
	*i = ti;
	*j = tj;
      }
   }

/* check South neighbor */
  if (m != 18)
     if (p[m + 1][n] == EMPTY)
      {
       ti = m + 1;
       tj = n;
       lib = 0;
       countlib(ti, tj, mymove);
       tval = fval(lib, minlib);
       found = 1;
      }
     else
       if ((p[m + 1][n] == mymove) && !ma[m + 1][n])
	  if (findnextmove(m + 1, n, &ti, &tj, &tval, minlib))
	     found = 1;

  if (found)
    {
     found = 0;
     if (tval > *val && fioe(ti, tj) != 1)
       {
	*val = tval;
	*i = ti;
	*j = tj;
      }
   }

/* check West neighbor */
  if (n != 0)
     if (p[m][n - 1] == EMPTY)
      {
       ti = m;
       tj = n - 1;
       lib = 0;
       countlib(ti, tj, mymove);
       tval = fval(lib, minlib);
       found = 1;
      }
     else
       if ((p[m][n - 1] == mymove) && !ma[m][n - 1])
	  if (findnextmove(m, n - 1, &ti, &tj, &tval, minlib))
	      found = 1;

  if (found)
    {
     found = 0;
     if (tval > *val && fioe(ti, tj) != 1)
       {
	*val = tval;
	*i = ti;
	*j = tj;
      }
   }

/* check East neighbor */
  if (n != 18)
     if (p[m][n + 1] == EMPTY)
      {
       ti = m;
       tj = n + 1;
       lib = 0;
       countlib(ti, tj, mymove);
       tval = fval(lib, minlib);
       found = 1;
      }
     else
       if ((p[m][n + 1] == mymove) && !ma[m][n + 1])
	  if (findnextmove(m, n + 1, &ti, &tj, &tval, minlib))
	      found = 1;

  if (found)
    {
     found = 0;
     if (tval > *val && fioe(ti, tj) != 1)
       {
	*val = tval;
	*i = ti;
	*j = tj;
      }
   }

 if (*val > 0)	/* found next move */
    return 1;
 else	/* next move failed */
    return 0;
}  /* end findnextmove */