2016-11-18 9 views
0

4つの変数の間の等価性を確認するにはどうすればよいですか?これは、3Dティックタック・トゥ・ゲームのためのものです。双方向同等

if (b[0][0] == b[1][0] == b[2][0] == p) { line += 1; } 

これは、同等の意味が左から右であるため動作しません。私は以下のいずれかを行うにはしたくない:

if (b[0][0] == p && b[1][0] == p && b[2][0] == p) { line += 1; } 
if ((b[0][0] == b[1][0]) && (b[1][0] == b[2][0]) && (b[2][0] == p)) { line += 1; } 

私はちょうど& &を使用することができますboolsを知っているように、すべての変数は、整数です。より良い方法がありますか?私はみなさ:

if ((b[0][0] + b[1][0] + b[2][0]) == (3 * p)) { line += 1; } 

pので(O用X用XまたはOでもないため0、1、2)の3つの値のいずれかになります、それはわずか4かに不可能なものにOの値を変更する必要があります3つの1、0、またはそれらの組み合わせで達成する。しかし、それは精巧さに欠ける。

+0

私は唯一の学生ですので、私の推薦が良いかどうかわかりません。しかし、あなたは 'switch()'ステートメントに何か考えましたか? ifを補うためにネストされたケースを持つことができます。 – Callat

+1

なぜあなたはそれが欲しくないのですか? –

+0

@ KazRodgers私はそうかもしれませんが、同様の構造(3D Tic-Tac-Toeのためのものです)を持つ数十の線があります。 – gator

答えて

2

tic-tac-toeについて言及したので、物事は少し変わります。最終的には、同じ値の各列と同じ値の各行をチェックします。それは長いif ... else if...はしごを必要としません。代わりに、行をチェックする関数を記述してください:

bool row_matches(board b, int row, int value) { 
    for (int col = 0; col < 3; ++col) 
     if (b[row][col] != value) 
      return false; 
    return true; 
} 

と同様の関数を列に記述してください。対角線はもっと簡単です。

+0

さて、それは3D Tic-Tac-Toeで、9個の代わりに8個の列を使用しています(38個の条件付きチェック)。私は怠惰なことをして、それぞれの可能な行に対して条件文を書きました。 – gator

3

質問内の4つの変数のうち3つが1つのオブジェクトに属しているため、すべてをラップする方法を作成できます。 bool isValid(int *A, int val) {...}のようなものを入力し、if (isValid(b, p)) {...}のようなステートメントで使用します。より広い文脈が与えられないので、名前は任意である。