/* game hex(ma95012.c) 自分の学籍番号.cというファイル名にすること! created in 2006.11.23 modified in 2006.11.24 modified in 2006.11.29 modified in 2006.12.6 modified in 2006.12.13 by DEGUCHI Hiroshi 変更日付と氏名を明記すること! */ #include "hex.h" /*                 */ /* 自分用の変数はstatic宣言すること! */ /*                 */ /* hex盤のサイズ */ static int size; /*                */ /* 自作の関数はstatic宣言すること! */ /*                */ /* 常にx軸方向に繋げば良い様に座標変換 */ static int mygethex( int part, int x, int y ) { if( part == MARU ) return(gethex( part, x, y )); else return(gethex( part, y, x )); } /* 常にx軸方向に繋げば良い様に座標変換 */ static int myputhex( int part, int x, int y ) { if( part == MARU ) return(puthex( part, x, y )); else return(puthex( part, y, x )); } /* 常にx軸方向に繋げば良い様に座標変換 */ static void previous( int part, int *px, int *py ) { int tmp; if( part == BATSU ) tmp = *px, *px = *py, *py = tmp; } /* 関数名は自分の学籍番号(小文字)とすること! この関数はstatic宣言してはいけない! part:MARU or BATSU (xc,yc):直前の相手の手、自分が先手のときは(0,0) msg:事前準備(part==EMPTY)のときは msg に自分の名前を名乗る  その他毎回のコメントを msg に設定しても良い、無いときは0 戻り値  0:降参、1:正常終了 */ int ma95012( int part, int xc, int yc, char **msg ) { static int x, y; static int first = 1; /* 事前準備 */ if( part==EMPTY ) { /* 自分のユーザ名(学籍番号由来の関数名と同じ)を名乗る */ *msg = "ma95012"; return(1); } /* 初期化 */ if( first == 1 ) { first = 0; /* サイズを最初に把握しておく */ size = getsize(); x = y = 0; } /* prevous(), mygethex(), myputhex()を使えば、常にx軸方向に繋げば良い */ previous( part, &xc, &yc ); /* 手を決める/手を打つ */ *msg = 0; /* 通常は何も言わない */ /* 初手 */ if( x == 0 ) { for( y = 1; mygethex( part, x+1, y ) != EMPTY; y++ ) ; return( myputhex( part, ++x, y ) ); } /* 2手目以降 */ if( mygethex( part, x+1, y ) == EMPTY ) return( myputhex( part, ++x, y ) ); else if( mygethex( part, x+1, y+1 ) == EMPTY ) return( myputhex( part, ++x, ++y ) ); else if( mygethex( part, x, y+1 ) == EMPTY ) return( myputhex( part, x, ++y ) ); else if( mygethex( part, x, y-1 ) == EMPTY ) return( myputhex( part, x, --y ) ); else /* 打てない所に打って降参している */ { *msg = "参りました"; return( myputhex( part, x, y ) ); } } /* end of ma95012.c */