查找9x9数组元素的索引,该数组分为9个3x3数组

时间:2016-12-17 07:29:17

标签: c

为了创造一个终极的Tic Tac To游戏,其中包括一个分为9个3x3子阵列的9x9阵列。 每个子阵列按以下方式编号: enter image description here

我想创建一个函数,如果用户输入2个参数, 它转到9x9矩阵中的单元格(或者返回索引)。 例如,如果我输入2,2:我转到第二个3x3矩阵,然后我转到第二个单元格,这意味着我最终进入9x9矩阵的单元格[0,4]。 我用C语言编写代码。 我最终得到的就是制作一个带有许多循环的大功能,将我直接带到想要的单元格,但我认为它太多了,我会很乐意用一种更简单的方法来做到这一点。

任何想法?

以下代码只是我所做的开始, 我将9x9矩阵划分为3列,每次根据1-9的数字处理列,用户选择子阵列, 我在那里为每个子阵列找到一系列函数来找到合适的位置。它过于复杂和冗长,这就是我的代码问题,这就是为什么我在寻找替代方案。

int Insert_Move(char player,char GameBoard [Lines] [Columns],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 */

}

2 个答案:

答案 0 :(得分:1)

在2d数组中:

X坐标=((p1-1)℅3)* 3 +(p2-1)℅3;

Y坐标=((p1-1)/ 3)* 3 +(p2-1)/ 3;

答案 1 :(得分:1)

这是一个函数,它接受两个size_t值的数组来存储单元格的索引,以及用户给出的两个位置参数。它在零索引的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]