オセロゲーム 2次元配列で困ってます。
オセロゲームを作ってますが、オセロの石はただ置けばよいものではなく、他の石と接触している場所でないといけないですよね。だから、いきなり角に石を置く事ができないわけです。
隣に石があるか調べるには基本的には、左・右・上・下・左上・右上・左下・右下と8箇所ですが、端だと5箇所箇所となり、更に角になると3箇所となるわけです。
それぞれ石が置けるかを調べるために関数の一部にこのようなもの作って見ました。
でも、端に接触するマスの座標を指定しても、置けないはずなのに、いしが置けてしまいます。
動解決すればよいかおしえてください。
NGだと0を返し、OKだと1を返します。
#defien OTHELLO_NON 0
int Contact(int data[][GOBAN], int tate, int yoko )
{
int signal = 0;
if(data[tate][yoko - 1] != OTHELLO_NON){ signal = 1; }
if(data[tate][yoko + 1] != OTHELLO_NON){ signal = 1; }
if(data[tate - 1][yoko - 1] != OTHELLO_NON){ signal = 1; }
if(data[tate - 1][yoko] != OTHELLO_NON){ signal = 1; }
if(data[tate - 1][yoko + 1] != OTHELLO_NON){ signal = 1; }
if(data[tate + 1][yoko - 1] != OTHELLO_NON){ signal = 1; }
if(data[tate + 1][yoko] != OTHELLO_NON){ signal = 1; }
if(data[tate + 1][yoko + 1] != OTHELLO_NON){ signal = 1; }
return signal;
}
お礼
なるほど、単純に計算が成り立つものでないんですね。素朴な疑問にご丁寧にお答えして頂きありがとうございました。 また何かありましたらよろしくお願いします。