#include #include #include "rubiks.h" /** * Transform: [ axis, offset, dir ] * Axis: X | Y | Z * 5 * +---+ * +Y / 2 /| * | +---+1/ * | 3| 0 |/ * | +---+ * 4 * ---> +X * / * / * -Z * * +--+ * |5 | * +--+ * |2 | * +--+--+--+ * |3 |0 |1 | * Y +--+--+--+ * |4 | * | +--+ * | * +--> X * * offset: '1' >= '3' * dir: '+' : '-' (+: trigonometric direction) **/ void rubik_applyVect(t_rubiks *r, char v[3]) { rubik_applyX(r, (char[]) { 'X', '0', '+' }); spatial_show(r); rubik_applyX(r, (char[]) { 'X', '1', '+' }); spatial_show(r); rubik_applyX(r, (char[]) { 'X', '2', '+' }); spatial_show(r); exit(0); return; switch (v[0]) { case 'X': rubik_applyX(r, v); break; case 'Y': rubik_applyY(r, v); break; case 'Z': rubik_applyZ(r, v); break; default: break; } } void rubik_apply(t_rubiks *r, char m) { char mov[3] = { 0, 0, 0 }; int init_m = (int) m; mov[2] = (char)(m % 2) ? '+' : '-'; m /= 2; mov[1] = '0' + ((char)(m % 3)); m /= 3; mov[0] = 'X' + ((char)(m % 3)); rubik_applyVect(r, mov); } t_rubiks *rubik_createempty() { t_rubiks *result; int i; result = (t_rubiks *)malloc(sizeof(*result)); bzero(result, sizeof(*result)); return result; } t_rubiks *rubik_create(char matrix[54]) { t_rubiks *result; int i; for (i=0; i < 54; i++) if (matrix[i] < '0' || matrix[i] > '5') return NULL; if (matrix[54] != '\0') return NULL; result = (t_rubiks *)malloc(sizeof(*result)); memcpy(result->grid, matrix, sizeof(*matrix) * 54); return result; }