2016-12-17 14 views
0

9x3サブアレイに分割された9x9アレイを含む究極のTic Tac Toゲームを作成するために、 各サブアレイは次のように番号付けされている:例えば、ユーザが2つのパラメータ、 を入力した場合、それは、9×9のマトリクスのセルに移行する(又はバック与えること enter image description here9x3アレイに9x3アレイに分割された要素のインデックスを見つける

及びI関数を作成しますインデックス)。 例えば2,2を入力すると2番目の3x3行列に行き、そこで2番目のセルに行きます。つまり、9x9行列のセル[0,4]になります。 私はC言語でコードを書いています。 私が結論づけたのは、多くのループを使って大きな機能を作って、直接私を望むセルに連れて行っていることですが、あまりにも私が思うに、それを簡単にすることができてうれしいです。

次のコードは、私が行ったことのちょうど始まりです。私は9x9マトリックスを3列に分割し、ユーザがサブ配列のために選択した1~9の数値に従って列を処理するたびに そこでは、各サブアレイが適切な場所を見つけるための一連の関数に行きます。その複雑すぎると、長いと、それは私のコードの問題thatsなぜ私は代替を探しています。

INT Insert_Move(チャープレーヤー、チャーはGameBoard [行] [列]、INT chosen_pos、 INT next_subboard)

{

if(next_subboard == 3 || next_subboard == 6 || next_subboard == 9) 

    return First_Column_9x9(player,GameBoard,chosen_pos,next_subboard); 

if(next_subboard == 2 || next_subboard == 5 || next_subboard == 8) 
    return Second_Column_9x9(player,GameBoard,chosen_pos,next_subboard); 

if(next_subboard == 1 || next_subboard == 4 || next_subboard == 7) 
    return Third_Column_9x9(player,GameBoard,chosen_pos,next_subboard); 

return 1; /*success */ 

}

+1

をあなたがしようとしているコードを投稿してください、あなたが問題に実行していると指摘。 –

+0

a)これまで行ったことを私に見せてください。 b)Cエキスパートではありませんが、私は考えています: オブジェクトの3x3配列を使用し、各オブジェクトは3x3arrayです 2次元配列にベクトルとしてアクセスできると思います。 2,2を与えると2番目の(3x3配列)オブジェクトを得ることができ、2番目の数(2)で実際のセルを得るでしょう –

+0

私はしました。私はsmiplerアルゴリズムを探しています。それは数学だけですが、適切な数式を把握することはできません。 –

答えて

1

2Dアレイのように:

X座標=((p1-1)℅3)* 3 +(p2-1)℅3; Y座標=((p1-1)/ 3)×3 +(p2-1)/ 3;

+0

私は6,5をチェックしました。私はX = 4、Y = 7になるはずですが、動作していません。 –

+1

出力も送ってください –

+0

私は動作すると思います!!ありがとう! –

1

ここでは、2つのsize_t値の配列をとって、セルのインデックスとユーザーが指定した2つの位置引数を格納する関数を示します。ゼロインデックス付き3X3配列内の指定された位置のインデックスを見つけ、これらの結果を組み合わせて9X9配列のインデックスを生成します。

私は入力のカップルをテストするための小さなプログラムでそれを置く:

#include <stdio.h> 

void get_index(size_t indices[2], int pos, int sub_board); 

int main(void) 
{ 
    size_t indices[2]; 
    int pos, sub_board; 

    pos = 2; 
    sub_board = 2; 

    get_index(indices, pos, sub_board); 

    printf("Cell indices are: [%zu][%zu]\n", indices[0], indices[1]); 

    pos = 6; 
    sub_board = 9; 

    get_index(indices, pos, sub_board); 

    printf("Cell indices are: [%zu][%zu]\n", indices[0], indices[1]);  

    return 0; 
} 

void get_index(size_t indices[2], int pos, int sub_board) 
{ 
    size_t row_pos, col_pos; 
    size_t row_sub, col_sub; 

    row_pos = (pos - 1)/3; 
    col_pos = (pos - 1) % 3; 
    row_sub = (sub_board - 1)/3; 
    col_sub = (sub_board - 1) % 3; 

    indices[0] = 3 * row_sub + row_pos;  
    indices[1] = 3 * col_sub + col_pos; 

} 

出力:

Cell indices are: [0][4] 
Cell indices are: [7][8] 
関連する問題