/*gomoku version 1.0 (c) 2000 Paul Boekholt (boekholt@dds.nl) copyright under the GNU GPL*/ #include #define breed 19 #define groot 361 unsigned char mat[breed][breed], help1[6][breed], help2[6][breed]; unsigned char step[6]={1,breed,breed+1,breed+1,breed-1,breed-1}; int eensom, tiensom, winner, teller, *zoekik, *zoekikniet; main() { printf (" This is the game of Gomoku.\n"); printf ("The aim is to get 5 in a row.\n "); showbord(); for(;teller96) y-=32; y-=65; x=atoi(invoer+1)-1; if (x>breed-1 || y>breed-1 || mat[x][y]) printf ("Invalid move, try again.\n"); else break; } mat [x][y]=1; check(x,y); } get_computer_move() { unsigned char x, y, *p, *q, j, k, l, max=0, som=0, lengte; int afstand, i; for (i=0,q=&help2[0][0]; i<6*breed; i++,q++) if (*q>max) { max=*q; j=i; zoekik=&tiensom; zoekikniet=&eensom; } if (max==8) /*als je kunt winnen, maakt het niet uit of je 2 kanten op kunt*/ max=9; for (i=0,q=&help1[0][0]; i<6*breed; i++,q++) if (*q>max) { max=*q; j=i; zoekik=&eensom; zoekikniet=&tiensom; } k=j/breed; l=j%breed; if (!max) { for (p=&mat[0][0]; p<&mat[0][0]+groot && *p; p++) ; if (p==&mat[0][0]+groot) { winner=2; return; } else goto einde; } switch (k) { case 0: p=&mat[l][0]; lengte=breed; break; case 1: p=&mat[0][l]; lengte=breed; break; case 2: p =&mat[0][breed-l]; lengte=l; break; case 3: p=&mat[l][0]; lengte=breed-l; break; case 4: p=&mat[0][l]; lengte=l+1; break; case 5: p=&mat[1+l][breed-1]; lengte=breed-l-1; break; } max=max/2; for (i=0;i<5;p+=step[k],i++) som+=*p; eensom =som%10; tiensom=som/10; for (;i= 0) { if (!*p && (*(p-step[k]) || *(p+step[k]))) goto einde; p-=step[k]; i--; } printf ("???\nI give up"); exit(1); einde: /*let op goto label*/ *p=10; afstand=p-&mat[0][0]; x=afstand/breed; y=afstand%breed; printf ("My move is %c%d\n",y+65,x+1); check(x,y); } check(x,y) unsigned char x,y; { zoekik=&eensom; zoekikniet=&tiensom; checker(x,y,help1); zoekik=&tiensom; zoekikniet=&eensom; checker(x,y,help2); } checker(x,y,help) unsigned char x,y; unsigned char help[][breed]; { int lengte; char *p; help[0][x]=maxrij(&mat[x][0],1,breed); help[1][y]=maxrij(&mat[0][y],breed,breed); lengte=((x=5) { p=((x=5) { p=((x+y=max) { if (*zoekik==max && flip) max+=1; else if (*zoekik>max) max=*zoekik; flip=1; } else flip=0; } if (max>=10) winner=1; return max; }