8 в моей матрице 4 * 4 автоматически поворачивается к 0 при выполнении этой программы - PullRequest
1 голос
/ 16 апреля 2020

Это - головоломка 15 , которую я программирую с уже предоставленной нам исходной конфигурацией. Здесь я рассмотрел отверстие как число 0. Примечание: я внес изменения, приведенные в комментариях, но проблема печати еще существует дважды. Я исправил границы массива, заменил значения ASCII на соответствующие им символы и сделал функции, чтобы сделать его более компактным, но я не понимаю, почему он печатается дважды ... Еще раз спасибо за помощь.

#include <stdio.h>
#include <stdlib.h>

void print(int x[][4], int, int);
void func(int z[][4], int*, int, int*, int);

void main() {
    int a[4][4] = {  1,  4, 15,  7,
                     8, 10,  2, 11,
                    14,  3,  6, 13,
                    12,  9,  5,  0 };
    int b[4][4];
    int n, temp, i, j, x_coord = 3, y_coord = 3, count = 0;

    while (count != 15) {
        print(a, 4, 4);
        count = 0;

        n = getch();
        if (n == 'H') {
            if (x_coord != 3)
                func(a, &x_coord, 1, &y_coord, 0);
            else
                printf("\nWrong move!\n");
        }
        if (n == 'P') {
            if (x_coord != 0)
                func(a, &x_coord, -1, &y_coord, 0);
            else
                printf("\nWrong move!\n");
        }
        if (n == 'K') {
            if (y_coord != 3)
                func(a, &x_coord, 0, &y_coord, 1);
            else
                printf("\nWrong move!\n");  
        }
        if (n == 'M') {
            if (y_coord != 0)
                func(a, &x_coord, 0, &y_coord, -1);
            else
                printf("\nWrong move!\n");
        }
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 4; j++) {
                b[i][j] = a[i][j];
            }
        }
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 4; j++) {
                if (b[i][j] == 0) {
                    temp = b[i][j];
                    b[i][j] = b[3][3];
                    b[3][3] = temp;
                }
            }
        }
        for (i = 0; i < 4; i++) {
            for (j = 0; j < 4; j++) {
                if (i == 4 && j == 4)
                    continue;
                if (b[i][j] == 4 * i + j + 1)
                    count++;
            }
        }
    }
}

void print(int x[][4], int r, int c) {
    int i, j;
    for (i = 0; i < r; i++) {
        for (j = 0; j < c; j++)
            printf("%d      ", x[i][j]);
        printf("\n\n");
    }
}

void func(int z[][4], int *x, int x1, int *y, int y1) {
    z[*x][*y] = z[*x + x1][*y + y1];
    z[*x + x1][*y + y1] = 0;
    *x = *x + x1;
    *y = *y + y1;
}
...