| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- #include <stdlib.h>
- #include <string.h>
- #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;
- }
|